如果地雷是随机生成的,我如何确保在扫雷板上放置 x 个地雷? [重复]

问题描述 投票:0回答:1

所以我正在用 html/css/javascript 制作扫雷器。我有 3 种不同的难度状态供玩家选择,这些状态决定了棋盘的大小以及它将拥有多少地雷。 出于这个问题的目的,我将使用中间设置,16x16 板上有 40 个地雷。

board 发起 board = []; 填充它我使用

function createBoard(row,col,mines){
    let count=0;
    for(let r=0;r<row;r++){
        board[r]=[];
        for(let c=0;c<col;c++){
            if(count <= mines){
                board[r][c]=new CELL(row,col,false);
            }
            else{
                let mine = Math.round(Math.random());
                board[r][c]=new CELL(row,col,Boolean(mine)); //0 is no mine, 1 means mine
                if(mine){
                    count++;
                }
            }
        }
    }
}

这样应该创建大小合适的板,并用 CELL 对象填充它,其中一些是我的。问题是我的计数变量只能确保我的随机发生器不会产生超过 40 个地雷。随机化器可以(理论上)为每个对象选择 0。

那么我怎样才能确保我的棋盘是用适当数量的地雷创建的,同时仍然是真正随机的?

javascript multidimensional-array random minesweeper
1个回答
1
投票
  1. 创建董事会所有领域的列表

    [[0, 0], [0, 1], ..., [k, l], ...]
    .

  2. Select

    mines
    random elements from this list (How to get number of random elements from an array?)

  3. 在这些领域放置地雷。

© www.soinside.com 2019 - 2024. All rights reserved.