2012-07-07 15 views
5

Así que yo estaba escribiendo una piedra, papel o tijera juego cuando llegué a escribir esta función:Rock, Papel, Tijeras. Determine ganar/perder/empate usando matemáticas?

a es jugador del un movimiento, es b movimiento del jugador del dos. Todo lo que necesito saber es si el jugador ganó, perdió o empató.

//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++; 
    } 
} 

Mi pregunta es: ¿Cuál es la manera más elegante de escribir esta función?

Editar: Estoy buscando un trazador de líneas.

+1

Buscar código correcto legible es mucho mejor que buscar frases únicas. –

+1

Eche un vistazo a mi respuesta a una pregunta similar: http://stackoverflow.com/a/9553712/1207152 – sch

Respuesta

12
if (a == b) ties++; 
else if ((a - b) % 3 == 1) wins++; 
else losses++; 

Necesito saber exactamente qué idioma está utilizando para convertirlo en un estrictamente único ...

JavaScript (u otros idiomas con extraña módulo) utilizar:

if (a == b) ties++; 
else if ((a - b + 3) % 3 == 1) wins++; 
else losses++; 
+0

roca contra tijeras no funciona: '(0 - 2% 3) = -2'. Usando 'javascript' –

+3

Parece que falta un par de paréntesis: ((a-b)% 3 == 1). En operadores C, el módulo es más alto en orden de operaciones que resta. – Tim

7

Una matriz de 3x3 sería "más elegante", supongo.

char result = "TWLLTWWLT".charAt(a * 3 + b); 

(Editado: olvidó que a y b ya estaban cero origen.)

2

supongo que se podría utilizar el operador terniary como esto -

if (b==0) a==1? wins++ : loss++; 

if (b==1) a==1? loss++ : wins++; 

if (b==2) a==1? loss++ : wins++; 
2

Usted puede hacerlo con una simple fórmula matemática para obtener el resultado y luego comparar con if así:

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; 
}; 

jsFiddle Demo


Una línea processMove función sin retorno:

var processMove = function (a, b) { 
    ((3 + b - a) % 3) ? 1 == ((3 + b - a) % 3) ? ++result.losses : ++result.wins : ++result.ties; 
}; 
1

¿cómo lo haces en java?

resultado = (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"); 
} 
Cuestiones relacionadas