5.2 KiB
Simular um Jogo: Aplicar Padrões de Design
Visão Geral do Trabalho
Coloque o seu novo conhecimento sobre padrões de design em prática criando um protótipo simples de jogo! Este trabalho ajudará a praticar tanto padrões arquitetónicos (herança ou composição) como o sistema de comunicação pub/sub que aprendeu na lição.
Instruções
Crie uma representação simples de um jogo que demonstre os padrões de design desta lição. O seu jogo deve ser funcional mas não necessita de gráficos complexos – foque-se na arquitetura subjacente e nos padrões de comunicação.
Requisitos
Escolha o seu Padrão de Arquitetura:
- Opção A: Use herança baseada em classes (como o exemplo
GameObject→Movable→Hero) - Opção B: Use composição (como a abordagem da função fábrica com comportamentos mistos)
Implemente Comunicação:
- Inclua uma classe
EventEmitterpara mensagens pub/sub - Configure pelo menos 2-3 tipos de mensagens diferentes (como
PLAYER_MOVE,ENEMY_SPAWN,SCORE_UPDATE) - Ligue a entrada do utilizador (teclado/ratão) aos eventos do jogo através do sistema de eventos
Elementos do Jogo a Incluir:
- Pelo menos uma personagem controlada pelo jogador
- Pelo menos outro objeto de jogo (inimigo, colecionável ou elemento ambiental)
- Interação básica entre objetos (colisão, recolha ou comunicação)
Sugestões de Jogos
Jogos Simples a Considerar:
- Jogo da Cobra – Segmentos da cobra seguem a cabeça, comida aparece aleatoriamente
- Variação de Pong – Raquete responde a entrada, bola rebate nas paredes
- Jogo de Colecionador – Jogador move-se colecionando itens enquanto evita obstáculos
- Bases de Tower Defense – Torres detectam e disparam contra inimigos em movimento
Diretrizes para Estrutura do Código
// Estrutura inicial de exemplo
const Messages = {
// Defina as suas mensagens de jogo aqui
};
class EventEmitter {
// A sua implementação do sistema de eventos
}
// Escolha entre abordagem baseada em classe OU composição
// Exemplo baseado em classe:
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }
// OU Exemplo de composição:
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }
Testar a Sua Implementação
Verifique que o seu código funciona através de:
- Testar se os objetos se movem ou mudam quando os eventos são disparados
- Confirmar que múltiplos objetos podem responder ao mesmo evento
- Verificar que pode adicionar novos comportamentos sem modificar o código existente
- Garantir que a entrada de teclado/ratão dispara corretamente os eventos do jogo
Diretrizes de Submissão
A sua submissão deve incluir:
- Ficheiro(s) JavaScript com a implementação do seu jogo
- Ficheiro HTML para executar e testar o seu jogo (pode ser simples)
- Comentários explicando qual padrão escolheu e porquê
- Documentação breve dos seus tipos de mensagem e o que fazem
Critérios de Avaliação
| Critério | Exemplar (3 pontos) | Adequado (2 pontos) | Precisa Melhorar (1 ponto) |
|---|---|---|---|
| Padrão de Arquitetura | Implementa corretamente herança OU composição com hierarquia clara de classes/objetos | Usa o padrão escolhido com pequenas falhas ou inconsistências | Tenta usar o padrão mas a implementação tem problemas significativos |
| Implementação Pub/Sub | EventEmitter funciona corretamente com múltiplos tipos de mensagens e fluxo adequado de eventos | Sistema pub/sub básico funcionando com alguma gestão de eventos | Sistema de eventos presente mas não funciona de forma fiável |
| Funcionalidade do Jogo | Três ou mais elementos interativos que comunicam via eventos | Dois elementos interativos com comunicação básica de eventos | Um elemento responde a eventos ou interação básica |
| Qualidade do Código | Código limpo, bem comentado, com organização lógica e JavaScript moderno | Código geralmente organizado com comentários adequados | Código funciona mas carece de organização ou comentários claros |
Pontos Bónus:
- Mecânicas de jogo criativas que mostrem usos interessantes dos padrões
- Múltiplos métodos de entrada (teclado E ratão)
- Arquitetura escalável que seja fácil de expandir com novas funcionalidades
Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução automática Co-op Translator. Embora nos esforcemos para garantir a precisão, por favor tenha em conta que as traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autorizada. Para informação crítica, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações erradas decorrentes do uso desta tradução.