-
Notifications
You must be signed in to change notification settings - Fork 0
Arquitetura: Detalhamento dos Módulos
A interface IObserver
define um método update(data: Any)
, que será chamado pelo sujeito observado para notificar os observadores sobre mudanças.
A interface ISubject
define métodos para attach
, detach
, e notifyObservers
, estabelecendo as operações básicas para o padrão Observer.
A classe GameView
implementa a interface ISubject
, mantendo uma lista de observadores e usando métodos para adicionar, remover e notificar observadores.
O método changeState(data: Any)
é usado para mudar o estado do GameView
e acionar as notificações para observadores.
As classes HUD
, UIElement
, e Menu
implementam a interface IObserver
e têm o método update(data: Any)
, que é chamado quando o GameView
sofre uma mudança.
A relação entre GameView
e ISubject
indica que GameView
implementa o sujeito observado, enquanto a relação entre HUD
, UIElement
, Menu
e IObserver
indica que eles são observadores.
As relações entre GameView
e as classes concretas indicam que o GameView
contém esses elementos da interface que são observadores.
A classe GameController
é marcada como Singleton com um atributo estático _instance
para armazenar a única instância e um método estático get_instance()
para obtê-la.
O método get_instance()
é representado como público (+
), indicando que pode ser acessado para obter a instância do Singleton.
A relação entre GameController
e outros controladores é representada como composição, indicando que o GameController
gerencia vários controladores secundários.
A classe GameModel
tem uma relação de composição com Character
(porque a existência de jogadores é parte essencial do modelo) e com Level
(representando a composição de níveis).
Também tem uma relação de agregação com Inventory
, sugerindo que jogadores podem ter inventários, mas isso pode ser alterado ou recarregado sem afetar o estado do jogo de modo crítico.
A classe Character
tem uma relação de composição com Inventory
, pois cada personagem tem seu próprio inventário.
A classe Inventory
tem uma relação de composição com Item
, mostrando que o inventário contém uma lista de itens.
- O Usuário clica em um Botão na interface do jogo.
- O Botão envia um evento de clique para o ManipuladorEntrada.
- O ManipuladorEntrada envia uma mensagem ao ControladorJogo para notificar sobre a entrada do usuário.
- O ControladorJogo processa a entrada e envia uma mensagem para VisãoJogo para realizar a atualização visual.
- A VisãoJogo envia uma resposta visual ao Usuário, indicando que a ação foi processada (pode ser uma mudança na interface, animação, etc.).
- O ControladorJogo emite um comando ao ControladorPersonagem para que um jogador realize um ataque.
- O ControladorPersonagem interage com o ControladorCombate para realizar a ação de ataque.
- O ControladorCombate usa o ControladorFísica para aplicar os efeitos físicos do ataque, como calcular o dano e as reações dos objetos no jogo.
- O ControladorFísica informa ao ControladorJogo o resultado do combate, como a quantidade de dano causada ou outros efeitos físicos.
- O ControladorJogo notifica a VisãoJogo para que a tela seja atualizada com o resultado do combate.
- A VisãoJogo exibe a atualização ao usuário, mostrando os resultados do combate.
- O ModeloJogo adiciona um jogador (Personagem) ao jogo e um item ao nível (Nível).
- O jogador (Personagem) interage com o nível para coletar um item.
- O Inventário do jogador é atualizado para incluir o novo item.
- O ModeloJogo atualiza o inventário do jogador para refletir a coleta do item.