python - 5次尝试后如何使整个程序完全停止(点击)
问题描述
如何在 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!!!', font = ("Arial", 80, "bold"))
break
elif bandymai == 5:
info.write('you are out of trys', font = ("Arial", 50, "bold"))
break
解决方案
与其在代码上贴创可贴,不如将它拆开并以事件兼容的方式重构它(即海龟计时器事件而不是time.sleep()
)。我们还将使隐式默认海龟显式,删除几个无操作,并通常调整样式:
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!", font=('Arial', 80, 'bold'))
return
if bandymai == 5:
screen.onclick(None) # Do nothing when clicking the screen.
info.write("You are out of trys.", font=('Arial', 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.
推荐阅读
- java - OpenCV - Java:VideoCapture 读取帧与 USB 摄像头挂起
- kotlin - 如何使用泛型反序列化 Jackson 容器
- android - 从获取意图中添加项目以再次发布在购物车购物 Android 等不同活动上
- angular - 剑道角度用户界面:剑道网格单元选择/突出显示
- python - Python3防止嵌套列表并显示列表中值的位置/索引
- javascript - 计时器事件完成触发后,Div\label\Span 消失
- vba - 将数据移动到下一张不带标题的工作表
- php - 如何在 Laravel 5.6 中保存图像元数据
- testing - 在codeception中的每个cest文件之前制作
- crystal-reports - 水晶报表中的子报表重复且数据行中的填充过多