Adivina el número aleatorio

¿Qué queremos construir?

Queremos crear un pequeño juego. El juego consiste en que un jugador intente adivinar un número aleatorio en tres intentos. 

En cada intento el juego debe notificar al usuario si el número correcto es mayor o menor. Si adivina el número correctamente, entonces el jugador gana, si no, pierde.

¿Qué intentamos practicar con esta kata?

 Esta kata está pensada para trabajar en test doubles, pero también se puede resolver sin ellos. Además, es un ejercicio excelente para trabajar la primitive obsession y los baby steps.

Reglas de juego

  • El usuario empieza a jugar, el juego genera un número aleatorio que no debe cambiar hasta que termine la partida.
  • Si el usuario acierta el número, el jugador gana.
  • Si el usuario no adivina el número, el sistema tendrá que notificar al usuario si el número es mayor o menor.
  • Si el usuario no acierta el número en tres intentos perderá.

Casos prácticos

El jugador gana en la primera jugada

Empieza el juego
Primer intento con el número 5
El jugador gana la partida
Estado inicial El jugador gana en la primera jugada
Initial state Player won on the first Intent

 

El jugador no gana en el primer intento

Empieza el juego
Primer intento con el número 10
Segundo intento con el número 3
Tercer intento con el número 5
El jugador gana la partida

 

Estado inicial Primer intento  Segundo intento  Tercer intento 
Initial state Player first move not guesses the number Player fails on second intent Player wins on last intent

 

The player loses the game

Empieza el juego
Primer intento con el número 10
Segundo intento con el número 3
Tercer intento con el número 5
El jugador pierde la partida

 

Estado inicial Primer intento Segundo intento Tercer intento
Initial state Player first move not guesses the number Player second move number higher Player fails on the last intent and loses the game

 

Posible API de la clase

public class GuessingNumberGame {
GuessingNumberGame(RandomNumberGenerator generator){}
public String guessNumber(int guessedNumber) {}
}

¿Qué puedo practicar con este kata?

  • Trabajar con colaboradores 
  • Baby steps
  • Object Calisthenics
  • Test doubles