我有下面的代码,当实例化两个类(Player,Game)时,都会在Player.gameBoard数组中插入特定数量的玩家。我试图仅在数组元素为0的情况下将Player类添加到数组中。因此,如果将Player对象插入gameboard [0] [0]位置,则其他任何玩家都无法覆盖他。当前,如果选择大量玩家(例如20名),则其中的一些玩家将被覆盖,并且不会全部出现。所以我想while循环有问题。



var question = prompt('how many players');
var numOfPlayers = parseInt(question);

class Game {
  constructor(){
    this.health = 100;
    this.hammer = false
    this.knife = false;
    this.sword = false;
    this.baseballbat = false;
    this.damage = 0;
    this.gameBoard = [
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
    ];
    }
  }

class Player {
  constructor(id){
    this.id=id;
    this.location = {
      x:Math.floor(Math.random()*8),
      y:Math.floor(Math.random()*8)
    };
  }
}

var play = new Game();
let player =[];
for (i=0; i <numOfPlayers; i++ ){
    player.push(new Player(i));
    while (play.gameBoard[player[i].location.y][player[i].location.x]===0){
    play.gameBoard[player[i].location.y][player[i].location.x] = player[i];
    }
}

console.log(play);

最佳答案

您应该创建所有可能位置的列表,并为每个新玩家实例随机选择一个,而不是在创建时为每个玩家分配随机的x / y。您有一个8x8的网格。所以有64个可能的位置

如果您是每个玩家:


选择一个随机的位置
删除该职位


您将永远不会重叠。



var positions = [];
for(var x=0;x<8;x++){
   for(var y=0;y<8;y++){
      positions.push({x,y});
   }
}

// pick 5 random positions for demo

for(var i=0;i<5;i++){
   var rnd = Math.floor(Math.random()*positions.length);
   console.log("random position chosen:", positions[rnd]);
   //remove this so its not picked again
   positions.splice(rnd,1);
}





应用于您的代码如下所示:



var question = prompt('how many players');
var numOfPlayers = parseInt(question);

class Game {
  constructor(){
    this.health = 100;
    this.hammer = false
    this.knife = false;
    this.sword = false;
    this.baseballbat = false;
    this.damage = 0;
    this.gameBoard = [
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0],
    ];
    }
  }

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

var positions = [];
for(var x=0;x<8;x++){
   for(var y=0;y<8;y++){
      positions.push({x,y});
   }
}

var play = new Game();
let player =[];
for (i=0; i <numOfPlayers; i++ ){
    var rndPos = Math.floor(Math.random()*positions.length);
    player.push(new Player(i, positions[rndPos]));
    positions.splice(rndPos,1);
    play.gameBoard[player[i].location.y][player[i].location.x] = player[i];
}

console.log(play);





如果可行,您甚至可以考虑将availablePositions数组设置为Game的属性。

10-07 18:56
查看更多