从Python中的列表中访问元组

时间:2013-12-24 07:06:43

标签: python list pygame tuples

所以,我还没弄清楚如何做到这一点。我正在为一个游戏制作一个地图解析器,到目前为止,我在模块“maps”中有一个三维列表“mapData”。它存储包含tile和floor id的元组。所以,当我试图开场时,我打电话给

if maps.mapData[mapIndex][x][y][0] == 0: c.blit(maps.grass, tileRect)

以画草为例,画出我称之为的瓷砖

if maps.mapData[mapIndex][x][y][1] == 1: c.blit(maps.tallGrass, tileRect)
画高草。虽然,[0]和[1]是我很困惑的。他们试图分别引用元组的第一个和第二个元素,但我怀疑我做错了,因为我收到了这个错误:

TypeError: 'int' object is not subscriptable

只是为了帮助,列表“mapData”初始化如下:

mapData = [[[0 for y in range(19)] for x in range(25)] for m in range(mapAmount)]
mapData[mapIndex["spawn"]][5][5] = (0, 1)

“mapIndex”是一个整数字典,用于指定哪个地图是什么。

所以,我需要知道如何从元组中获取特定元素,最好不使用x,y =元组,因为它需要更多的内存,因为它必须存储变量。这是在渲染循环中。如果这是唯一的方法,那么我就可以了。谢谢!

作为一个附带问题,除了在渲染代码中创建一个巨大的if + elif语句之外,有没有人更好地决定绘制哪个tile?

编辑:我试过这段代码:

 floor, tile = maps.mapData[mapIndex][x][y]

 #draw floor
 if floor == 0: c.blit(maps.grass, tileRect)

 #draw tiles
 if tile == 1: c.blit(maps.tallGrass, tileRect)

并收到错误:

TypeError: 'int' object is not iterable

1 个答案:

答案 0 :(得分:1)

感谢@LukasGraf,问题已经解决了。并非列表中的所有变量都初始化为元组,因此我更改了此初始化代码

mapData = [[[0 for y in range(19)] for x in range(25)] for m in range(mapAmount)]

到这个

mapData = [[[(0, 0) for y in range(19)] for x in range(25)] for m in range(mapAmount)]

使列表中的默认值为元组(0,0)而不是0。