You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/pt-PT/6-space-game/1-introduction/assignment.md

93 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 `EventEmitter` para 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
```javascript
// 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:**
1. **Ficheiro(s) JavaScript** com a implementação do seu jogo
2. **Ficheiro HTML** para executar e testar o seu jogo (pode ser simples)
3. **Comentários** explicando qual padrão escolheu e porquê
4. **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
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/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.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->