2013-08-12 5 views
0

Я делаю свою первую попытку программирования игры. Это будет простая приключенческая игра, играемая в веб-браузере, я буду использовать django для отображения материала в html и python для работы в фоновом режиме. У меня возникают проблемы с определением класса карты, а именно с использованием координат.Хранение, а затем доступ к паре координат

На моих картах должно быть место икры и стены (на данный момент). Так икру я мог сделать ...

spawnx=models.IntegerField() 
spawny=models.IntegerField() 

... но он чувствует, как уродливые обходной путь. Раньше я никогда не использовал списки, и я также помню, что в python есть этот словарь. Имеют ли они какие-то особые преимущества? Имейте в виду, что места появления не будут изменены, им просто нужно сохранить координаты, в которых игроки появляются. У кого-нибудь есть идея?

Моей второй проблемой являются стены: мне действительно нужно использовать список, какой-то здесь. Но опять же, я не могу понять, как они работают, особенно в Django.

Итак, чтобы подвести итог, моя самая большая проблема заключается в том, как выяснить, как работают списки в Django, например field, и как они могут быть доступны.

Спасибо!

+0

Если вам нужно хранить только списки, возможно, Redis может быть более полезным, чем Django модели ... http://redis.io/commands#list – joaoricardo000

+0

@ JRicardo000 Я использую Django, потому что я хочу, чтобы хранить карту в базе данных. – Dunno

+0

@ dm03514 Я знаю это, но я ничего не мог найти о своей проблеме, которая использует списки в моделях Django. – Dunno

ответ

1

В Django отсутствует поддержка для хранения списка в поле. Единственный способ хранить несколько данных в одном поле - это отношение ManyToMany к другой таблице ... однако, это кажется немного излишним, когда все, что вы действительно хотите сохранить, это список двух целых кортежей.

Посмотрите на верхний ответ на this question. Это реализация ListField для Django, которая позволяет хранить основные типы Python - т. Е. Список кортежей.

Это пример того, как этот код может работать (непроверенные, адаптируя их «принимая его за спин, например, в этом вопросе»):

>>> from foo.models import Map, ListField 
>>> map = Map() 
>>> map.spawn_locations 
[] 
>>> map.spawn_locations = [(1, 1), (-1, 12), (24, 52)] 
>>> map.spawn_locations 
[(1, 1), (-1, 12), (24, 52)] 
>>> f = ListField() 
>>> f.get_prep_value(map.spawn_locations) 
u'[(1, 1), (-1, 12), (24, 52)]' 

Затем, чтобы выбрать случайное место на нерест:

>>> import random 
>>> random.choice(map.spawn_locations) 
(24, 52) 
>>> random.choice(map.spawn_locations) 
(1, 1) 
+0

Спасибо! Именно то, что я искал! – Dunno

Смежные вопросы