Python 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)绘制的,直接给这两个对象绑定各自的点击函数即可,无需使用全局的屏幕点击绑定:
关键修改步骤
替换main函数中的全局点击绑定代码:
原代码:turtle.onscreenclick(up2click, 1) turtle.onscreenclick(upgradeclick, 1)修改为:
# 给两个升级按钮的Turtle对象绑定各自的点击函数 upgrade.onclick(upgradeclick) upgrade2.onclick(up2click)(可选优化)由于点击现在只会触发对应按钮的函数,坐标判断逻辑可以简化(保留原判断也不影响):
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
相关产品推荐
相关产品推荐

