JQuery和Javascript在一个关联数组中跟踪两个玩家

JQuery and Javascript to keep track of two players in one Associative Array?

本文关键字:跟踪 两个 玩家 数组 关联 Javascript JQuery 一个      更新时间:2023-09-26

我正在制作一款Simon游戏,两名玩家同时对抗AI和其他玩家。为了从长远来看简化事情,我重写了许多代码,以便将所有内容保持在单个"玩家"数组中。然而,我在思考如何能够跟踪游戏中的某些事情时遇到了麻烦,例如轮到谁了,或者哪个对象数据进入了。

//player1和player2都= $("#name").val()其中#name是输入框并被验证

    player[player.length] = {
        name: player1,
        points: 0,
        gamesWon: 0,
        gamesLost: 0,
        gamesTied: 0,
        sequence: null,
        correct: false
    };
    player[player.length] = {
        name: player2,
        points: 0,
        gamesWon: 0,
        gamesLost: 0,
        gamesTied: 0,
        sequence: null,
        correct: false
    };

这将是一个不断增长的数组,其中存储了无限数量的玩家。例如,在后面的代码中,如果我想要修改第二个玩家的分数,我是否必须添加:

for(i=0; i < player.length; i++){if (player[i].name === $("#name").val()) {

//在这里做一些事情;}}

是否有更简单的方法来找到球员并修改数组位置的值?或者找到我需要的其他东西?

您可以使用jQuery.grep( )来搜索数组。因为您有一个对象数组,所以grep( )函数允许您匹配特定的条件,包括对象的属性。这个函数返回在数组中查找的对象,而不影响原始数组。用法示例:

var players = [];
player[0] = {
    name: player1,
    points: 0,
    gamesWon: 0,
    gamesLost: 0,
    gamesTied: 0,
    sequence: null,
    correct: false
};
player[1] = {
    name: player2,
    points: 0,
    gamesWon: 0,
    gamesLost: 0,
    gamesTied: 0,
    sequence: null,
    correct: false
};
$player2 = $.grep( player, function( p ) { p.name === "player2"; } ); //Returns the player2 object

关于grep( )函数的文档可以在http://api.jquery.com/jquery.grep/找到,这个stackoverflow答案也引用了它。

你可以根据球员的号码和名字来索引。

var players = []
function joinGame(playerName) {
    var playerNumber = players.length;
    players[playerName] = {
        name: playerName,
        number: playerNumber
    };
    players[playerNumber] = players[playerName];
}
joinGame('player0');
joinGame('player1');
console.log('-- by player number --');
console.log(players[0]);
console.log(players[1]);
console.log('-- by player name --');
console.log(players['player0'])
console.log(players['player1']);
console.log('-- forEach on the array --');
players.forEach(function(p) {
    console.log(p);
});
http://jsfiddle.net/85X3c/