如何在棋盘游戏中使用对象更新多维数组

时间:2019-05-21 17:24:47

标签: javascript oop multidimensional-array

我正在尝试使用javascript中的oop制作桌游。 (非常糟糕)。 想法是要有一个多维数组,其中的对象由值或id表示。 我已经制作了一个多维数组作为董事会。 我已经为玩家创建了一个对象作为示例。 我似乎找不到办法:

  1. 将播放器(和其他对象)添加到板子本身
  2. 在棋盘上的随机位置添加玩家(和其他物体)
createPlayers() {
  for (let i = 0; i < players; i++) {
    let players = [new Player("Player 1", 1),
      new Player("Player 2", 2)
    ];
    players.push(m);
  }
}

我已经尝试过在for循环中使用push(),但是我不确定这是正确的还是接近的地方。

这就是我的作品:

class Board {
  constructor(rows, cols) {
    let Board = [];

    for (let i = 0; i < rows; i++) {
      Board[i] = [];
      for (let j = 0; j < cols; j++) {
        Board[i][j] = 0;
      }
    }
    return Board
  }
}

let m = new Board(10, 10);

class Player {
  constructor(name, id) {
    this.name = name;
    this.id = id;
  }
}

let players = [new Player("Player 1", 1),
  new Player("Player 2", 2)
];

我已经了解了-没问题,当我console.table(m)时,数组显示为默认值0

目标是使对象(玩家)在数组中表示为数字1和2,并位于随机位置。

我可以使用

得到一个随机的1。
board[i][j] = (Math.random() * 2 | 0) + 0; 
在板的for循环中

。但这在目前阶段是毫无用处的,因为我似乎无法弄清楚如何更新数组。 任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

class Board {
  constructor(rows, cols) {
    let Board = [];

    for (let i = 0; i < rows; i++) {
      Board[i] = [];
      for (let j = 0; j < cols; j++) {
        Board[i][j] = 0;
      }
    }
    return Board
  }
}

let totalRows = 10;
let totalCols = 10;
let m = new Board(totalRows, totalCols);

class Player {
  constructor(name, id) {
    this.name = name;
    this.id = id;
  }
}

let players = [
  new Player("Player 1", 1),
  new Player("Player 2", 2)
];

players.forEach(function(player){
  let row, col, notInserted = true;
  
  while (notInserted) {
    row = Math.floor(Math.random() * 100) % totalRows;
    col = Math.floor(Math.random() * 100) % totalCols;
    
    if (m[row][col] === 0) {
      m[row][col] = player.id;
      notInserted = false;
    }
  }
});

console.log(m);

创建了棋盘和玩家之后,循环遍历每个玩家。对于每个玩家,在棋盘边界内获取一个随机的行和列号。如果板上的位置是0,请在此处放置玩家。如果不是0,请重复随机数逻辑以获取另一位置,并继续直到找到0