所以我正在用 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。
那么我怎样才能确保我的棋盘是用适当数量的地雷创建的,同时仍然是真正随机的?
创建董事会所有领域的列表
[[0, 0], [0, 1], ..., [k, l], ...]
.
Select
mines
random elements from this list (How to get number of random elements from an array?)
在这些领域放置地雷。