【问题标题】:How do I make the whole program stop completely after 5 tries (clicks)5次尝试后如何使整个程序完全停止(点击)
【发布时间】:2020-12-22 08:47:03
【问题描述】:

如何让整个程序在 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

【问题讨论】:

    标签: python onclick python-turtle


    【解决方案1】:

    在代码末尾添加 2 行。

    screen.onclick(None) #Do nothing when clicking the screen.
    
    screen.mainloop()    #Must be last statement in a turtle graphics program.
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        相关资源
        最近更新 更多