python - 即使列表的迭代到位,墙壁碰撞也不起作用
问题描述
我的墙壁碰撞代码不起作用。我没有收到任何错误消息,播放器只是穿过墙壁。这是我的代码:
def drawRect(x, y):
pygame.draw.rect(screen, BLUE, [pxl(x), pxl(y), pxl(1), pxl(1)])
def drawLevel(level):
global gameDrawn, wallsCoord
x = y = 0
wallsCoord = []
walls = []
ends = []
if gameDrawn == False:
screen.fill(WOODY)
drawRect(1, 8)
showTimer()
for row in levels[level]:
for col in row:
if col == "W":
wall = Wall((x, y))
walls.append(wall)
wallsCoord.append((x, y))
if col == "E":
end = End((x, y))
ends.append(end)
if col == "P":
drawRect(1, 9)
x += 80
y += 80
x = 0
for wall in walls:
pygame.draw.rect(screen, BLACK, wall.rect)
for end in ends:
pygame.draw.rect(screen, RED, end.rect)
gameDrawn = True
return walls, ends
def drawPlayerPath(players):
global wallsCoord
for x, y in players:
if (x, y) in wallsCoord:
state = "gameover"
init_state = True
else:
drawRect(x, y)
def getPlayerPath(players):
global move_list, player_x, player_y
player_x, player_y = players[0]
for i in move_list:
if i == 1:
player_y -= 1
elif i == 2:
player_y += 1
elif i == 3:
player_x += 1
elif i == 4:
player_x -= 1
players.append((player_x, player_y))
我真的不明白,为什么它不起作用,因为我已经在墙壁的坐标列表上迭代了玩家列表的 x 和 y 值。
解决方案
global
当您想在函数内更改全局命名空间中的变量时,您必须使用该语句:
def drawPlayerPath(players):
global state, init_state # <---
for x, y in players:
if (x, y) in wallsCoord:
state = "gameover"
init_state = True
else:
drawRect(x, y)
推荐阅读
- django - 如何在 django 中显示与外键相关的对象
- ios - 如何在重新安装之间跟踪用户?
- c++ - 无规则运行忍者
- r - R data.table 查找组内的最小值和最大值
- lumen - Lumen trait DatabaseTransactions 似乎覆盖了测试中的连接设置
- python - 如何将值除以月份中的天并在 Pandas 中创建天列?
- php - WordPress中的“调用未定义函数”
- docker - nginx 仅服务/但不服务任何其他文件
- javascript - React Native - 浮动(或弹出)屏幕问题
- vue.js - Azure APIM 在预检和从 axios 发出的 GET 请求时返回空响应正文,状态代码为 200