TDD Kata (1): Piedra Papel Tijera Lagarto Spock

Siguiente Post


En estos días, leí en la lista de TDDev en español una nueva kata publicada en el blog de Aprendiendo TDD:


Piedra Papel Tijera Lagarto Spock


basado en el problema publicado en


http://www.solveet.com/exercises/Kata-Piedra-Papel-Tijera-Lagarto-Spock/20


Tomé la descripción del artículo de la Wikipedia:


http://en.wikipedia.org/wiki/Rock-paper-scissors-lizard-Spock


The rules of Rock-paper-scissors-lizard-Spock are:

  • Scissors cut paper
  • Paper covers rock
  • Rock crushes lizard
  • Lizard poisons Spock
  • Spock smashes (or melts) scissors
  • Scissors decapitate lizard
  • Lizard eats paper
  • Paper disproves Spock
  • Spock vaporizes rock
  • Rock breaks scissors

Y entonces me puse a codificarla usando TDD. Pueden ver el resultado en:


https://github.com/ajlopez/TddOnTheRocks/tree/master/SpockGame


La historia, casi por tests:


https://github.com/ajlopez/TddOnTheRocks/commits/master/SpockGame



Vean el primer test/commit: todavía no compilaba. Luego, comenzó a compilar pero con estado rojo. Luego, lo pasé a verde y así.


También decidí ter dos tests por cada combinación de arriba: una que prueba que Scissors cut Paper, y otra que prueba Paper is cut by Scissors


El diseño inicial fue basado en:


- Tener una instancia de Game (la alternativa era tener la clase, sin instancia)


- Tener una enumeración para las opciones de juego (Play.Scissors, etc…)


- Tener una enumeración para el resultado (PlayResult.Tie, PlayResult.FirstPlayer…)


En vez de tener resultado de juego, podría haber puesto un método que comparara dos opciones de juego, y devolviera cuál es la que gana. Incluso hoy podría poner este método como refactorización.


Vean la última refactorización: podría haber dejado el código de implementación tal como estaba, con if para decidir cuándo gana el primer jugador:



Por esta otra forma:



sugerida por el artículo de la Wikipedia:


One way to remember the rules is to remember the standard “rock-paper-scissors” ordering, where each gesture defeats the one before it, and is defeated by the one after. But then add the two novel gestures near the word they approximately rhyme with:

  1. Rock
  2. Spock
  3. Paper
  4. Lizard
  5. Scissors

In this expanded list, each gesture is defeated by the following two options, and defeats the preceding two.


Nos leemos!


Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 10549, 11699, 1389, 5374. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>