Javascript 使用矩阵的石头剪刀
大家好,我是新来的,目前正在大学攻读javascript课程,以获得软件开发学位。我在我的石头剪纸蜥蜴斯波克最终项目中遇到了一个问题。我的教授给了我们一些测试,可以检查我们的代码,但我不太善于理解错误是如何告诉我哪里出了问题的,因为我真的不知道如何让代码正常工作。到目前为止,我已经创建了一些对象,并为它们提供了属性和方法。我还创建了一个矩阵,以捕获和保留获胜条件的变化。然而,我不明白如何创建我需要的最后一个方法:getWinner。在我们的准则中,它规定了以下内容: 评估谁赢了这场比赛的方法。应该更新每个玩家的赢、输和速率。还应将winner属性设置为获胜玩家的名称 这是我正在处理的game.js文件。在底部,我被如何启动这个getWinner函数难住了。我已经启动了一些东西,但它没有响应我的单元测试。如果需要,我也可以发布代码。以及我的另一个文件,它是另一个对象Javascript 使用矩阵的石头剪刀,javascript,matrix,Javascript,Matrix,大家好,我是新来的,目前正在大学攻读javascript课程,以获得软件开发学位。我在我的石头剪纸蜥蜴斯波克最终项目中遇到了一个问题。我的教授给了我们一些测试,可以检查我们的代码,但我不太善于理解错误是如何告诉我哪里出了问题的,因为我真的不知道如何让代码正常工作。到目前为止,我已经创建了一些对象,并为它们提供了属性和方法。我还创建了一个矩阵,以捕获和保留获胜条件的变化。然而,我不明白如何创建我需要的最后一个方法: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());
它缺乏很多强制性的制衡,而且非常杂乱无章,但我希望现在就足够相处了,否则……好吧……你们知道该去哪里问-