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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:39:00