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

Tkinter点击器游戏升级问题:倍数判定函数需仅执行一次

解决点击器游戏升级收益重复触发的问题

问题场景

开发点击器游戏时设置了如下升级规则:当generator 1数量为5的倍数时,每秒自动收益增加对应倍数的0.5——比如5个加0.5、10个加1.0、15个加1.5。但当前代码存在bug:只要generator 1数量停留在5的倍数(比如5),upgrade_2_adder会被每1毫秒重复调用,导致收益异常增长。

问题根源

  1. upgrade_2_checker使用while循环,只要满足倍数条件就持续调用upgrade_2_adder,再加上updater2每1毫秒触发一次检查,形成无限重复触发。
  2. upgrade_2_adder的累加逻辑没有记录已处理过的倍数等级,即使数量从5涨到10,也会重复计算之前的倍数收益,导致总收益错误。

解决方案

核心思路是记录已处理的最高5倍数等级,仅当generator 1数量跨越新的5倍数门槛时才更新收益。同时优化检查频率(每秒一次即可,无需1毫秒),减少性能消耗。

方案1:增量更新(跟踪已处理等级)

新增全局变量记录已处理的倍数等级,仅在等级提升时执行增量收益更新:

# 全局变量初始化(需在函数外定义)
generator_1_amount = 0
total_auto = 0
last_processed_multi = 0  # 记录已处理的最高5倍数等级(5个对应1,10个对应2)

def updater2():
    upgrade_2_checker()
    root.after(1000, updater2)  # 每秒检查一次,符合收益计算频率

def upgrade_2_checker():
    global generator_1_amount, last_processed_multi
    current_multi = generator_1_amount // 5
    # 仅当当前等级高于已处理等级时,执行更新
    if current_multi > last_processed_multi:
        # 计算新增的等级数,更新收益
        upgrade_2_adder(current_multi - last_processed_multi)
        last_processed_multi = current_multi

def upgrade_2_adder(add_multi):
    global total_auto
    total_auto += add_multi * 0.5

方案2:直接重算总收益(更简单不易出错)

放弃增量累加,每次检查时直接重新计算正确的总自动收益(基础收益+额外收益),彻底避免重复触发问题:

# 全局变量初始化
generator_1_amount = 0
total_auto = 0

def updater2():
    calculate_total_auto()
    root.after(1000, updater2)

def calculate_total_auto():
    global generator_1_amount, total_auto
    # 基础收益:根据实际每个generator1的收益调整
    base_income = generator_1_amount * 0.1
    # 额外收益:每5个加0.5/秒
    extra_income = (generator_1_amount // 5) * 0.5
    # 重新计算总自动收益
    total_auto = base_income + extra_income

验证效果

  • 当generator1数量达到5时,方案1会触发一次更新,额外加0.5;方案2直接算出总收益=5*0.1+0.5=1.0(若你的基础收益是1.5,只需调整base_income的计算逻辑)。
  • 数量涨到10时,方案1会新增1个等级,加0.5(总额外收益1.0);方案2直接算出总收益=10*0.1+1.0=2.0,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:27:41