存储然后访问一对坐标

时间:2013-08-12 17:26:54

标签: python django

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

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

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

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

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

总而言之,我最大的问题是弄清楚Django中的列表是如何工作的 - 例如,field使用它们以及如何访问它们。

谢谢!

1 个答案:

答案 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)
相关问题