¡Bienvenido/a a la KataP del Aula de Software Libre! En esta kata de programación orientada a objetos (POO) y algoritmos en Python, tu misión es ayudar a Tux, el pingüino de Linux, a explorar la Antártida, recolectar nieve para poder hacer su iglú y esquivar bloques de hielo.
Este proyecto sigue una metodología guiada por pruebas (TDD): irás implementando las clases y métodos paso a paso para hacer pasar la suite de tests (pytest), y finalmente programarás algoritmos de automatización para resolver el juego en la terminal.
NOTA: Esta kata está resuelta, si en un futuro va a utilizarse para alguna actividad del Aula, sólo habría que eliminar las funcionalidades que se deseen e indicar el funcionamiento de las clases y funciones.
- Python 3.9 o superior.
- Las dependencias del proyecto están en
requirements.txt. La aplicación utiliza principalmente la biblioteca estándar de Python;pytestse incluye para ejecutar la suite de pruebas unitarias.
Desde la carpeta raíz del proyecto, crea y activa un entorno virtual:
python3 -m venv .venv
source .venv/bin/activateInstala linux!
Con el entorno activado, actualiza pip e instala las dependencias:
python -m pip install --upgrade pip
python -m pip install -r requirements.txtPara salir del entorno virtual cuando termines:
deactivateRecuerda activar de nuevo el entorno con source .venv/bin/activate cada vez que abras una terminal nueva para trabajar en el proyecto.
KataPython2026/
├── src/
│ ├── entidades.py # Clase Posicion, Item, Nieve, HieloGrueso (Fase 1)
│ ├── mundo.py # Clase Mundo (Matriz NxM y gestión de celdas) (Fase 2)
│ ├── tux.py # Clase Tux (Atributos, energía e inventario) (Fase 3)
│ └── render.py # Renderizador del tablero en consola con emojis
├── tests/
│ ├── test_fase1_2.py # Pruebas para Entidades y el Mundo
│ └── test_fase3.py # Pruebas para el Agente Tux
├── requirements.txt # Dependencias (pytest)
├── main.py # Script ejecutable y retos de automatización (Fase 4)
└── README.md # Guía e instrucciones
La kata está dividida en 4 fases incrementales:
- Implementa la clase inmutable
Posicion(x, y)con su métodomover(dx, dy). - Define la clase base
Itemy sus subclasesNieve(con cantidad) yHieloGrueso(obstáculo no recolectable).
- Implementa la clase
Mundo(filas, columnas)que maneja el tablero mediante una matriz/lista anidada. - Añade validaciones de límites con
es_posicion_valida(pos)y métodos para consultar (obtener_item), colocar (colocar_item) y retirar elementos (retirar_item).
- Define la clase
Tuxque almacena su posición, energía disponible e inventario de nieve. - Implementa el método
mover(direccion)para desplazarse en 4 direcciones ("arriba","abajo","izquierda","derecha"), validando colisiones con el hielo, límites del mundo y gasto de energía. - Implementa
recolectar()para añadir la nieve de la celda actual al inventario de Tux.
- Escribe algoritmos en
main.pypara que Tux explore la Antártida de manera autónoma, recolecte recursos y optimice su energía.
Para comprobar si tu código cumple los requisitos de cada fase, ejecuta la suite de pruebas con pytest:
python -m pytestPara ejecutar únicamente los tests de una fase específica:
python -m pytest tests/test_fase1_2.py
python -m pytest tests/test_fase3.pyTambién puedes probar los módulos directamente desde la raíz ejecutando fragmentos rápidos en Python:
python -c 'from src.entidades import Nieve, Posicion; from src.mundo import Mundo; mundo = Mundo(filas=3, columnas=3); mundo.colocar_item(Posicion(1, 1), Nieve(cantidad=5)); print(mundo.obtener_item(Posicion(1, 1)).nombre)'Una vez hayas superado los tests unitarios, ejecuta la simulación visual en la consola:
python main.pyVerás cómo Tux (🐧) interactúa con el mundo (❄️, 🧊) paso a paso en la terminal. ¡Buena suerte completando todos los retos! 🐧✨