基于Python turtle的双人Tron游戏如何添加开场倒计时功能
实现方案
你只需要新增启动状态标记、开场倒计时逻辑,同时在所有玩家操作函数开头增加状态校验即可,顺带修复了原代码里的3个影响运行的问题:
- 修正按键绑定笔误
screeb为screen - 修正控制函数红蓝玩家写反、蓝方上移步长异常为100的问题,所有方向移动步长统一为1
- 把原按键函数里阻塞进程的死循环移动逻辑移到统一主循环,避免按键触发后程序卡死无法响应转向操作,方便你后续补充碰撞、游戏结束判定逻辑
核心逻辑:
- 初始状态下
game_started标记为False,玩家触发按键时直接拦截,不执行方向修改和移动逻辑 - 游戏资源加载完成后在屏幕中央显示3秒倒计时,倒计时结束显示"GO!"后将启动标记置为
True,此时玩家操作才会正式生效
修改后完整代码
import turtle import time def tron(): blueplayer = turtle.Turtle() redplayer = turtle.Turtle() screen = turtle.Screen() # 关闭自动刷新保证画面流畅 screen.tracer(0) blueplayer.speed(0) redplayer.speed(0) screen.setup(600, 600) screen.bgcolor('black') # 本地有对应素材时可取消下面4行注释 # screen.bgpic('TronBg.png') # screen.addshape('BlueBike.gif') # screen.addshape('RedBike.gif') # blueplayer.shape('BlueBike.gif') # redplayer.shape('RedBike.gif') redplayer.pencolor("red") redplayer.pensize(4) blueplayer.pencolor("blue") blueplayer.pensize(4) redplayer.pu() blueplayer.pu() blueplayer.goto(-200, 50) # 初始蓝方朝右、红方朝左 blueplayer.setheading(0) redplayer.goto(200, 50) redplayer.setheading(180) redplayer.pd() blueplayer.pd() # 游戏启动状态标记,初始为未启动 game_started = False # 倒计时专用画笔 countdown_pen = turtle.Turtle() countdown_pen.hideturtle() countdown_pen.penup() countdown_pen.color("white") countdown_pen.goto(0, 0) # 红方WASD控制逻辑 def RedUp(): if not game_started: return redplayer.tilt(90) redplayer.setheading(90) def RedDown(): if not game_started: return redplayer.tilt(270) redplayer.setheading(270) def RedLeft(): if not game_started: return redplayer.tilt(180) redplayer.setheading(180) def RedRight(): if not game_started: return redplayer.setheading(0) # 蓝方方向键控制逻辑 def BlueUp(): if not game_started: return blueplayer.tilt(90) blueplayer.setheading(90) def BlueDown(): if not game_started: return blueplayer.tilt(270) blueplayer.setheading(270) def BlueLeft(): if not game_started: return blueplayer.tilt(180) blueplayer.setheading(180) def BlueRight(): if not game_started: return blueplayer.setheading(0) # 绑定按键 screen.listen() screen.onkey(RedUp, "w") screen.onkey(RedDown, "s") screen.onkey(RedLeft, "a") screen.onkey(RedRight, "d") screen.onkey(BlueUp, "Up") screen.onkey(BlueDown, "Down") screen.onkey(BlueLeft, "Left") screen.onkey(BlueRight, "Right") # 游戏主循环,约60帧刷新率 def game_loop(): if game_started: blueplayer.forward(1) redplayer.forward(1) screen.update() screen.ontimer(game_loop, 16) # 执行开场倒计时 for cnt in [3, 2, 1, "GO!"]: countdown_pen.clear() countdown_pen.write(cnt, align="center", font=("Arial", 64, "bold")) screen.update() time.sleep(1) countdown_pen.clear() # 倒计时结束开放操作 game_started = True game_loop() screen.mainloop() tron()
后续你要加游戏结束逻辑,直接在
game_loop函数内补充碰撞检测、胜负判定即可,不需要改动现有启动控制逻辑。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

