Python 海龟赛重启功能

问题描述 投票:0回答:2

我刚刚完成了我的第一次海龟竞赛,还剩下一个任务,即重新启动功能。我只是无法让它按我想要的方式工作。目标是问题的输出:重新启动? y 或 n,这将重新启动 race() 函数。我真的需要你们的帮助。

from turtle import *
from random import randint


Andi = Turtle("turtle")
Andi.color("red")
Andi.shape("turtle")
Andi.penup()
Andi.goto(-300,200)
Andi.pendown()

Dom = Turtle("turtle")
Dom.color("green")
Dom.shape("turtle")
Dom.penup()
Dom.setpos(-300,180)
Dom.pendown()

Pete = Turtle("turtle")
Pete.color("blue")
Pete.shape("turtle")
Pete.penup()
Pete.setpos(-300,160)
Pete.pendown()

Emir = Turtle("turtle")
Emir.color("yellow")
Emir.shape("turtle")
Emir.penup()
Emir.setpos(-300,220)
Emir.pendown()

windowcolor=Screen()
windowcolor.bgcolor("black")

turtles = [Emir, Pete, Dom, Andi]
def race():
    global turtles
    winner = False
    finishline = 300

    while not winner:
        for current_turtle in turtles:
            move = randint(0, 10)
            current_turtle.forward(move)
            xcor = current_turtle.xcor()
            if (xcor > finishline):
                winner = True
                current_turtle.forward(0)
                winner_color = current_turtle.color()
                print('The winner is', winner_color[1])
def restart():
    global turtles
    while race():
        turtle.clear()                
race ()
restart ()
while True:
    while True:
        answer = str(input("Restart? (y/n): "))
        if answer in ("y", "n"):
            break
        print("Invalid awnser")
    if answer == "y":
        race
    else:
        print("Shutting off")
        break

windowcolor.mainloop()

while True:
    windowcolor.update()

我在 restart() 函数中做错了什么?

python random turtle-graphics restart python-turtle
2个回答
1
投票

turtles
turtle
的数组。您需要迭代数组并调用每个
clear()

def restart():
    global turtles
    while race():
        for turtle in turtles:
            turtle.clear()  

0
投票

您可以将海龟初始化代码放入一个函数中,然后在您想要重置游戏时调用它:

from random import randint
from turtle import Screen, Turtle


def initialize():
    Screen().bgcolor("black")
    Andi.color("red")
    Andi.shape("turtle")
    Andi.penup()
    Andi.goto(-300,200)
    Andi.pendown()
    Dom.color("green")
    Dom.shape("turtle")
    Dom.penup()
    Dom.setpos(-300,180)
    Dom.pendown()
    Pete.color("blue")
    Pete.shape("turtle")
    Pete.penup()
    Pete.setpos(-300,160)
    Pete.pendown()
    Emir.color("yellow")
    Emir.shape("turtle")
    Emir.penup()
    Emir.setpos(-300,220)
    Emir.pendown()
    

def race():
    winner = False
    finishline = 300

    while not winner:
        for current_turtle in turtles:
            move = randint(0, 10)
            current_turtle.forward(move)
            xcor = current_turtle.xcor()

            if xcor > finishline:
                winner = True
                current_turtle.forward(0)
                winner_color = current_turtle.color()
                print("The winner is", winner_color[1])


Andi = Turtle("turtle")
Dom = Turtle("turtle")
Pete = Turtle("turtle")
Emir = Turtle("turtle")
turtles = [Emir, Pete, Dom, Andi]

while True:
    initialize()
    race()

    while True:
        answer = str(input("Restart? (y/n): "))
        if answer in ("y", "n"):
            break
        print("Invalid awnser")

    if answer != "y":
        print("Shutting off")
        break

其他备注:

  • race
    这样的线什么也不做。您需要调用该函数:
    race()
  • while True:
    之后的代码通常不会运行,除非你跳出循环。当您打破主游戏循环时,您已经打印了“关闭”,因此
    mainloop
    只会挡住屏幕。
    mainloop
    是无限的,所以它后面的
    while True:
    代码是不可访问的。基本上:明智地使用
    while True:
    ;在像这样的海龟程序中,通常只有一两个精心放置的无限循环。
  • 考虑使用
    textinput()
    而不是
    input()
    。这样,用户就一直处于 GUI 中。
  • windowcolor
    是一个奇怪的屏幕变量名称。只需使用
    screen
    或在每次需要时调用
    Screen()
    单例 getter。
  • from turtle import *
    是一种糟糕的做法,它会用一百多个海龟函数污染全局命名空间,并在海龟函数和实例 API 之间造成混淆。始终使用
    from turtle import Screen, Turtle
© www.soinside.com 2019 - 2024. All rights reserved.