Juego de simulación creado en Python inspirado en Dwarf Fortress con características del Salvaje Oeste.
Creado con intención de aplicar los conocimientos adquiridos en la materia Estructura de Datos y Algoritmos, aprovechando el enfoque del juego para poner en práctica conceptos de programación avanzada.
El proyecto funciona como recurso educativo para mejorar la comprensión y aplicación de:
- Estructuras de datos y algoritmos.
- Programación Orientada a Objetos (POO), aplicando conceptos como polimorfismo, herencia y encapsulamiento.
- Uso de librerías externas como pygame.
- Trabajo en equipo y asignación de roles dentro del desarrollo de un videojuego.
Es un enfoque que va más allá de lo monótono de un proyecto común, siendo una experiencia práctica, divertida y didáctica de todo lo visto durante el semestre.
La Programación Orientada a Objetos (POO) es el núcleo del proyecto.
Cada entidad del mundo del juego (personajes, fauna, edificios, recursos, etc.) se modela como un objeto, permitiendo estructurar el código de manera modular y reutilizable.
Principios aplicados:
- Herencia: las clases derivadas extienden comportamientos base (por ejemplo,
Cantinahereda deEdificiooVaquerodePersonaje). - Polimorfismo: los métodos compartidos se comportan diferente según la clase (por ejemplo, cada personaje o animal tiene su propio
update()). - Encapsulamiento: los atributos internos (salud, hambre, progreso de construcción, etc.) se controlan dentro de cada clase.
Gracias a la POO, el código es más limpio, escalable y fácil de mantener.
Núcleo estructural del sistema. Define:
Animal: movimiento, envejecimiento y renderizado.FaunaSilvestre: añade desplazamiento hacia objetivos.Personaje: agrega aptitudes, inventario y necesidades.AccionyTarea: base del sistema de IA y automatización de acciones.
Define los personajes humanos y la fauna:
- Humanos: Vaquero, Cazador, Pionero, Médico.
- Fauna pasiva (Pollo, Oveja, Vaca, Zancudo) y agresiva (Oso, Lobo).
Incluyecargar_imagenes_personaje()para cargar y escalar sprites en las cuatro direcciones.
Modela estructuras del entorno:
Edificio: clase base con progreso de construcción, ocupantes y posición.Cantina: edificio derivado con imágenes escaladas (100×100 px) y función de descanso para personajes.
Coordina el estado global de la simulación mediante la clase Colonia:
- Gestiona recursos, entidades y tareas.
- Usa grupos de
pygame.sprite.Grouppara mantener actualizadas las entidades en pantalla.
Centraliza las acciones del juego (construir, cazar, descansar, etc.):
- Define instancias concretas de
AccionyTarea. - Las agrupa en
ACCIONES_ESTANDARES, usadas por la interfaz y la lógica.
Motor lógico del sistema:
- Procesa tareas (
procesar_tarea,procesar_tarea_caza). - Asigna acciones automáticas (
buscar_y_asignar_tarea). - Actualiza la simulación por fotograma (
simular_tick). - Controla eventos aleatorios (
check_random_events).
Gestiona la interfaz gráfica mediante UIManager:
- Dibuja recursos, paneles y botones.
- Detecta clics del jugador (
verificar_click_accion) y los traduce en tareas del sistema.
📚 Resumen:
classes.pydefine la base.characters.pyyedificios.pyamplían entidades.colonia.pycoordina la simulación.instances.pydefine las acciones.utils.pyejecuta la lógica.ui.pyconecta la interfaz con el jugador.
El mapa se genera mediante la técnica “handcrafted procedural”, donde se combinan funciones matemáticas y reglas explícitas para crear terrenos variados.
- Procedural: generado por un algoritmo en lugar de un dibujo manual.
- Handcrafted: diseñado mediante fórmulas matemáticas y parámetros como radios, centros y máscaras elípticas.
Se usan curvas seno, radios y máscaras para generar montañas, pantanos, océanos y campos.
(Insertar imagen del mapa aquí)
HEAP Y COMO AFECTA A LOS PERSONAJES Y SUS TAREAS ADALBERTO-------------------------------------------------------------
Se usa la biblioteca pygame para manejar:
- Renderizado de imágenes, figuras y texto.
- Detección de interacción del usuario.
- Control del tiempo y FPS.
- Reproducción de sonidos o música.
También gestiona colisiones y condiciones como walkable, para determinar si el personaje puede desplazarse por una zona específica.
Para ejecutar el proyecto correctamente, asegúrate de tener Python 3.10+ y luego instala pygame con el siguiente comando:
pip install pygame