我有一个代表玩家的对象,让我们说2个玩家
//create a player object
function player(name,state,score) {
this.name = name;
this.state = state;
this.score = score;
}
var players = [
new player('player1',true,0),
new player('player2',false,0)
];
所以我希望玩家一个接一个地移动。为此,我使用了真或假状态。因此,当它为真时,对于玩家1和对战
,它会计算(我计算玩家的正确答案并显示它们)我现在拥有的是
$("#check").click(function(){
if(localCorrect == 2){
//counting number of correct cards and assigning it to the player
var i=0;
if (players[i].state == true){
var localscore = players[i].score;
localscore++;
score[i] = localscore;
//display the score
$("span#"+players[i].name).html(score[i]);
players[i].state = false;
i++;
players[i].state = true;
//if(i=2)
//{i=0}
}
}else{
//some other thing
}
});
我有一个带有此http://jsfiddle.net/ycycghwq/
的Feedle所以我有两个问题:
我认为我对 var i 的声明错了(它代表了一个玩家的索引,我有2个所以它应该数到1然后再回到此时为0但是我想让它不依赖于一个特定的数字,所以它可能是4或10个玩家。
我需要切换当前播放器的状态(i)。 player1需要为true且切换为false时。那么玩家2的状态需要从虚假转为真。 (所以,如果我有更多的2个玩家,我需要将下面一个的状态切换为true,并且为false)
初学者的大脑沸腾了。有人可以帮忙吗?! 提前谢谢!
答案 0 :(得分:0)
在设置之前在处理程序之外声明i
。而不是i++;
写i = (i+1) % num_of_players;
并定义变量num_of_players
; %
是计算除法余数的模运算符。如果按照概述使用,则会反复从0
迭代到num_of_players-1
。使用players.length
代替num_of_players
是等效的。
当你创建玩家对象时,玩家的状态会被初始化。在您的代码中,将players[i].state = false;
,players[i].state = true;
替换为players[i].state = !players[i].state;
。
工作演示:this fiddle。
<强> 注意 强>
您不需要对布尔变量使用相等测试运算符; if (players[i].state) { ...
就足够了。
如果您使用test进行相等操作,请使用类型安全的变体===
而不是==
。
答案 1 :(得分:0)
我修改了你的代码。现在你可以在阵列中拥有x个玩家,他们会很好地切换他们的状态。我评论了最重要的部分,所以我认为你在阅读代码时会遇到问题。如果你刚问:)
JSFiddle: http://jsfiddle.net/ycycghwq/2/
var score = [0,0];
var localCorrect = 2;
$(document).ready(function(){
//create a player object
var Player = function(name, state, score) {
this.name = name;
this.state = state;
this.score = score;
}
var players = [
new Player('player1',true,0),
new Player('player2',false,0)
];
$("#check").click(function(){
if(localCorrect == 2) {
// iterate through all the players
for(var iterator = 0; iterator < players.length; iterator++) {
// check if there is array/object element with this key
if (players.hasOwnProperty(iterator)) {
var player = players[iterator];
// check for player state
if (player.state === true) {
// increment player score
player.score++;
score[iterator] = player.score;
$("span#" + player.name).html(score[iterator]);
player.state = false;
// check if there is next player in the array
// if not start from the first player
if (players.hasOwnProperty(iterator + 1)) {
var nextPlayer = players[iterator + 1];
nextPlayer.state = true;
} else {
var firstPlayer = players[0];
firstPlayer.state = true;
}
// exit the for loop
break;
} else {
// some other thing
}
}
}
}
});
});
修改强>
您不会在玩家对象/数组中创建变量。您为for..in循环创建了一个变量迭代器。该变量代表数组的每个键(在本例中为player)。因此,对于循环的2次迭代,您的迭代器将为0和1。您也可以使用它来遍历对象并获取其属性名称等等。
无论如何,在这种情况下使用for循环而不是顺序for循环是不好的:
for(var iterator = 0; iterator < players.length; iterator++)
这样我们就不需要将迭代器解析为整数。 阅读更多关于何时使用for..in循环以及顺序循环时的信息: