viernes, 26 de febrero de 2010

Code Kata: parchís

Con el code kata de esta semana intentaremos mejorar nuestras dotes de modelado orientado a objetos y diseño.


Imagen de Santi Oliveri

Nuestro objetivo será modelar utilizando el paradigma orientado a objetos (o alguna aproximación si se utilizan otros paradigmas) para modelar el juego del parchís. Este juego de orígenes lejanos y orientales ha dado lugar muchísimas variantes (parchisi, ludo, por parejas) y la idiosincracia española ha contribuido a crear variantes por nuestra tendencia a inventarnos normas ad-hoc favorables a nuestra causa. Para evitar discusiones a continuación se incluye el parchís normalizado para exlabos (release candidade 1). Proximamente se enviará al W3C para su estandarización.

Parchis para exlabos RC1

Definiciones previas:

Jugador
Cada uno de los participantes. En una partida existen de 2 a cuatro y cada uno de ellos utiliza un color direfente
Color
Hay cuatro colores, por orden: amarillo, azul, rojo y verde
Ficha
Cada jugador tiene 4 fichas de su color ocupando alguna casilla.
Casilla
Cada uno de los lugares en los que pueden estar las fichas en el tablero. Hay 68 casillas comunes y 8 en la escalera de cada jugador (recta final coloreada). Las casillas tienen una capacidad máxima de, en general 2 fichas. Aunque parezca obvio, de la 68 se pasa a la 1.
Casa
Posición inicial de las fichas que no están en juego para cada jugador, lo que viene siendo el limbo. Capacidad: 4 fichas.
Escalera
Las últimas ocho casillas del camino exclusivas para cada jugador.
Seguro
Casillas especiales en las que no se capturan fichas. Hay 12: 5, 12, 17, 22, 29, 39, 46, 51, 58, 63, 68.
Salida
Seguro con el color de un jugador y punto de entrada de sus fichas desde su casa al ponerse en juego con un 5.
Meta
Última casilla de cada escalera. Capacidad: 4 fichas.
Puente
Dos fichas del mismo color en la misma casilla. Impiden el paso a cualquier ficha. (Tomad esto literalmente.)
Captura
Cuando se mueve una ficha a una casilla ya ocupada por una ficha de otro jugador esta es capturada. La ficha vuelve a su casa y el jugador cuenta 20 (si procede)
Turno
Lo que viene siendo un turno, avanzando en sentido anti-horario
Movimiento
Trasladar cualquier ficha que no esté ni en casa ni en la meta hasta el número de casillas por delante que se esté contando si la casilla de destino no está llena y no hay que atravesar puentes.
También se considera mover una ficha desde casa a la salida cuando se tiene una tirada de 5.

Inicio del juego. Al comenzar, cada jugador tendrá cuatro fichas en su casa. El que saque una tirada preliminar mayor disfrutará del primer turno. En caso de empate se vuelve a tirar.

Turno de un jugador.

Se tira el dado, si se saca...
  • 5. Si quedan fichas en casa y la salida no está llena, se pone en juego una ficha. Si no, se mueve contándose 5 y en siguiente turno será para el siguiente jugador (amarillo -> azul -> rojo -> azul -> amarillo -> ... imaginad el ciclo del rey león).
  • 6.
    • Primer y segundo turnos consecutivos. Contarse 6 (7 si no quedan fichas en casa) y el siguiente turno será del mismo jugador.
    • Tercer turno consecutivo. La última ficha movida vuelve a la casa a no ser que se encuentre en la escalera y termina el turno.
  • Resto de tiradas. Se cuentan las casillas correspondientes a la tirada.

Mover una ficha. Si se está contando 6 o 7 y alguno de los movimientos posibles (ver definición) puede romper un puente se debe romper un puente (nobleza obliga). En otro caso se elige cualquier movimiento posible o no se mueve si no existe ninguno.

Si existe captura, se vuelve a mover una ficha, contándose 20 esta vez.

Si se alcanza la meta, se vuelve a mover una ficha, contándose 10.

Fin del juego. Si todas las fichas de un jugador llegan a su meta ha ganado y finaliza la partida. En teoría se podría continuar hasta que ganasen n-1 jugadores, pero no tiene ningún interes.

Parchis Kata

El objetivo es modelar el juego descrito en las normas anteriores pero no de cualquier forma. Es necesario:
  • Poder representar mediante un objeto cada estado del juego. No es necesario representar la tirada inicial que decide que jugador comienza.
  • La interfaz debe ser lo más natural y sucinta posible. Debe ser posible recuperar la información necesaria para representar el estado del juego y también para ejecutar los movimientos de los jugadores.
  • En concreto, se debe prestar especial atención a las diferentes acciones que un jugador pueda elegir. Se tienen que poder listar como objetos antes de decidirse por uno de ellos.
El kata se puede ejercitar hasta diferentes niveles de detalle:
  • Representación inicial mediante UML o cajitas en una servilleta
  • Interfaces concretas para los diferentes objetos
  • Implementación de los métodos (y sus pruebas de unidad para comprobar que se cumplen las normas)
Esto es todo por el momento, disfrutad!

No hay comentarios:

Publicar un comentario