所以当我写这个函数时,我正在写一个石头剪刀游戏:
a
是玩家一招,b
是玩家二的举动。我需要弄清楚的是,如果一名球员获胜,失败或并列。
//rock=0, paper=1, scissors=2
processMove(a, b) {
if(a == b) ties++;
else {
if(a==0 && b==2) wins++;
else if(a==0 && b==1) losses++;
else if(a==1 && b==2) losses++;
else if(a==1 && b==0) wins++;
else if(a==2 && b==1) wins++;
else if(a==2 && b==0) losses++;
}
}
我的问题是:这个函数可以编写的最优雅方式是什么?
编辑:我正在寻找单行。
答案 0 :(得分:12)
if (a == b) ties++;
else if ((a - b) % 3 == 1) wins++;
else losses++;
我需要确切地知道您正在使用哪种语言将其转换为严格的单行...
对于JavaScript(或其他具有奇怪模数的语言),请使用:
if (a == b) ties++;
else if ((a - b + 3) % 3 == 1) wins++;
else losses++;
答案 1 :(得分:7)
我猜想,3x3矩阵会“更优雅”。
char result = "TWLLTWWLT".charAt(a * 3 + b);
(编辑:忘了a
和b
已经是零起源。)
答案 2 :(得分:2)
我想你可以像这样使用三元运算符 -
if (b==0) a==1? wins++ : loss++;
if (b==1) a==1? loss++ : wins++;
if (b==2) a==1? loss++ : wins++;
答案 3 :(得分:2)
您可以使用简单的数学公式来获得结果,然后与if
进行比较:
var moves = {
'rock': 0,
'paper': 1,
'scissors': 2
};
var result = {
'wins': 0,
'losses': 0,
'ties': 0
};
var processMove = function (a, b) {
var processResult = (3 + b - a) % 3;
if (!processResult) {
++result['ties'];
} else if(1 == processResult) {
++result['losses'];
} else {
++result['wins'];
}
return result;
};
一行processMove
函数,不返回:
var processMove = function (a, b) {
((3 + b - a) % 3) ? 1 == ((3 + b - a) % 3) ? ++result.losses : ++result.wins : ++result.ties;
};
答案 4 :(得分:1)
你是如何在java中做到的?
result =(comp - x)%3;
System.out.println (result);
if (result == 0 )// if the game is tie
{
System.out.println ("A Tie!") ;
}
else if (result == 1 || result == 2 )
{
//System.out.println (user + " " + "beats" + " " + computer_choice + " you win" );
System.out.println ("comp win");
}
else
{
System.out.println ("you win");
//System.out.println (computer_choice + " " + "beats" + " " + user + "you lose");
}