Originally created by Daniel Ojeda, here are the slides
This is a fun kata that has the programmer building simple combat rules, as for a role-playing game (RPG). It is implemented as a sequence of iterations. The domain doesn't include a map or any other character skills apart from their ability to damage and heal one another.
-
Complete each iteration before reading the next one.
-
It's recommended you perform this kata with a pairing partner and while writing tests.
Show me!
- All Characters, when created, have:
- Health, starting at 1000
- Level, starting at 1
- May be Alive or Dead, starting Alive (Alive may be a true/false)
- Characters can Deal Damage to Characters.
- Damage is subtracted from Health
- When damage received exceeds current Health, Health becomes 0 and the character dies
- A Character can Heal a Character. - Dead characters cannot be healed - Healing cannot raise health above 1000
Show me!
-
A Character cannot Deal Damage to itself.
-
A Character can only Heal itself.
-
When dealing damage: - If the target is 5 or more Levels above the attacker, Damage is reduced by 50% - If the target is 5 or more Levels below the attacker, Damage is increased by 50%
Show me!
-
Characters have an attack Max Range.
-
Melee fighters have a range of 2 meters.
-
Ranged fighters have a range of 20 meters.
-
Characters must be in range to deal damage to a target.
Show me!
- Are you keeping up with the requirements? Has any iteration been a big challenge?
- Do you feel good about your design? Is it scalable and easily adapted to new requirements?
- Is everything tested? Are you confident in your code?
Show me!
- Characters may belong to one or more Factions.
- Newly created Characters belong to no Faction.
-
A Character may Join or Leave one or more Factions.
-
Players belonging to the same Faction are considered Allies.
-
Allies cannot Deal Damage to one another.
-
Allies can Heal one another.
Show me!
- Characters can damage non-character things (props). - Anything that has Health may be a target - These things cannot be Healed and they do not Deal Damage - These things do not belong to Factions; they are neutral - When reduced to 0 Health, things are Destroyed - As an example, you may create a Tree with 2000 Health
- What problems did you encounter?
- What have you learned? Any new technique or pattern?
- Share your design with others, and get feedback on different approaches.
Configuración básica para empezar a hacer una kata o aprender a hacer tests en los siguientes lenguajes:
- PHP con PHPUnit
- Javascript con Jest
- Typescript con Node
- Typescript con Deno
- Java con Junit y Mockito
- Scala con Munit y Scalacheck
- Kotlin con JUnit5 y MockK
- C# con xUnit (FluentAsertion) y NSubstitute (para mock)
- Instalar composer
curl -sS https://getcomposer.org/installer | php
composer install
(estando en la carpeta php)vendor/bin/phpunit
ocomposer test
- Instalar Node
npm install
(Estando en la carpeta javascript)npm test
- Instalar Deno
deno test
(Estando en la carpeta typescript)
- Instalar las dependencias y tests con Maven [mvn test]
- Ejecutar los tests con el IDE
sbt
(en la carpeta scala)~test
para ejecutar los test en hot reload
- Munit
- Scalacheck para testing basado en propiedades
- Instalar SDKMan
sdk install java 11.0.12-open
instala OpenJDKsdk install sbt
una vez instalado SDKMan
- Descargar Visual Studio Code
- Instalar para VS Code Metals
- Por consola: Puedes instalar dependencias y lanzar los tests con
gradlew test
- Usando IDE: Simplemente abre el proyecto desde el raiz de la plantilla Kotlin
- Instalar Microsoft Visual Studio Community 2022
- Abre el proyecto y se descargaran automáticamente los paquetes Nuguet necesarios
- Instalar python 3.x
- Una vez descargado el código fuente dentro de la carpeta */python/ creamos un virtual enviroment:
python3 -m venv env
- Activamos en virtual environment:
- windows:
.\env\Scripts\activate.bat
- linux/mac:
source env/bin/activate
pytest
para ejecutar los tests.