首页 > 解决方案 > 乌龟没有反应

问题描述

我一直在尝试在 3 个海龟光标之间制作一个赛车游戏,并且我为每个光标创建了一个函数,可以向前移动 5 个像素,直到它们到达画布的顶部。然而,跑的时候,乌龟一直闲着,我不知道为什么。

import turtle
import random

Bank_account = 0


class turtle_s:

    def __init__(self, color):
        self.color = color
        self.turt = turtle.Pen()
        self.turt.shape('turtle')
        self.turt.color(color)


red_turtle = turtle_s('red')
blue_turtle = turtle_s('blue')
yellow_turtle = turtle_s('yellow')

turtle_list = [red_turtle, blue_turtle, yellow_turtle]


## Turtle Game Setup
def turtle_stuff():

    turtle.screensize(canvwidth=500, canvheight=500)
    turtle.bgcolor('black')

    for color_turtle in turtle_list:

        if turtle_list.index(color_turtle) % 3 == 0:

            color_turtle.turt.penup()
            color_turtle.turt.setpos(-300, -250)
            color_turtle.turt.left(90)

        elif turtle_list.index(color_turtle) % 3 == 1:

            color_turtle.turt.penup()
            color_turtle.turt.setpos(300, -250)
            color_turtle.turt.left(90)

        else:

            color_turtle.turt.penup()
            color_turtle.turt.setpos(0, -250)
            color_turtle.turt.left(90)


def turtle_move():

    for color_turtle in turtle_list:

        color_turtle.turt.speed(random.randint(3, 5))

        while color_turtle.turt.ycor() != 250:

            color_turtle.turt.forward(5)
turtle_stuff()
turtle_move()

标签: pythonturtle-graphics

解决方案


当我运行您的代码时,海龟不会像您描述的那样保持空闲状态。但不幸的是,他们所做的是完全轮流进行比赛,而不是同时进行。这与您的嵌套循环的结构有关turtle_move()。让我们重新编写代码以简化它,修复上述问题,并解决一些样式问题:

from turtle import Screen, Turtle
from random import randint

class racing_turtle:

    def __init__(self, color):
        self.turtle = Turtle()
        self.turtle.shape('turtle')
        self.turtle.color(color)

racer_list = [racing_turtle('red'), racing_turtle('blue'), racing_turtle('green')]

def racers_setup():
    for offset, racer in enumerate(racer_list, -1):
        racer.turtle.penup()
        racer.turtle.setheading(90)
        racer.turtle.setpos(offset * 300, -250)

def racers_move():
    while True:
        for racer in racer_list:
            distance = randint(2, 6)
            racer.turtle.forward(distance)
            if racer.turtle.ycor() > 250:
                racer.turtle.pencolor('gold')
                break
        else:  # no break
            continue

        break

screen = Screen()
screen.screensize(canvwidth=500, canvheight=500)
screen.bgcolor('black')

racers_setup()
racers_move()

screen.mainloop()

推荐阅读