0

我正在尝试编写游戏。这将是一个在网络浏览器中玩的简单冒险游戏,我将使用 django 以 html 和 python 显示内容以在后台工作。我在定义地图类时遇到了麻烦,即在坐标上操作。

我的地图需要有一个生成位置和墙壁(目前)。所以对于 spawn 我可以做...

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

...但感觉就像一个丑陋的解决方法。我以前从未使用过列表,而且我还记得 python 中有这本字典。他们有什么特别的优势吗?请记住,生成位置不会更改,它们只需要存储玩家生成的坐标。有人有想法吗?

我的第二个问题是墙壁:我真的需要在这里使用某种列表。但同样,我无法弄清楚它们是如何工作的,尤其是在 Django 中。

所以总结一下我最大的问题是弄清楚列表在 Django 中是如何工作的——比如,field它们使用什么以及如何访问它们。

谢谢!

4

1 回答 1

1

开箱即用,Django 不支持在字段中存储列表。针对单个字段存储多个数据的唯一方法是ManyToMany与另一个表建立关系......但是,当您真正想要存储的只是两个整数元组的列表时,这似乎有点矫枉过正。

看看这个问题的最佳答案。它是 Django 的 ListField 的实现,允许存储基本的 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)
于 2013-08-12T17:40:44.900 回答