【问题标题】:JQuery and Javascript to keep track of two players in one Associative Array?JQuery 和 Javascript 在一个关联数组中跟踪两个玩家?
【发布时间】:2014-06-10 01:01:58
【问题描述】:

我正在制作一款西蒙游戏,其中两名玩家同时对抗 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()) {

//在这里做事;}}

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

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:

    您可以使用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/ 找到,this stackoverflow answer 也可以参考它。

    【讨论】:

      【解决方案2】:

      您可以按号码和姓名来索引球员。

      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/

      【讨论】:

      • 但是我仍然有一个问题,就是我以后在引入许多玩家时能够捕获数据。不?比如说,在每场比赛结束时,当该“名称”已经存在时,我必须更新现有玩家的“积分”。你看到我的问题了吗?
      • 我试图在开始时做一个单独的变量,比如 player[player.length - 1] = person1 和 player[player.length - 2] = person2 但从长远来看只会增加复杂性.它不会检查那个“玩家”是否已经存在。
      • 恐怕我误解了你的问题。我以为您只想修改players[$("#name").val()],这样可以轻松查找玩家姓名。我不知道你在用#name 做什么,所以坦率地说,我猜。
      猜你喜欢
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      相关资源
      最近更新 更多