我正在尝试编写游戏。这将是一个在网络浏览器中播放的简单冒险游戏,我将使用django来显示html和python中的东西以在后台工作。我在定义地图类方面遇到了麻烦,即在坐标上操作。
我的地图需要有一个生成位置和墙(目前)。因此,对于spawn,我可以做...
spawnx=models.IntegerField()
spawny=models.IntegerField()
......但感觉就像一个丑陋的解决方法。我以前从未使用过列表,而且我还记得python中有这个字典的东西。他们有什么特别的优势吗?请记住,生成位置不会被更改,它们只需要存储玩家生成的坐标。有没有人有想法?
我的第二个问题是墙:我真的需要在这里使用某种清单。但同样,我无法弄清楚它们是如何工作的,特别是在Django中。
总而言之,我最大的问题是弄清楚Django中的列表是如何工作的 - 例如,field
使用它们以及如何访问它们。
谢谢!
答案 0 :(得分:1)
开箱即用,Django不支持在字段中存储列表。对单个字段存储多个数据的唯一方法是与另一个表的ManyToMany
关系...但是,当你真正想存储的是一个包含两个整数元组的列表时,这似乎有点过分。
查看this question上的最佳答案。它是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)