Considera usar un Codificador de prioridad para codificar las opciones del jugador. Si un jugador selecciona "Rock", las otras opciones se ignoran. Si el jugador no selecciona "Rock", pero selecciona "Papel", obtendrán "Papel" independientemente de si se ha seleccionado "Tijeras". Solo obtienen "Tijeras" si no seleccionaron "Papel" o "Piedra".
La tabla de verdad para codificar las opciones de un jugador se ve así:
Rock Paper scissors encoded as
0 0 0 00 (nothing)
1 x x 01 (rock)
0 1 x 10 (paper)
0 0 1 11 (scissors)
o completamente expandido para mostrar las ocho filas:
Rock Paper scissors encoded as
0 0 0 00 (nothing)
1 0 0 01 (rock)
1 0 1 01 (rock)
1 1 0 01 (rock)
1 1 1 01 (rock)
0 1 0 10 (paper)
0 1 1 10 (paper)
0 0 1 11 (scissors)
Entonces (¡spoilers!) la lógica del juego compararía estas dos opciones codificadas de 2 bits para elegir al ganador:
Player A Player B Outcome
00 (nothing) xx (pending)
xx 00 (nothing) (pending)
01 (rock) 01 (rock) (tie)
01 (rock) 10 (paper) (B wins: paper covers rock)
01 (rock) 11 (scissors) (A wins: rock breaks scissors)
10 (paper) 01 (rock) (A wins: paper covers rock)
10 (paper) 10 (paper) (tie)
10 (paper) 11 (scissors) (B wins: scissors cuts paper)
11 (scissors) 01 (rock) (B wins: rock breaks scissors)
11 (scissors) 10 (paper) (A wins: scissors cuts paper)
11 (scissors) 11 (scissors) (tie)
de nuevo, X = no importa 0 o 1, por lo que XX es una abreviatura de cuatro filas de la tabla de verdad = 00, 01, 10 o 11.
Ejercicio adicional, a la izquierda para el estudiante: extienda este diseño para jugar Rock-Paper-Scissors-Spock-Lizard
.
Me gusta esta pregunta, puedo comenzar a usar esto como una pregunta de entrevista de trabajo ...