Creado por Sam Kaas y luego popularizado por la comedia The Big Bang Theory, este juego busca complejizar las reglas del tradicional piedra, papel o tijera mediante el agregado de dos componentes nuevos: el lagarto y Spock.
La idea fundamental tras este cambio fue la de reducir las chances de empate, situación que se daba muy a menudo entre jugadores que se conocían lo suficiente.
Si bien Sheldon tiene una excelente explicación de las reglas del juego, las transcribimos aquí mismo:
- Tijera corta papel
- Papel cubre piedra
- Piedra aplasta lagarto
- Lagarto envenena Spock
- Spock destroza tijera
- Tijera decapita lagarto
- Lagarto come papel
- Papel refuta Spock
- Spock vaporiza piedra
- Piedra aplasta tijera
Aunque es más sencillo con una imagen:
Sugerimos que lo jueguen un par de veces para comprender la temática, aunque es bastante sencilla
Se pide implementar una solución que permita jugar al piedra, papel, tijera, lagarto, Spock, calculando el resultado de cada partida en función de las formas elegidas por las manos. Aquí un ejemplo de cómo debería funcionar:
Mano jugadorUno = new Mano(Forma.PAPEL);
Mano jugadorDos = new Mano(Forma.LAGARTO);
Resultado resultadoJuego = jugadorUno.jugarContra(jugadorDos);
// resultadoJuego debe valer Resultado.PIERDE
resultadoJuego = jugadorDos.jugarContra(jugadorUno);
// resultadoJuego debe valer Resultado.GANA
resultadoJuego = jugadorUno.jugarContra(jugadorUno);
// resultadoJuego debe valer Resultado.EMPATA
Se otorga la implementación base de la clase Mano
, donde deberás completar, agregando tu propio código y eliminando las excepciones correspondientes, que hacen fallar el programa tal cual se entrega.
Adicionalmente se entrega una implementación básica de los enumerados Forma
y Resultado
.
También se te proveerá un test (dentro de la clase PartidaTests
) a modo de testigo, probando uno de los casos emblemáticos. Idealmente deberías hacer crecer esas pruebas, o agregar las tuyas propias para asegurarte de que tu solución es correcta.
La implementación más sencilla, completamente válida pero no recomendada, implica una gran cantidad de estructuras condicionales anidadas. Ese código no es mantenible, legible ni prolijo.
Te alentamos a que pruebes otras implementaciones, con algoritmos más sencillos que, idealmente, no tengan ninguna estructura condicional if
, ni su reemplazo, switch
.
Este trabajo tendrá una nota normalizada en 10.0 puntos, los cuales se componen según el siguiente detalle:
Concepto | Puntos totales | Porcentaje sobre el total |
---|---|---|
Funcionalidad | 8.0 | 80 % |
Estilo | 2.0 | 20 % |
Total | 10.0 | 100 % |
Por lo tanto, se te evaluará tanto la funcionalidad como la correctitud de estilo (tabulación, espacios, nombres, etcétera).
- Recordá no cambiar la firma de los métodos proporcionados por la cátedra.
- Podés hacer tantos tests como consideres necesarios, pero los mismos no se utilizarán para evaluar tu código.
- Recordá que podés enviar la tarea a corrección tantas veces como quieras, dentro del período de vigencia de la misma.