Javascript 使用矩阵的石头剪刀

Javascript 使用矩阵的石头剪刀,javascript,matrix,Javascript,Matrix,大家好,我是新来的,目前正在大学攻读javascript课程,以获得软件开发学位。我在我的石头剪纸蜥蜴斯波克最终项目中遇到了一个问题。我的教授给了我们一些测试,可以检查我们的代码,但我不太善于理解错误是如何告诉我哪里出了问题的,因为我真的不知道如何让代码正常工作。到目前为止,我已经创建了一些对象,并为它们提供了属性和方法。我还创建了一个矩阵,以捕获和保留获胜条件的变化。然而,我不明白如何创建我需要的最后一个方法:getWinner。在我们的准则中,它规定了以下内容: 评估谁赢了这场比赛的方法。应

大家好,我是新来的,目前正在大学攻读javascript课程,以获得软件开发学位。我在我的石头剪纸蜥蜴斯波克最终项目中遇到了一个问题。我的教授给了我们一些测试,可以检查我们的代码,但我不太善于理解错误是如何告诉我哪里出了问题的,因为我真的不知道如何让代码正常工作。到目前为止,我已经创建了一些对象,并为它们提供了属性和方法。我还创建了一个矩阵,以捕获和保留获胜条件的变化。然而,我不明白如何创建我需要的最后一个方法:getWinner。在我们的准则中,它规定了以下内容:

评估谁赢了这场比赛的方法。应该更新每个玩家的赢、输和速率。还应将winner属性设置为获胜玩家的名称

这是我正在处理的game.js文件。在底部,我被如何启动这个getWinner函数难住了。我已经启动了一些东西,但它没有响应我的单元测试。如果需要,我也可以发布代码。以及我的另一个文件,它是另一个对象

var Game = function(){
this.running = false;
this.name = "RPSLS";
this.players = [];
    this.addPlayer = function(name){
        var player = new Player(name);
        this.players.push(player);
        return player;
    };
    this.getPlayer = function(number){
        var player_number = number - 1;
        return this.players[player_number];
    };
    this.setHand = function(number, hand){
        var p = this.getPlayer(number);
        p.hand = hand;
    };

    this.matrix = {
        rock: {
            scissors: true,
            lizard: true
            },

        paper: {
            rock: true,
            spock: true
            },

        scissors: {
            paper: true,
            lizard: true
            },

        lizard: {
            spock: true,
            paper: true
            },

        spock: {
            rock: true,
            scissors: true

            }

    };


    this.getWinner = function(){
            var player1 = this.getPlayer();
            var player2 = this.getPlayer();
            if ( this.matrix [ player1 ] == [ player2 ] ) {

            } else if ( this.matrix [player1] [player2] ) {};
        }
})

感谢您阅读本文并提供帮助。

您主要是混淆了对象和数组。所讨论的对象是矩阵变量中大括号中的键值列表。您可以通过调用其名称:matrix[key]=value来获取并设置这样一个列表的键。 这样的键值列表可以嵌套。深深地参见JSON示例。解析这种深度嵌套的列表非常复杂,而且容易出错。JSON有现成的库,所以如果不是绝对必要,就不要使用它们

我在一定程度上简化了ansatz,但尽可能使用了数组和对象

var Game = function(){
// unused
this.running = false;
this.name = "RPSLS";
// Object (key-value list) to hold the players
this.allplayers = {};
// Object "Player"" to hold one player
var Player = function(){
    this.name = "";
    this.hand = "";
};
this.addPlayer = function(pname){
    // get memory for one new player
    var player = new Player();
    // set the name of the player
    player.name = pname;
    // put the player-object into the player-list
    this.allplayers[pname] = player;
    return player;
};
this.getPlayer = function(pname){
    return this.allplayers[pname];
};
this.setHand = function(pname, phand){
    this.allplayers[pname].hand = phand;
};

  /*
 Rock <-> Paper <-> Scissor <-> Lizard <-> Spock (Vulcan)

 If column beats row -> 1
 If column looses to row -> -1
 If tie -> 0


       0  1  2  3  4
       R  P  S  L  V
 0  R  0 -1  1  1 -1
 1  P  1  0 -1 -1  1
 2  S -1  1  0  1 -1 
 3  L -1  1 -1  0  1
 4  V  1 -1  1 -1  0
 */

// translate name to place in table above
this.rpslvEnum = {
  rock: 0,
  paper: 1,
  scissor: 2,
  lizard: 3,
  spock: 4
};

this.scheme = [
                [ 0, -1,  1,  1, -1],
                [ 1,  0, -1, -1,  1],
                [-1,  1,  0,  1, -1],
                [-1,  1, -1,  0,  1],
                [ 1, -1,  1, -1,  0]
              ];

this.getWinner = function(){
        var player1 = this.addPlayer("Kirk");
        var player2 = this.addPlayer("Uhura");
        this.setHand("Kirk","scissor");
        this.setHand("Uhura","spock");
        var result =  this.scheme[this.rpslvEnum[player1.hand]]
                                 [this.rpslvEnum[player2.hand]];
        switch(result){
          case 0: return "It's a tie";
          case 1: return "Player one had won";
          case -1: return "Player two had won";
          default: throw new Error("Something unexpected happend in " + this.name);break;
        }
   };
};
var g = new Game();
console.log(g.getWinner());
它缺乏很多强制性的制衡,而且非常杂乱无章,但我希望现在就足够相处了,否则……好吧……你们知道该去哪里问-