乌龟赛跑游戏中实现多海龟同时移动及x=540处掉头的问题求助
问题根因
- 你的代码是串行阻塞执行的逻辑:首先进入蓝海龟的移动循环,蓝海龟跑到540坐标后触发掉头,之后进入
blue_turn > 0的无限后退循环——你没有给这个后退循环加终止条件,程序会永远卡在蓝海龟的逻辑里,永远执行不到后面其他海龟的代码块,所以只有蓝海龟动。 tilt(180)是旋转海龟的绘制图标,不会修改海龟的移动朝向,你需要用left(180)或者setheading(180)来改变移动方向,不需要单独写前进/后退两套逻辑。- 你完全不需要单独定义四个turn变量,也不需要把每个海龟的逻辑拆成独立的循环,所有海龟的移动逻辑应该放在同一个循环里并行处理。
可直接运行的修正代码
首先确保已经导入依赖库,完整可运行代码如下:
from turtle import * from random import randint # 初始化四只海龟 blue_turtle = Turtle() blue_turtle.color('blue') blue_turtle.penup() blue_turtle.goto(-500, 100) blue_turtle.pendown() pink_turtle = Turtle() pink_turtle.color('pink') pink_turtle.penup() pink_turtle.goto(-500, 50) pink_turtle.pendown() yellow_turtle = Turtle() yellow_turtle.color('yellow') yellow_turtle.penup() yellow_turtle.goto(-500, 0) yellow_turtle.pendown() green_turtle = Turtle() green_turtle.color('green') green_turtle.penup() green_turtle.goto(-500, -50) green_turtle.pendown() def gamestart(): # 所有海龟放在同一循环并行处理 turtles = [blue_turtle, pink_turtle, yellow_turtle, green_turtle] while True: for t in turtles: # 没到右边界就朝右走,到了就朝左走 if t.xcor() < 540: t.setheading(0) else: t.setheading(180) t.speed(randint(0,4)) t.forward(randint(1,8)) # 绑定空格触发游戏 screen = Screen() screen.listen() screen.onkey(gamestart, "space") done()
内容的提问来源于stack exchange,提问作者김유석
相关产品推荐
相关产品推荐

