【问题标题】:Storing and then accessing a pair of coordinates存储然后访问一对坐标
【发布时间】:2013-08-14 02:55:17
【问题描述】:

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

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

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

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

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

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

谢谢!

【问题讨论】:

  • 如果你只需要存储列表,也许 redis 会比 Django 模型更有用...redis.io/commands#list
  • @JRicardo000 我正在使用 Django,因为我想将地图存储在数据库中。
  • @dm03514 我知道,但我找不到任何关于我的问题的信息——在 Django 模型中使用列表。

标签: python django


【解决方案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)

【讨论】:

  • 谢谢!正是我想要的!
猜你喜欢
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 2013-03-29
  • 2016-07-13
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多