JavaScript如何存储最近3个随机数,实现飞行棋连续三次掷6判定逻辑
Ludo飞行棋连续掷骰逻辑实现方案
核心思路
用长度限制为3的数组存储最近三次的掷骰结果,相比单个变量能更灵活地做多维度判断,同时修正原有代码中变量声明、变量引用的错误即可。
具体实现步骤
1. 调整变量声明
- 原有
playing用const声明无法修改状态,改为let - 新增
recentDiceRolls数组存储最近三次全局掷骰结果 - 新增
currentPlayerContinuousSix变量记录当前玩家连续掷出6的次数,用于判断单个玩家的连续三次6条件
// 游戏运行状态 let playing = true; // 存储最近三次全局掷骰结果 const recentDiceRolls = []; // 当前玩家连续掷出6的次数 let currentPlayerContinuousSix = 0;
2. 每次掷骰后更新存储数据
// 生成1-6随机数逻辑不变 const random = Math.floor(Math.random() * 6 + 1); // 更新全局最近三次掷骰记录 recentDiceRolls.push(random); if (recentDiceRolls.length > 3) { recentDiceRolls.shift(); } // 更新当前玩家连续6的计数 if (random === 6) { currentPlayerContinuousSix += 1; } else { currentPlayerContinuousSix = 0; }
3. 按需求实现判断逻辑
if (playing) { // 优先判断游戏终止条件:最近三次全局随机数都是6 if (recentDiceRolls.length === 3 && recentDiceRolls.every(roll => roll === 6)) { playing = false; // 此处可补充游戏终止的UI更新逻辑 document.getElementById('game-tip').textContent = '连续三次掷出6,游戏终止'; return; } // 判断当前玩家是否连续三次掷出6,满足则切换玩家 if (currentPlayerContinuousSix === 3) { nextPlayer(); // 切换玩家后重置当前玩家连续6计数 currentPlayerContinuousSix = 0; // 此处可补充切换玩家的UI更新逻辑 } else if (random === 6 && recentDiceRolls.at(-2) === 6) { // 原有连续两次6的逻辑保留 document.getElementById('score--1').textContent = 0; } else { // 非6的情况正常切换玩家 nextPlayer(); currentPlayerContinuousSix = 0; } }
逻辑说明
Array.every方法用来判断数组内所有元素是否都满足等于6的条件,完美匹配三次全为6的判断需求- 如果你的需求中「最近三次生成的随机数」就是指当前玩家的连续三次掷骰结果,不需要区分全局和玩家维度,可删除
currentPlayerContinuousSix变量,直接复用recentDiceRolls的判断结果即可 - 原有代码中
lastDice = dice的dice变量未定义,已统一替换为生成的随机数变量random
内容的提问来源于stack exchange,提问作者jhr
相关产品推荐
相关产品推荐

