You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Turtle开发Cookie Clicker游戏:双屏幕点击仅一个生效

问题解决:Turtle库Cookie Clicker游戏第二个升级按钮无响应

问题现象

使用Python Turtle库开发的Cookie Clicker游戏中,仅“+1 Cookie/Click”升级按钮点击有效,“x2 Cookie/Click”按钮点击无响应。预期点击第二个按钮时,会扣除100个Cookie,并将每次点击获得的Cookie数翻倍。

问题根源

代码中连续调用turtle.onscreenclick()绑定左键点击事件,后一次调用会直接覆盖前一次的绑定:

turtle.onscreenclick(up2click, 1)
turtle.onscreenclick(upgradeclick, 1)

这导致只有upgradeclick函数生效,up2click完全没有被绑定到左键点击事件上,自然无法触发第二个按钮的逻辑。

修复方案

两个升级按钮都是用独立的Turtle对象(upgrade和upgrade2)绘制的,直接给这两个对象绑定各自的点击函数即可,无需使用全局的屏幕点击绑定:

关键修改步骤

  1. 替换main函数中的全局点击绑定代码:
    原代码:

    turtle.onscreenclick(up2click, 1)
    turtle.onscreenclick(upgradeclick, 1)
    

    修改为:

    # 给两个升级按钮的Turtle对象绑定各自的点击函数
    upgrade.onclick(upgradeclick)
    upgrade2.onclick(up2click)
    
  2. (可选优化)由于点击现在只会触发对应按钮的函数,坐标判断逻辑可以简化(保留原判断也不影响):
    upgradeclick函数简化后:

    def upgradeclick(x, y):
        global clicks
        global num
        if clicks >= 15:
            clicks -= 15
            num += 1
            counter.clear()
            write_text(0, 200, f"Cookies: {clicks}")
    

    up2click函数简化后:

    def up2click(x, y):
        global clicks
        global num
        if clicks >= 100:
            clicks -= 100
            num *= 2
            counter.clear()
            write_text(0, 200, f"Cookies: {clicks}")
    

修复后完整代码

import turtle

clicks = 0
num = 1


def main():
    screen = turtle.Screen()
    screen.title("Cookie Clicker by Homare and Jonathan")
    screen.bgcolor("#189df5")

    # Cookie
    cookie = turtle.Turtle()
    screen.addshape("cookie.gif")
    cookie.shape("cookie.gif")
    cookie.penup()
    cookie.backward(200)
    cookie.speed(0)

    # Upgrade 1 Button + draw
    upgrade = turtle.Turtle()
    upgrade.hideturtle()
    upgrade.speed(0)
    upgrade.penup()
    upgrade.goto(7, 94)
    upgrade.pendown()
    upgrade.fillcolor('white')
    upgrade.begin_fill()

    for i in range(2):
        upgrade.forward(340)
        upgrade.left(90)
        upgrade.forward(30)
        upgrade.left(90)

    upgrade.end_fill()

    upgrade.penup()
    upgrade.goto(7, 94)
    upgrade.write("+1 Cookie/Click: 15 Cookies", font=("Courier", 20, "normal"))

    # Upgrade 2 Button + draw
    upgrade2 = turtle.Turtle()
    upgrade2.hideturtle()
    upgrade2.speed(0)
    upgrade2.penup()
    upgrade2.goto(7, 54)
    upgrade2.pendown()
    upgrade2.fillcolor('white')
    upgrade2.begin_fill()

    for i in range(2):
        upgrade2.forward(340)
        upgrade2.left(90)
        upgrade2.forward(30)
        upgrade2.left(90)

    upgrade2.end_fill()

    upgrade2.penup()
    upgrade2.goto(7, 54)
    upgrade2.write("x2 Cookie/Click: 100 Cookies", font=("Courier", 20, "normal"))

    # Written Click Text
    write_text(0, 200, f"Cookies: {clicks}")

    cookie.onclick(clicked)
    # 绑定按钮点击事件到对应的Turtle对象
    upgrade.onclick(upgradeclick)
    upgrade2.onclick(up2click)

    screen.mainloop()


def upgradeclick(x, y):
    global clicks
    global num
    if clicks >= 15:
        clicks -= 15
        num += 1
        counter.clear()
        write_text(0, 200, f"Cookies: {clicks}")


def up2click(x, y):
    global clicks
    global num
    if clicks >= 100:
        clicks -= 100
        num *= 2
        counter.clear()
        write_text(0, 200, f"Cookies: {clicks}")


def clicked(x, y):
    global clicks
    global num
    clicks += num
    counter.clear()
    write_text(0, 200, f"Cookies: {clicks}")
    print(clicks)


def write_text(center_x, center_y, text):
    ''' Write text on the Screen '''
    counter.speed(0)
    counter.penup()
    counter.hideturtle()
    counter.goto(center_x, center_y)
    counter.write(text, align="center", font=("Courier New", 32, "normal"))


counter = turtle.Turtle()

main()

内容的提问来源于stack exchange,提问作者John_x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:01:02