如何在 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!!!',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.