Volver a Proyectos

🐉 Duelo de Dragones

Simulador de combate por turnos entre dos dragones, con fase de entrenamiento y aserciones de invariantes

Proyecto académico Python Aserciones

Escala del Proyecto

207Líneas
2Funciones
v0.2Versión

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/except alrededor de un int() 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