Skip to content

clau-yon/CyberCba2077

 
 

Repository files navigation

🌆 Cyberpunk Córdoba 2077 CI

Año 2077.
Córdoba ya no es la que conocías.
Los barrios están gobernados por inteligencias artificiales corporativas.
Los recursos son escasos.
Las decisiones importan.
Y cada algoritmo puede cambiar el destino del sistema.

Bienvenido/a al proyecto integrador de Algoritmos y Estructuras de Datos.

Este no es solo un trabajo práctico.
Es un laboratorio vivo donde cada estructura que implementes tendrá impacto real en el mundo del juego.


👥 Equipo de desarrollo


🎮 ¿Qué es Cyberpunk Córdoba 2077?

Es un RPG 2D top-down desarrollado con raylib, donde el motor gráfico ya está provisto por la cátedra.

Tu misión no es dibujar el mundo.
Tu misión es diseñar la lógica que lo gobierna.

Cada estructura de datos que construyas será el corazón del sistema:

  • 📦 El inventario será una estructura dinámica (lista).
  • 🔄 El sistema de “undo” usará una pila.
  • 🕒 Los eventos y turnos se gestionarán con colas.
  • 🌳 Las habilidades se organizarán con árboles.
  • 🗺 El mapa de la ciudad será un grafo.
  • ⚡ La navegación y rutas dependerán de algoritmos como Dijkstra.
  • 🧠 Las decisiones estratégicas usarán estrategias algorítmicas (voraces, etc.).
  • 🗃 El acceso eficiente a recursos dependerá de hashing.

Acá los algoritmos no son teoría.
Son mecánicas.


🏗 Arquitectura del proyecto

Seguimos una arquitectura MVC estricta:

  • Modelo → implementado por ustedes
    Contiene estructuras de datos + lógica algorítmica.

  • Vista → raylib (provista)
    Renderiza el mundo, pero no conoce la implementación interna.

  • Controlador → coordina entradas y actualiza el modelo.

El objetivo es que entiendas que las decisiones técnicas impactan en:

  • Rendimiento
  • Correctitud
  • Escalabilidad
  • Claridad de diseño

🧪 Profesional desde el día uno

Este proyecto no es solo código.

Trabajaremos con:

  • ✅ Git y Pull Requests
  • ✅ Integración continua (CI)
  • ✅ Tests unitarios
  • ✅ Benchmarks de rendimiento
  • ✅ Revisión entre pares

Aprenderás a medir lo que haces.
A justificar tus decisiones.
A defender tu implementación.


🗓 Progresión del juego (y del conocimiento)

Durante el cuatrimestre el sistema evolucionará:

  1. Complejidad y memoria.
  2. Listas → Inventario.
  3. Pilas → Sistema de deshacer acciones.
  4. Colas → Eventos y turnos.
  5. Árboles → Habilidades.
  6. Grafos → Mapa y navegación.
  7. Hashing → Acceso eficiente a recursos.
  8. Estrategias → Decisiones algorítmicas.

Cada semana el mundo se vuelve más complejo.
Y vos también.


🧠 ¿Qué buscamos?

No buscamos solo que el programa compile.

Buscamos que puedas responder:

  • ¿Cuál es la complejidad de esta operación?
  • ¿Por qué elegí esta estructura y no otra?
  • ¿Cómo afecta esto al rendimiento del sistema?
  • ¿Es seguro respecto a memoria?

Cuando puedas contestar eso con confianza,
habrás dado un salto enorme como ingeniero/a.


🚀 ¿Por qué este proyecto?

Porque aprender estructuras de datos de forma aislada se queda corto.

Pero ver cómo una mala implementación:

  • baja los FPS,
  • rompe el inventario,
  • hace que el NPC no encuentre camino,
  • o duplica recursos,

te enseña algo que ningún slide puede lograr.


⚠ Reglas fundamentales

  • No usar STL para las estructuras que deban implementarse en la materia.
  • Código modular, claro y documentado.
  • Tests obligatorios.
  • Benchmarks mínimos requeridos.
  • Respeto por la arquitectura MVC.

🌌 Mensaje final

Este proyecto está diseñado para que te desafíe.

Al principio parecerá complejo.
Luego empezará a tener sentido.
Y al final, vas a mirar código de otra manera.

Cyberpunk Córdoba 2077 no es solo un juego.

Es el entorno donde vas a empezar a pensar como ingeniero/a.

