Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Iceforge

Challenge 1 de the huddle. Juego por turnos con Programación Orientada a Objetos.

Descripción

Juego de combate por turnos en consola: un pingüino (jugador) enfrenta a un conjunto de depredadores marinos, con la ayuda de un aliado. El desafío exigía modelar el sistema completo aplicando los 4 pilares de POO (abstracción, herencia, polimorfismo y encapsulamiento), con una clase Game como motor del loop, sin lógica de reglas flotando en el main.


Tecnologías utilizadas

  • Python
  • abc (clases abstractas)
  • random (libreria de python)

Estructura del proyecto

Iceforge
├── characters.py   → Dominio: Character (abstracta), Player, Enemy, Orca, Delfin, Ally
├── motor.py        → Motor: clase Game (coordinación del loop y turnos)
├── UI.py            → Consola: inputs y prints
├── main.py          → Punto de entrada
└── README.md

Cómo correr el proyecto

python main.py

El juego pide por consola a qué enemigo atacar en cada turno del pingüino; el resto de las acciones (aliado, enemigos) son automáticas.


Decisiones técnicas

Separación en characters.py, motor.py y UI.py. Es uno de los requisitos obligatorios del challenge, apuntado directamente a los pilares de POO: cada archivo tiene una única responsabilidad (dominio, coordinación, interfaz), lo que permite escalar el juego —por ejemplo agregar un enemigo nuevo— sin tocar código que no le corresponde a esa responsabilidad.

Character como clase abstracta con ABC. No existe un "personaje genérico" en el juego — siempre es un pingüino, una orca, un delfín o un aliado. Character no se instancia directamente y obliga a sus hijas a implementar atacar, que cada una hace de forma distinta (polimorfismo).

Atributos con _ en vez de __. Con __ Python aplica name mangling y las clases hijas no pueden acceder al atributo del padre, ni siquiera con super(). Como Player, Enemy y Ally necesitan usar atributos definidos en Character (como el daño base), se usó _ — protegido por convención, pero accesible desde las subclases — y se expusieron nombre y vida como solo lectura con @property para las consultas desde fuera de las clases.

Delfín con daño reducido. El delfín ataca a los dos objetivos (pingüino y aliado) en el mismo turno, a diferencia de los demás enemigos que atacan a uno solo. Para no romper el balance del juego, su daño se redujo — es su forma particular de implementar atacar, mostrando polimorfismo real y no solo una copia del comportamiento de Enemy.


Requisitos del challenge cumplidos

  • Clase abstracta como contrato del sistema (Character, no instanciable).
  • Mínimo 3 clases hijas con herencia y polimorfismo (Player, EnemyOrca/Delfin, Ally).
  • Encapsulamiento real del estado (atributos protegidos + @property).
  • Clase Game como motor: inicializa, coordina turnos y determina el fin de la partida.
  • Código modularizado en 3 zonas lógicas (dominio, motor, UI consola), sin reglas sueltas en main.

Autor

Fede Alarcón Scura — Estudiante de Penguin Academy Challenge desarrollado como parte del programa de formación.

About

Challenge 1 de the huddle. Juego de pinguinos.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages