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

战舰游戏开发:如何生成符合舰船规格的随机战场数组

战舰游戏随机战场生成方案

要实现按指定尺寸(4、3、2、1格连续)随机生成战舰战场,核心思路是先初始化空战场,再逐个随机放置不同长度的战舰,确保战舰不重叠、不越界。以下是可直接复用的JavaScript实现代码:

实现步骤与代码

// 初始化10x10的空战场
function createEmptyBattlefield() {
  return Array.from({ length: 10 }, () => Array(10).fill(0));
}

// 尝试在战场放置指定长度的战舰
function placeShip(battlefield, shipLength) {
  const isHorizontal = Math.random() > 0.5; // 随机选择方向:横/竖
  let startRow, startCol;

  // 根据方向计算合法的起始位置范围
  if (isHorizontal) {
    startRow = Math.floor(Math.random() * 10);
    startCol = Math.floor(Math.random() * (10 - shipLength + 1));
  } else {
    startRow = Math.floor(Math.random() * (10 - shipLength + 1));
    startCol = Math.floor(Math.random() * 10);
  }

  // 检查该位置是否能放置战舰(所有目标格子都是0)
  let canPlace = true;
  for (let i = 0; i < shipLength; i++) {
    const row = isHorizontal ? startRow : startRow + i;
    const col = isHorizontal ? startCol + i : startCol;
    if (battlefield[row][col] !== 0) {
      canPlace = false;
      break;
    }
  }

  // 能放置就填充1,否则递归重试
  if (canPlace) {
    for (let i = 0; i < shipLength; i++) {
      const row = isHorizontal ? startRow : startRow + i;
      const col = isHorizontal ? startCol + i : startCol;
      battlefield[row][col] = 1;
    }
  } else {
    placeShip(battlefield, shipLength);
  }
}

// 生成带战舰的随机战场
function generateRandomBattlefield() {
  const battlefield = createEmptyBattlefield();
  // 按尺寸依次放置战舰:4格、3格、2格、1格
  [4, 3, 2, 1].forEach(length => placeShip(battlefield, length));
  return battlefield;
}

// 调用示例
const myBattlefield = generateRandomBattlefield();
console.log(myBattlefield);

代码说明

  • 初始化战场:createEmptyBattlefield 生成10行10列的全0数组,作为空白战场。
  • 随机放置逻辑:placeShip 函数先随机选择战舰方向(横向/纵向),再计算合法的起始坐标范围(避免战舰超出战场边界);接着检查目标位置是否未被占用(全为0),如果合法就填充1,否则递归重试直到找到合适位置。
  • 批量放置:generateRandomBattlefield 按指定尺寸依次调用放置函数,确保所有战舰都被正确放置。

如果需要调整战舰数量(比如常见的1艘4格、2艘3格等),只需修改[4,3,2,1]这个数组,比如改成[4,3,3,2,2,2,1,1,1,1]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:15:14