La ciudad espera.
Tu algoritmo también.


📐 Compilación y build

Este proyecto utiliza CMake como sistema de build.

🔧 Requisitos

  • Compilador compatible con C++17 (recomendado: GCC ≥ 11 / Clang ≥ 14)
  • CMake ≥ 3.16
  • raylib (incluida / provista por el template del curso)
  • Git

🛠 Instrucciones de compilación

git clone <repository-url>
cd cyberpunk-cordoba-2077
mkdir build
cd build
cmake ..
cmake --build .

Para ejecutar:

./cyberpunk2077

🧪 Modo Debug

Para compilar en modo debug:

cmake -DCMAKE_BUILD_TYPE=Debug ..

Recomendamos fuertemente compilar con:

  • Address Sanitizer
  • Undefined Behavior Sanitizer

Ejemplo:

cmake -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -g" ..

Porque en 2077, los memory bugs se pagan caro.


🧪 Cómo contribuir

Este repositorio sigue un flujo de trabajo profesional.

🔀 Modelo de ramas

  • main → versión estable
  • dev → rama de integración
  • Ramas por feature → feature/<nombre>

Ejemplo:

git checkout -b feature/inventory-list

📌 Pull Requests

Cada aporte debe:

  • Compilar correctamente

  • Pasar tests

  • Respetar MVC

  • Incluir una breve explicación técnica:

    • Complejidad
    • Consideraciones de memoria
    • Decisión de diseño

Formato sugerido para títulos:

[UNIT X] Implement Linked List Inventory

🧪 Testing

Toda estructura implementada debe incluir tests de:

  • Construcción / destrucción
  • Insert / Remove
  • Casos borde
  • Correctitud de memoria (sin leaks)

Si solo funciona en el “happy path”, no funciona.


🏆 Badges y Leaderboard

Este proyecto incluye un leaderboard de rendimiento y calidad.

Podés ganar badges por:

  • ⚡ Implementación más rápida (benchmark medido)
  • 🧠 Mejor justificación de complejidad
  • 🧼 Arquitectura más limpia
  • 🔒 Cero memory leaks
  • 🔥 Optimización destacada

Las mejores implementaciones se mostrarán en clase.

No se trata de competir por ego. Se trata de aprender a construir sistemas excelentes.


📂 Estructura del repositorio

El proyecto está organizado siguiendo principios de separación de responsabilidades y escalabilidad.


cyberpunk-cordoba-2077/
│
├── CMakeLists.txt
├── README.md
│
├── assets/              # Recursos gráficos y sonidos (solo lectura)
│
├── include/             # Headers públicos
│   ├── model/
│   ├── controller/
│   └── common/
│
├── src/                 # Implementaciones
│   ├── model/
│   ├── controller/
│   └── main.cpp
│
├── tests/               # Tests unitarios
│   ├── test_list.cpp
│   ├── test_stack.cpp
│   └── ...
│
├── benchmarks/          # Medición de rendimiento
│
└── build/               # Carpeta generada (no versionar)


🧠 Convenciones importantes

📦 model/

Aquí viven las estructuras de datos y la lógica algorítmica.
No deben depender de la vista.

🎮 controller/

Coordina entradas del usuario y actualiza el modelo.

🖼 assets/

Contiene recursos gráficos.
No modificar sin autorización.

🧪 tests/

Cada estructura debe tener su archivo de test correspondiente.

🚫 build/

Nunca se versiona.
Debe estar en el .gitignore.


📐 Filosofía de diseño

Este proyecto está organizado para que aprendas:

  • Separación de responsabilidades
  • Diseño modular
  • Bajo acoplamiento
  • Alta cohesión
  • Escalabilidad futura

Si tu estructura depende de raylib directamente, está mal diseñada. Si el modelo conoce la vista, está mal diseñado. Si no podés testear algo en aislamiento, está mal diseñado.


🎯 Objetivo arquitectónico

Que puedas explicar:

  • Qué capa hace qué.
  • Qué depende de qué.
  • Qué pasaría si cambiamos la vista.
  • Qué pasaría si cambiamos la estructura interna.

Porque en ingeniería real, el diseño importa tanto como el algoritmo.


🌌 Recordatorio final

En 2077, los sistemas no perdonan la ineficiencia. Y el software real tampoco.

Compilá con cuidado. Medí todo. Pensá antes de codear.

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C++ 50.9%
  • CMake 49.1%