首页 > 解决方案 > 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

标签: pythononclickpython-turtle

解决方案


与其在代码上贴创可贴,不如将它拆开并以事件兼容的方式重构它(即海龟计时器事件而不是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.

推荐阅读