Descripción general de la arquitectura
Beast Card Clash está desarrollado en Godot 4.6 con GDScript como lenguaje principal. El código está organizado en torno a un pequeño conjunto de patrones de diseño bien definidos que mantienen la lógica del juego, la interfaz de usuario y los datos claramente separados. Esta página te ofrece una visión general del proyecto para que sepas dónde se encuentra cada elemento antes de profundizar en los sistemas individuales.
Estructura del proyecto
La estructura del proyecto sigue un enfoque por cercanía en el cual las escenas se organizan en carpetas junto a sus recursos y los recursos compartidos se separan. Este enfoque es más sencillo de mantener y es recomendado por Godot para proyectos medianos a grandes.
beast_card_clash/
├── addons/ # Plugins
│ ├── dialogue_manager/
│ └── vector_display_2d/
├── assets/
│ ├── battle/ # Escenario de batalla
│ ├── cards/ # Cartas
│ ├── character_selector/ # Selector de personajes
│ ├── dialogues/ # Archivos de diálogos
│ ├── elements/ # Elementos (íconos)
│ ├── fonts/ # Fuentes
│ ├── music/ # Banda sonora y efectos de sonido
│ ├── shaders/ # Shaders
│ ├── teams/ # Información sobre los equipos
│ └── ui/ # Start menu, tutorial, credits, back button
├── autoload/
├── tests/ # Elementos de prueba
├── .docs/ # Documentación a mano
├── project.godot
├── CONTRIBUTING.md
└── README.md
Herramientas
- Godot 4.6: Usamos Godot 4 lo más actualizado posible, aunque es probable que no se pueda migrar al 5.
- GDScript: Lenguaje principal para toda la lógica del juego. Te recomendamos seguirlo usando para cualquier adición.
- C#: Para addons que contienen C# y probablemente para procesamiento de datos en el futuro. Basado en .NET 8 o superior.
- GDShader: Efectos visuales varios para el juego. Todos en
assets/shaders/. - Dialogue Manager: Plugin externo de Nathan Hoad (
addons/dialogue_manager) elegido para los diálogos del juego.
Elecciones de diseño
Autoloads como singletons
Los autoloads de Godot son nodos que Godot instancia una sola vez y pone a disposición de todas las demás escenas por su nombre. Beast Card Clash los usa para exponer el estado global y los servicios sin que las escenas dependan unas de otras.
# Accesibles donde sea
var team := GameConstants.Teams.ADN
PlayerStats.skin = "andean"
SceneManager.change_to_scene("battle")
MusicManager.play_music("battle_theme")
Mira Autoloads y singletons para conocer la API completa de cada autoload.
Flujo de batalla
Las batallas se controlan con una máquina de estados de cinco pasos:
Start: Inicio de batallaLoop: Ciclo de turnos para los botsTurn: Turno del humanoReferee: Evaluación de las jugadas antes de acabar turnoEnd: Fin del juego
Cada una es una clase GDScript que extiende BattleState y a su vez BaseState. Un nodo BattleManager gestiona todos los estados.
Esto aisla la lógica de cada estado y lo permite extender de maneras más sencillas. Mira Máquina de estados de batalla para más detalles del sistema.
Uso de Resource
Los datos del juego se almacenan en recursos de Godot (Resource). Con los autoloads se pueden acceder a algunos. Esto mantiene un desacoplamiento más adecuado.
Actualizaciones de UI basadas en señales
Como es típico en Godot, las interfaces de usuario se basan en señales para enviarse información entre sí. Aunque debemos mejorar la forma en la que viaja la información, que actualmente es un poco enredada.
Estructura de las escenas
Gestionado con SceneManager, las escenas siguientes se conectan y fluyen entre sí:
flowchart
StartMenu([Menú de inicio]) --> CharacterSelector([Selector de personajes])
CharacterSelector --> Battle([Escena de batalla])
Battle --> StartMenu
- Menú de inicio: El punto de inicio.
- Selector de personajes: El jugador elige especie, color, equipo y nombre. Todo se escribe en
PlayerStats. - Escena de batalla: Con toda la lógica principal. Es la única parte más o menos completa del juego.
También hay otros menús como los créditos, tutorial o fin de juego (en Batalla).
Ver más
- Autoloads y singletons
- Batalla
- BattleManager
- Sistema de cartas
- Mecánicas (Enlace pendiente de actualización)
- Contribución