在数组中选择对象时出错

Error with selecting objects within an array

本文关键字:出错 对象 选择 数组      更新时间:2023-09-26

我正在为一个棋盘游戏应用程序编写代码。我写了一段简单的代码,用mathrandom来确定玩家的位置。mathrrandom的结果告诉一个数组从4个对象(玩家)中选择1个,并将结果添加到他们的位置。我还在函数的开头添加了一段代码,以便在数组中向上移动并选择下一个玩家,这样每次你点击"掷骰子"按钮时,另一个玩家的位置就会更有价值。

问题是,在我遍历了整个数组并回到[0]位置后,它会运行两次代码,所以第一个玩家得到两次函数,而所有其他玩家只得到一次。

这是我的代码:

var players = [
{name: "Player 1", positie: 0},
{name: "Player 2", positie: 0},
{name: "Player 3", positie: 0},
{name: "Player 4", positie: 0}
];
var position = 0;
var currentPlayer = players[position];
function rolClick(){
currentPlayer = players[position++];
if (position > players.length){
    position = 0;
    currentPlayer = players[position];
}
var rollen = Math.floor(Math.random() * 6) + 1;
if (rollen === 1){
    currentPlayer.positie += 1;
    console.log("het is 1")
}else if(rollen === 2){
    currentPlayer.positie += 2;
    console.log("het is 2")
}else if(rollen === 3){
    currentPlayer.positie += 3;
    console.log("het is 3")
}else if(rollen === 4){
    currentPlayer.positie += 4;
    console.log("het is 4")
}else if(rollen === 5){
    currentPlayer.positie += 5;
    console.log("het is 5")
}else if(rollen === 6){
    currentPlayer.positie += 6;
    console.log("het is 6")
}else {
    console.log("Oops, er is iets fout gegaan.")
};
console.log(currentPlayer);
};

HTML

<button>
  Rol de dobbelsteen
</button>
<span></span>

Javascript

var players = [
{name: "Player 1", positie: 0},
{name: "Player 2", positie: 0},
{name: "Player 3", positie: 0},
{name: "Player 4", positie: 0}
];
var position = 0;
var currentPlayer = null;
function rolClick(){
  if (position >= players.length){
      position = 0;
  }
  console.log("Position", position);
  currentPlayer = players[position++];
   var rollen = Math.floor(Math.random() * 6) + 1;
   currentPlayer.positie += rollen;
   $("span").html("Je hebt " + rollen + " gerold voor " + currentPlayer.name);
};
$("button").click(function() {
    rolClick();
});

var players = [{
  name: "Player 1",
  positie: 0
}, {
  name: "Player 2",
  positie: 0
}, {
  name: "Player 3",
  positie: 0
}, {
  name: "Player 4",
  positie: 0
}];
var position = 0;
var currentPlayer = null;
function rolClick() {
  if (position >= players.length) {
    position = 0;
  }
  console.log("Position", position);
  currentPlayer = players[position++];
  var rollen = Math.floor(Math.random() * 6) + 1;
  currentPlayer.positie += rollen;
  $("span").html("Je hebt " + rollen + " gerold voor " + currentPlayer.name);
};
$("button").click(function() {
  rolClick();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>
  Rol de dobbelsteen
</button>
<span></span>

我认为您的问题是,首先在调用rolClick()函数之前设置currentPlayer,然后在掷骰子之前重置/更新currentPlayer。请参阅下面的评论部分。。。

var players = [
    {
        name: 'Player 1',
        positie: 0
    },
    {
        name: 'Player 2',
        positie: 0
    },
    {
        name: 'Player 3',
        positie: 0
    },
    {
        name: 'Player 4',
        positie: 0
    }
];
var position = 0;
// currentPlayer is set to player 1
var currentPlayer = players[position];
function rolClick() {
    // currentPlayer is now set to player 2
    currentPlayer = players[position++];
    if (position // ... etc etc ...
}

为了在rolClick()函数结束时而不是开始时克服此更新currentPlayer

此外,您可能希望研究使用switch()语句来替换if-else-if筛选的列表。请点击MDN了解更多信息。

希望能有所帮助。:)