Skip to content

Arquitetura: Detalhamento dos Módulos

Eryck Kawa edited this page May 1, 2024 · 5 revisions

Detalhamento dos módulos

Diagramas de classes

View

ClassView

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.

Controller

ClassControler

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.

Model

ClassModel

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.

Diagramas de sequência

View

SequenceView

  • 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.).

Controller

SequenceController

  • 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.

Model

SequenceModel

  • 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.