在真假状态之间切换

时间:2015-02-26 12:09:02

标签: jquery boolean-logic boolean-expression

我有一个代表玩家的对象,让我们说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

所以我有两个问题:

  1. 我认为我对 var i 的声明错了(它代表了一个玩家的索引,我有2个所以它应该数到1然后再回到此时为0但是我想让它不依赖于一个特定的数字,所以它可能是4或10个玩家。

  2. 我需要切换当前播放器的状态(i)。 player1需要为true且切换为false时。那么玩家2的状态需要从虚假转为真。 (所以,如果我有更多的2个玩家,我需要将下面一个的状态切换为true,并且为false)

  3. 初学者的大脑沸腾了。有人可以帮忙吗?! 提前谢谢!

2 个答案:

答案 0 :(得分:0)

  • 答案1:

在设置之前在处理程序之外声明i。而不是i++;i = (i+1) % num_of_players;并定义变量num_of_players; %是计算除法余数的模运算符。如果按照概述使用,则会反复从0迭代到num_of_players-1。使用players.length代替num_of_players是等效的。

  • 答案2:

当你创建玩家对象时,玩家的状态会被初始化。在您的代码中,将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。您也可以使用它来遍历对象并获取其属性名称等等。

Documentation of for..in loop

无论如何,在这种情况下使用for循环而不是顺序for循环是不好的:

for(var iterator = 0; iterator < players.length; iterator++)

这样我们就不需要将迭代器解析为整数。 阅读更多关于何时使用for..in循环以及顺序循环时的信息: