Python终端贪吃蛇开发求助:列表位置重置异常问题
终端贪吃蛇游戏位置重置问题
我是Python初学者,为熟悉Python语言正在开发仅基于终端的贪吃蛇游戏。当前代码能实现标记0的移动,但无法将除前一位置外的其余列表位置重置为'-'——用not x只在初始阶段有效,后续失效,求解决方案。
我的代码如下:
import keyboard dirx = 1 diry = 0 x = 0 y = 0 a = ['-', '-', '-', '-', '-'] def getkey(): global x keyboard.wait('d') x +=1 while True: # creates a constantly updating list, which will function as part of the game board a[x] = 0 a[not x] = '-' print('\r', a, end='') getkey() if x > 4: x = 0
问题根源
not x的逻辑完全不符合需求:当x=0时,not x返回True(对应列表索引1);当x>0时,not x返回False(对应列表索引0)。也就是说,不管你怎么移动,每次只会重置索引0或1的位置,其他位置的0根本不会被清除,自然会残留多个标记。
解决办法
核心思路是记录上一次的位置,每次移动时先把上一位置重置为'-',再更新当前位置为0。
修改后的代码:
import keyboard dirx = 1 diry = 0 x = 0 y = 0 # 新增变量存上一次的位置 prev_x = 0 a = ['-', '-', '-', '-', '-'] def getkey(): global x, prev_x keyboard.wait('d') # 移动前先保存当前位置为上一位置 prev_x = x x += 1 # 边界处理移到这里更顺 if x > 4: x = 0 while True: # 先清除上一位置的标记 a[prev_x] = '-' # 再设置当前位置的标记 a[x] = 0 print('\r', a, end='') getkey()
额外小建议
- 后续如果要加WASD多方向控制,可以在
getkey里判断按键,通过修改dirx/diry来更新位置,而不是固定只加1 - 可以加
time.sleep(0.2)之类的代码控制刷新速度,避免画面跳得太快
内容的提问来源于stack exchange,提问作者Neddo
相关产品推荐
相关产品推荐

