我刚刚完成了我的第一次海龟竞赛,还剩下一个任务,即重新启动功能。我只是无法让它按我想要的方式工作。目标是问题的输出:重新启动? 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() 函数中做错了什么?
turtles
是 turtle
的数组。您需要迭代数组并调用每个 clear()
。
def restart():
global turtles
while race():
for turtle in turtles:
turtle.clear()
您可以将海龟初始化代码放入一个函数中,然后在您想要重置游戏时调用它:
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
。