Pygame贪吃蛇代码报错'int' object is not subscriptable求助
问题修复方案
核心报错原因
触发TypeError: 'int' object is not subscriptable的直接原因是snake_body初始化格式错误:
你原代码中snake_body的初始值为一维列表[100, 50],存储的是两个独立整数。遍历snake_body时取出的pos是100、50这类整数,自然无法使用pos[0]/pos[1]的下标访问语法。
正确的snake_body应该是嵌套列表,每个元素对应蛇身一块的坐标,初始蛇身只有1块,修改初始化代码即可:
# 修改前 # snake_body = [100, 50] # 修改后 snake_body = [[100, 50]]
其他潜在问题修复
修改完上述代码后还存在两处逻辑错误,会导致游戏运行异常:
- 蛇身自碰撞检测逻辑错误
原代码的自碰撞判断写错了y坐标的匹配规则,会出现误判/漏判,修改为:
# 修改前 # if snake_position[0] == block[0] and snake_position[0] == block[1]: # 修改后 if snake_position[0] == block[0] and snake_position[1] == block[1]:
- 窗口关闭事件判断位置错误
原代码把关闭窗口的判断放在了事件遍历循环外,只会检测最后一个事件的状态,可能出现点关闭按钮无响应的问题,把这段逻辑移到事件遍历循环内部:
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() # 原有按键判断逻辑保留
内容的提问来源于stack exchange,提问作者Yumgi
相关产品推荐
相关产品推荐

