如何让Google Sheets记住数值?蛇梯棋游戏逻辑实现求助
解决Google Sheets蛇梯棋位置记忆问题
核心问题是你当前的计算逻辑基于所有掷骰数的总和,而非经过蛇梯修正后的「最终位置」。要解决这个问题,需要专门追踪每一步的实际位置,让后续掷骰基于上一次的最终位置计算。
以下是具体实现步骤:
1. 规划单元格布局
- A列:存放每次掷出的骰子点数(从A2开始,A2对应第一次掷骰,A3对应第二次,以此类推)
- B列:存放每次掷骰后经过蛇梯修正的最终位置(B2对应第一次位置,B3对应第二次位置,以此类推)
2. 第一次掷骰的位置计算
在B2中输入公式,先计算初始掷骰位置,再处理蛇梯:
=LET( initial_pos, A2, final_pos, SWITCH( initial_pos, 2, 21, // 梯子:2→21 8, 30, // 可继续添加所有梯子/蛇的对应关系 10, 4, // 蛇:10→4 19, 8, // 可继续添加所有蛇的对应关系 initial_pos // 默认:无蛇梯时的位置 ), final_pos )
注:把你游戏里所有蛇梯的位置对都补充到SWITCH函数中,格式为触发位置, 目标位置,最后一个initial_pos是默认值。
3. 后续掷骰的位置计算
从B3开始,每一行都基于上一次的最终位置(B列上一行)加上当前掷骰数,再处理蛇梯,同时判断是否超过100(蛇梯棋规则:超过终点不移动):
=LET( new_initial, B2+A3, final_pos, SWITCH( new_initial, 2, 21, 8, 30, 10, 4, 19, 8, new_initial ), IF(final_pos>100, B2, final_pos) // 超过100则停留在原位置 )
把B3的公式向下拖动,后续行自动套用逻辑。
4. 固定掷骰结果(可选)
如果用=RANDBETWEEN(1,6)生成骰子数,每次刷新表格都会重新随机,导致位置混乱。可以用Google Apps Script实现点击按钮生成固定掷骰数:
- 打开「扩展程序」→「Apps脚本」
- 粘贴以下代码:
function rollDice() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const lastRow = sheet.getLastRow(); // 找到A列最后一个非空行的下一行,写入1-6的随机数 sheet.getRange(lastRow + 1, 1).setValue(Math.floor(Math.random() * 6) + 1); }
- 保存脚本,回到表格,添加一个按钮(插入→绘图),绑定
rollDice函数,点击按钮即可在A列新增一次掷骰结果。
5. 规则补充
- 如果玩家刚好到达100,游戏结束,后续掷骰不再移动位置,可以在公式中添加判断:
IF(final_pos=100, 100, IF(final_pos>100, B2, final_pos)) - 蛇梯的触发逻辑是:只要落在触发位置(不管是掷骰直接到还是移动到),就立刻跳到目标位置,公式中已经覆盖了这个逻辑。
内容的提问来源于stack exchange,提问作者ArnieC
相关产品推荐
相关产品推荐

