Python Turtle模块蛇游戏键盘按键无响应问题排查求助
解决你的Python蛇游戏键盘无响应问题
嘿,我一眼就揪出问题所在了——你的代码执行顺序出了岔子,导致键盘监听的逻辑根本没机会运行!
问题核心
看你的main函数:你先调用了start_game,而这个函数里有个while game_on的无限循环,一旦进入这个循环,代码就会一直卡在里面打转,永远不会执行后面的control_snake函数。也就是说,你写的screen.listen()和那些按键绑定代码,从头到尾都没被执行过,蛇当然不会理你的键盘输入啦!
修复方案
只需要调整代码结构,把键盘监听的逻辑提前到游戏循环启动之前执行就行。我帮你修改了完整代码,还加了点小优化:
import time from turtle import Screen, Turtle STARTING_X_POSITIONS = [0, -20, -40] MOVEMENT_DISTANCE = 20 class Snake: def __init__(self): self.segments = [] self.create_snake() self.head = self.segments[0] def create_snake(self): for i in range(3): new_snake = Turtle('square') new_snake.color('RoyalBlue') new_snake.penup() new_snake.goto(STARTING_X_POSITIONS[i], 0) self.segments.append(new_snake) def move(self): for snake_index in range(len(self.segments) - 1, 0, -1): x_pos = self.segments[snake_index - 1].xcor() y_pos = self.segments[snake_index - 1].ycor() self.segments[snake_index].goto(x_pos, y_pos) self.segments[0].forward(MOVEMENT_DISTANCE) def up(self): # 加个判断防止蛇直接掉头(符合游戏常规逻辑) if self.head.heading() != 270: self.head.setheading(90) def down(self): if self.head.heading() != 90: self.head.setheading(270) def left(self): if self.head.heading() != 0: self.head.setheading(180) def right(self): if self.head.heading() != 180: self.head.setheading(0) def setup_screen(screen): screen.bgcolor('black') screen.title('Snake Game') screen.setup(width=600, height=600) screen.tracer(0) def start_game(screen, snake): setup_screen(screen) # 先完成键盘监听绑定,再进入游戏循环 screen.listen() screen.onkey(key='Up', fun=snake.up) screen.onkey(key='Down', fun=snake.down) screen.onkey(key='Left', fun=snake.left) screen.onkey(key='Right', fun=snake.right) game_on = True while game_on: screen.update() time.sleep(0.1) snake.move() screen.exitonclick() def main(): screen = Screen() snake = Snake() start_game(screen, snake) if __name__ == '__main__': main()
额外说明
我给方向控制方法加了个小判断:防止蛇直接掉头(比如正在向上移动时,按向下键不会立刻反向),这是蛇游戏的常规逻辑,你要是不喜欢可以直接删掉这些判断。
现在运行代码,蛇应该就能乖乖响应你的方向键啦!
内容的提问来源于stack exchange,提问作者漣侑稀
相关产品推荐
相关产品推荐

