You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:15:26