Skip to content

Proyecto de Metodologías de Diseño y Programación CC3002-1 - Primavera 2024, consiste en una versión simplificada de Final Fantasy Tactics (no tiene interfaz gráfica)

Notifications You must be signed in to change notification settings

Felipedino/scala-game-memes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Descripción

El proyecto a realizar será crear una versión simplificada de Final Fantasy Tactics. A grandes rasgos, el juego consta de dos grupos de unidades, controlables por un usuario (Player), que interactúan entre ellos de diversas maneras en un mapa donde estas unidades pueden desplazarse.

Decisiones de diseño

  1. Separación clara de responsabilidades: Se optó por una arquitectura modular que organiza el código en múltiples paquetes, como model.actions, model.characters, model.items, y model.combatsystem. Esto facilita la extensibilidad del proyecto, permitiendo agregar nuevos personajes, acciones, y elementos sin afectar otras partes del código.

  2. Uso de clases y traits: El diseño se basó en un enfoque orientado a objetos, usando clases abstractas y traits para definir el comportamiento y las propiedades comunes entre los diferentes tipos de personajes, armas, acciones y pociones. Esto permite que los objetos del juego compartan funcionalidades, al mismo tiempo que pueden ser especializados según el tipo de entidad (por ejemplo, personajes mágicos o no mágicos, armas mágicas o convencionales).

  3. Flexibilidad en la creación de nuevas acciones y personajes: Se utilizó la herencia y el polimorfismo para facilitar la creación de nuevos personajes y acciones. Por ejemplo, las clases como AbsAction y AbsMagicAction proporcionan una estructura común para las acciones, mientras que clases específicas como Heal o Meteor extienden estas funcionalidades.

Organización del código

  • Paquete model.actions: Contiene las diferentes acciones que pueden realizar los personajes, como ataques, movimiento, y acciones mágicas. Incluye una clase abstracta AbsAction como base para las acciones, junto con implementaciones específicas como Heal, Attack, Meteor, etc. Hay un trait Action que define el comportamiento común de las acciones y su respectiva clase abstracta AbsAction que implementa este trait. Las acciones específicas como Heal, Attack, Meteor, etc. extienden de AbsAction. Luego se divide en tres packages model.actions.magic, model.actions.Unique y model.actions.UsableAction, se divide por categoria, los Unique utilizarán de forma distinta el método toJson. En los demás funcionan prácticamente igual entre ellos, sólo cambia su categoría.

  • Paquete model.characters: Maneja la representación de los personajes en el juego. Las clases como AbsCharacter definen personajes genéricos, mientras que Knight, Thief, y Archer son personajes específicos. Aquí se tiene un diseño parecido, un trait que incluye a Enemy y a Characters, otro trait solo para Character con su respectiva clase abstracta. Dentro de los 3 packages se encuentra la implementación de clases concretas con sus traits correspondientes.

  • Paquete model.items: Contiene la estructura de los objetos del juego, como armas y pociones. Por ejemplo, las clases Sword, HealthPotion, y MagicPowerPotion permiten a los personajes equipar armas o usar pociones.

  • Paquete model.combatsystem: Implementa el sistema de combate, controlando el flujo de turnos y las barras de acción de los personajes. El objeto TurnScheduler gestiona el avance de los turnos y la organización de las acciones.

  • Paquete model.gamemap: Define el mapa del juego y cómo los personajes interactúan con los paneles (espacios en el mapa), a través de clases como Panels y PanelsGrid.

Patrones de diseño utilizados

  1. Factory Method: El proyecto sigue el patrón de fábrica en la creación de personajes y acciones, donde clases abstractas como AbsAction y AbsCharacter definen una interfaz común, pero las clases concretas (Knight, Heal, Sword, etc.) proporcionan implementaciones específicas.

  2. Polimorfismo y Herencia: Utilizado en varios lugares, como en la creación de personajes (AbsCharacter -> Knight, Thief, BlackMage) y en las acciones (AbsAction -> Attack, Move, Heal). Esto permite definir un comportamiento común, pero con la flexibilidad de modificar las acciones o atributos de manera específica según el tipo de personaje o acción.

About

Proyecto de Metodologías de Diseño y Programación CC3002-1 - Primavera 2024, consiste en una versión simplificada de Final Fantasy Tactics (no tiene interfaz gráfica)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages