在Scratch中实现Cookie Clicker批量购买(Buy 100)功能的累加计算方案咨询
嘿,我太懂你现在的烦躁了——复制粘贴几十上百行重复的代码不仅麻烦到爆炸,还特别容易出错,而且Scratch自带的功能确实有不少让人头疼的限制。先帮你理清楚当前的困境,再给你一套能落地的解决思路:
你的核心痛点
- Scratch没有直接的大于等于/小于等于判断块
- 没有内置的**求和(Σ)**功能,手动写累加太崩溃
- 希望用自定义块简化重复代码,彻底告别复制粘贴
- Scratch不支持普通的
x^y幂运算,只有10的指数表示,没法直接算1.15的n次方
针对这些问题的具体解决方案
1. 替代“大于等于/小于等于”判断
Scratch虽然没直接给>=或<=块,但咱们可以用逻辑组合凑出来:
- 要判断
z >= 总价,直接用[z > 总价] 或 [z = 总价](就是你现在手动写的逻辑,但后面会用变量把总价简化成一个值,不用写一长串) - 同理,
z <= 总价可以用[z < 总价] 或 [z = 总价]
2. 用循环模拟普通幂运算(搞定1.15^n)
既然Scratch不支持直接算任意数的幂,咱们就自己做个自定义块来实现!比如做一个叫计算1.15的k次方的自定义块,参数设为k:
定义 计算1.15的k次方(次数) 设置 结果 为 1 重复执行 次数 次 设置 结果 为 结果 * 1.15 返回 结果
以后不管是算1.15的99次方还是其他次数,直接调用这个块就行,再也不用手动叠乘十几次甚至上百次了。
3. 用循环实现累加求和(计算批量购买的总价)
这是解决你问题的核心——不用手动写x + x*1.15 + x*1.15² + ...,咱们用循环自动算总价。做一个叫计算批量购买总价的自定义块,参数设为当前建筑数量、购买数量、基础价格(这里的基础价格是该建筑的初始价格c):
定义 计算批量购买总价(当前数量, 购买个数, 基础价) 设置 总价 为 0 设置 当前次数 为 0 重复执行 购买个数 次 // 计算第n个要购买的建筑价格:基础价 * 1.15^(当前数量 + 当前次数) 设置 单份价格 为 基础价 * 计算1.15的k次方(当前数量 + 当前次数) 设置 总价 为 总价 + 单份价格 将 当前次数 增加 1 返回 总价
另外给你个小捷径:其实这个累加是等比数列求和,能用数学公式直接算,不用循环,速度更快,尤其是买100个的时候。公式是:总价 = 基础价 * (1.15^当前数量 * (1.15^购买个数 - 1)) / 0.15
如果想用公式的话,把上面循环的部分换成这个公式计算就行,结果是一样的。
4. 封装批量购买的自定义块(彻底告别重复代码)
最后把整个购买逻辑打包成一个自定义块,比如批量购买建筑,参数设为建筑类型、购买数量:
定义 批量购买建筑(建筑, 买多少个) // 先获取该建筑的当前数据 设置 当前建筑数 为 建筑[数量] 设置 基础价格 为 建筑[基础价] 设置 单建筑cps 为 建筑[每秒产cookie] // 计算需要的总cookie数 设置 需要的cookie 为 计算批量购买总价(当前建筑数, 买多少个, 基础价格) // 判断是否能买 如果 [玩家cookie数 > 需要的cookie] 或 [玩家cookie数 = 需要的cookie] 那么 // 扣除cookie 将 玩家cookie数 设为 玩家cookie数 - 需要的cookie // 增加每秒产cookie数 将 总cps 增加 买多少个 * 单建筑cps // 更新当前建筑数量 将 建筑[数量] 增加 买多少个 // 更新下一次购买的单个价格 设置 建筑[下次单价] 为 基础价格 * 计算1.15的k次方(建筑[数量]) 否则 广播 [买不起!]
这样以后不管是做Buy10还是Buy100,只要调用这个自定义块,传入对应的购买数量就行,再也不用复制粘贴几百行重复代码了!
额外小提醒
- 自定义块里可以勾选“运行时不刷新屏幕”,这样循环计算的时候不会出现卡顿
- 如果用数学公式计算总价,记得提前测试一下数值是否正确,避免因为浮点精度问题出现误差
备注:内容来源于stack exchange,提问作者CrSb0001
相关产品推荐
相关产品推荐

