问题描述
我如何让整个程序在 5 次尝试后完全停止(点击)并不重要,它们是否在龟上,但是写完之后的程序应该会中断,按下时不要放黑色或红色点什么都不做。代码如下:
from turtle import *
from random import *
import time
reset()
penup()
hideturtle()
speed(0)
bandymai = 0 #tries
taskai = 0 #points
info = Turtle()
info.penup()
info.goto(-180,160)
info.color("Blue")
def gaudom(x,y):
goto(x,y)
if distance(beglys.pos()) < 10:
color('red') #hit color
global taskai
global bandymai
taskai = taskai + 1
info.clear()
info.write(taskai,font = ("Arial",20,"bold"))
bandymai = bandymai + 1
else:
color('black') #miss color
dot(20)
bandymai = bandymai + 1
screen = getscreen()
screen.onclick( gaudom )
beglys = Turtle()
beglys.color('green')
beglys.shape('square')
for n in range(100):
x = randint(-200,200)
y = randint(-200,200)
beglys.penup()
beglys.clear()
beglys.goto(x,y)
time.sleep(1)
if taskai == 3:
info.write('you win!!!',80,"bold"))
break
elif bandymai == 5:
info.write('you are out of trys',50,"bold"))
break
解决方法
在代码末尾添加 2 行。
screen.onclick(None) #Do nothing when clicking the screen.
screen.mainloop() #Must be last statement in a turtle graphics program.
,
与其在代码上贴上创可贴,让我们将其拆开并以事件兼容的方式重建它(即海龟计时器事件而不是 time.sleep()
)。我们还将使 implicit 默认海龟 explicit,删除几个无操作,并大致调整样式:
from turtle import Screen,Turtle
from random import randint
bandymai = 0 # tries
taskai = 0 # points
def gaudom(x,y):
global taskai,bandymai
screen.onclick(None) # disable handler inside handler
turtle.goto(x,y)
if turtle.distance(beglys.pos()) < 10:
taskai += 1
info.clear()
info.write(taskai,font=('Arial',20,'bold'))
else:
turtle.color('black') # miss color
turtle.dot(20)
bandymai += 1
screen.onclick(gaudom) # reenable handler
ticks = 100
def play():
global ticks
x = randint(-200,200)
y = randint(-200,200)
beglys.goto(x,y)
if taskai == 3:
screen.onclick(None) # Do nothing when clicking the screen.
info.write("You win!",80,'bold'))
return
if bandymai == 5:
screen.onclick(None) # Do nothing when clicking the screen.
info.write("You are out of trys.",50,'bold'))
return
ticks -= 1
if ticks:
screen.ontimer(play,1000) # 1 second (1000 milliseconds)
screen = Screen()
turtle = Turtle()
turtle.hideturtle()
turtle.speed('fastest')
turtle.penup()
info = Turtle()
info.color('blue')
info.penup()
info.goto(-180,160)
beglys = Turtle()
beglys.color('green')
beglys.shape('square')
beglys.penup()
screen.onclick(gaudom)
play()
screen.mainloop() # Must be last statement in a turtle graphics program.