我正在尝试修复一个非常简单的pygame迷你游戏,但是我对字典不是很熟悉。因此,我有一本字典,其中包含四个怪物(键)及其各自的开始位置,作为列表中的值。为了用pygame绘制它们或使它们移动,我想使用一个for循环来遍历字典,但是似乎我无法索引字典的值,所以我有点卡住了。
以下是我用来绘制怪物的尝试:
monsterStart={"M1":[40,40], "M2":[580,40], "M3":[40,380], "M4":[580,380]}
global monsterStart
def drawMonsters(monsters):
monsters=monsterStart
for monster in monsters:
monsterPosition = monsters[monster]
MP_x = monsterPosition[0]
MP_y = monsterPosition[1]
pygame.draw.rect(DISPLAYSURFACE, Blue, (MP_x, MP_y, 20, 20))
drawMonsters(monsterStart)
当我尝试运行我的代码时,它给了我这个错误:
Traceback (most recent call last):
File "cave_room_bonus.py", line 457, in drawMonsters
monsterPosition = monsters[monster]
TypeError: tuple indices must be integers or slices, not dict
不幸的是,我无法弄清楚出什么问题或想出另一种方法对此编程。我在编程领域比较陌生,因此,我将为您提供一些帮助!
答案 0 :(得分:1)
您可以通过访问字典中的键来获取怪物列表(我认为它们是M1,M2,...,M n )。由于密钥应该是唯一的,所以它们的行为可以像您所描述的那样。
您的函数将如下所示:
class Test:
def __call__(self, a, b, c):
return a + b + c
class Test2 (Test):
def __call__(self, a, b):
return a + b
result1 = Test()(a, b, c)
result2 = Test2()(a, b)
您还可以运行此命令以查看字典的工作方式:
# Passing our dictionary as a default argument for illustrative purposes.
def drawMonsters(monster_start_dict=monsterStart):
for monster in monster_start_dict.keys():
monsterPosition = monster_start_dict[monster]
MP_x = monsterPosition[0]
MP_y = monsterPosition[1]
pygame.draw.rect(DISPLAYSURFACE, Blue, (MP_x, MP_y, 20, 20))
输出:
for monster in monsterStart.keys():
monsterPosition = monsterStart[monster]
print(monster, ' -> ', monsterPosition)
或者,直接调用值位置(如函数中的0和1):
M1 -> [40, 40]
M2 -> [580, 40]
M3 -> [40, 380]
M4 -> [580, 380]
输出:
for monster in monsterStart.keys():
print('X -> ', monsterStart[monster][0])
print('y -> ', monsterStart[monster][1])
print('')
这将使您进一步简化功能:
X -> 40
y -> 40
X -> 580
y -> 40
X -> 40
y -> 380
X -> 580
y -> 380
最后,使用列表理解:
def drawMonsters(monster_start_dict=monsterStart):
for m in monster_start_dict.keys():
pygame.draw.rect(DISPLAYSURFACE, Blue, (monster_start_dict[m][0], monster_start_dict[m][1], 20, 20))