🐉 Duelo de Dragones
Simulador de combate por turnos entre dos dragones, con fase de entrenamiento y aserciones de invariantes
Escala del Proyecto
Descripción General
Ejercicio de la asignatura de Programación sobre estructuras de control y funciones. Simula un combate por turnos entre dos dragones, y aunque el tema es una excusa, la lógica que hay dentro no es trivial.
El programa pide nombre y edad de cada dragón, convierte la edad con
try/except usando 100 años como valor por defecto si falla, y los
clasifica en Joven (menos de 50), Adulto (50 a
199) o Anciano (200 o más). Dos funciones documentadas resuelven el
cálculo: calculaFuerzaBase(edad) devuelve 10, 15 o 12 según la
clasificación, y turnoDeAtaque(fuerza, resistencia_enemigo) aplica la
fórmula fuerza − (resistencia // 3) con mínimo cero.
Después hay una fase de entrenamiento de tres días donde los
jóvenes ganan 2 puntos de fuerza y resistencia por día y los demás 1, y el duelo
real: un while que se ejecuta mientras ambos tengan salud, con dos
mordiscos por turno y salida anticipada en cuanto uno cae.
Tecnologías Utilizadas
Python
try / except
assert
while / for
Docstrings
Mecánica del Simulador
- Clasificación por edad: Joven (<50), Adulto (50-199), Anciano (≥200).
- Fuerza base según clasificación: 10 para el joven, 15 para el adulto, 12 para el anciano.
- Resistencia base derivada:
fuerza // 2 + 5. - Entrenamiento de 3 días: el joven gana 2 puntos de fuerza y resistencia por día, el adulto y el anciano 1.
- Fórmula de daño:
fuerza − (resistencia_enemigo // 3), nunca negativa. - Combate: 40 puntos de salud cada uno, dos mordiscos por turno, y el bucle termina en cuanto uno llega a cero.
- Resumen final con edad, clasificación, fuerza y resistencia finales, salud restante y el ganador, contemplando el empate.
Qué Aprendí
- Que
try/exceptalrededor de unint()es la forma de que el programa no muera porque el usuario escriba "cien", y que hay que decidir qué valor por defecto usar. - Que una función con docstring que solo calcula y devuelve, sin imprimir nada, es reutilizable; una que imprime por dentro, no.
- Que las aserciones sirven para dejar por escrito lo que nunca debe ocurrir: el daño no puede ser negativo y la salud no puede bajar de cero. Si la lógica se rompe, el programa falla ahí y no veinte líneas después.
- Que hay que proteger cada resta por separado: comprobar que el daño no sea negativo no evita que la salud lo sea.
- Que salir del bucle en cuanto un dragón cae, y no al final del turno, cambia el resultado del combate. Los detalles del orden importan.
Mi Rol
Autor del ejercicio. Práctica individual de la asignatura de Programación.
Estado del Proyecto
Ejercicio académico completado en su versión 0.2, disponible en el repositorio de apuntes.
Código y Enlaces
Ruta dentro del repositorio: Ejercicios/EJ -
CLASE/0110-EJ-codigo-dragones.py