我正在使用Python和curses库开发一个简单的贪吃蛇游戏,但遇到了一个问题:蛇虽然能移动到食物位置上,却不会因此变长。能否帮我诊断一下问题所在,并提供修复这个问题的方法呢?
import curses
from random import randint
def create_food(snake, box):
food = None
while not food:
food = [randint(box[0]+1, box[1]-1), randint(box[2]+1, box[3]-1)]
if food in snake:
food = None
return food
def main(stdscr):
curses.curs_set(0)
stdscr.timeout(100)
sh, sw = stdscr.getmaxyx()
w = curses.newwin(sh, sw, 0, 0)
w.keypad(True)
box = [3, sh-3, 3, sw-3]
snake = [
[sh//2, sw//2],
[sh//2, sw//2-1],
[sh//2, sw//2-2]
]
food = create_food(snake, box)
key = curses.KEY_RIGHT
while True:
next_key = w.getch()
key = key if next_key == -1 else next_key
head = [snake[0][0], snake[0][1]]
# 根据按键改变蛇头方向
head[0] += (key == curses.KEY_DOWN) - (key == curses.KEY_UP)
head[1] += (key == curses.KEY_RIGHT) - (key == curses.KEY_LEFT)
snake.insert(0, head) # 将新头部插入蛇身列表前端
# 检查蛇是否吃到食物
if head == food:
food = create_food(snake, box) # 吃到食物后重新生成食物
else:
tail = snake.pop() # 未吃到食物则移除蛇尾
# 更新屏幕显示
w.addch(food[0], food[1], curses.ACS_PI) # 绘制食物
w.addch(tail[0], tail[1], ' ') # 清除蛇尾
w.addch(snake[0][0], snake[0][1], '*') # 绘制蛇头
# 检查游戏结束条件
if (
snake[0][0] in [box[0], box[1]] or
snake[0][1] in [box[2], box[3]] or
snake[0] in snake[1:]
):
break
curses.wrapper(main)
我需要蛇在吃到食物时变得更长。