海龟文本看似随机增加,我该如何解决?

Turtle text increases by a seemingly random amount, how do I fix this?

我对使用 python 编码还很陌生,所以我很困惑。我目前正在开发一款饼干唱首歌类游戏。这是到目前为止的代码。

import turtle as t

#screen
wn = t.Screen()
wn.bgcolor("DarkSlateGray")
wn.setup(width=1366, height=768)

#clicks
clicks = 0

#square
sq = t.Turtle()
sq.speed(0)
sq.shape("square")
sq.color("coral2")
sq.shapesize(stretch_wid=5, stretch_len=5)
sq.penup()
sq.goto(0,0)

#pen
pen = t.Turtle()
pen.speed(0)
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 270)
pen.write("Times clicked: 0", align="center", font=("Comic Sans MS", 24, "normal"))

#click function
def getclick(sq, clicks):
    clicks += 1
    pen.clear()
    pen.write("Times clicked: {}".format(clicks), align="center", font=('Comic Sans MS', 24, 'normal'))

#click detection
wn.listen()
sq.onclick(getclick)

函数“getclick”应该使“点击次数”增加 1,然后函数的其余部分写入新的点击次数。但是,当我测试这段代码时,数字并没有增加 1,而是增加了一个介于 -49.0 和 49.0 之间的随机数。例如,我将 运行 程序,然后单击海龟,数字变为 -29.0,然后再次变为 34.0,但是如果我再次单击它,它不会执行任何操作。

sq.onclick(getclick)的使用存在一些问题。来自turtle documentationturtle.onclick的签名是

turtle.onclick(fun, btn=1, add=None)
Parameters
fun – a function with two arguments which will be called with the
coordinates of the clicked point on the canvas

因此,您点击的 x、y 坐标将传递给您的 getclick 函数,并且您一直在打印您的点击的 y 坐标(大约在“-49.0 和 49.0”之间)。函数参数 clicks 也没有按照您的预期进行:它只是隐藏了全局 clicks,并没有修改它。 更正确的版本是:

def getclick(x, y):
    global clicks
    clicks += 1
    pen.clear()
    pen.write("Times clicked: {}".format(clicks), align="center", font=('Comic Sans MS', 24, 'normal'))