Mettez en pratique vos nouvelles connaissances des motifs de conception en créant un prototype de jeu simple ! Ce devoir vous aidera à pratiquer à la fois les motifs architecturaux (héritage ou composition) et le système de communication pub/sub que vous avez appris dans la leçon.
Créez une représentation simple d’un jeu qui démontre les motifs de conception de cette leçon. Votre jeu doit être fonctionnel mais ne nécessite pas de graphismes complexes – concentrez-vous sur l’architecture sous-jacente et les motifs de communication.
Choisissez votre motif d’architecture :
- Option A : Utilisez l’héritage basé sur les classes (comme l’exemple
GameObject→Movable→Hero) - Option B : Utilisez la composition (comme l’approche par fonction fabrique avec comportements mixtes)
Implémentez la communication :
- Incluez une classe
EventEmitterpour la messagerie pub/sub - Mettez en place au moins 2-3 types de messages différents (comme
PLAYER_MOVE,ENEMY_SPAWN,SCORE_UPDATE) - Connectez les entrées utilisateur (clavier/souris) aux événements du jeu via le système d’événements
Éléments du jeu à inclure :
- Au moins un personnage contrôlé par le joueur
- Au moins un autre objet du jeu (ennemi, objet à collecter ou élément environnemental)
- Interaction de base entre les objets (collision, collecte ou communication)
Jeux simples à considérer :
- Jeu de serpent – Les segments du serpent suivent la tête, la nourriture apparaît aléatoirement
- Variation de Pong – La raquette répond aux entrées, la balle rebondit sur les murs
- Jeu de collecte – Le joueur se déplace pour collecter des objets tout en évitant les obstacles
- Bases du Tower Defense – Les tours détectent et tirent sur les ennemis en mouvement
// Exemple de structure de départ
const Messages = {
// Définissez vos messages de jeu ici
};
class EventEmitter {
// Votre implémentation du système d'événements
}
// Choisissez soit l'approche basée sur les classes OU la composition
// Exemple basé sur les classes :
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }
// OU exemple de composition :
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }Vérifiez que votre code fonctionne en :
- Testant que les objets se déplacent ou changent lorsque les événements sont déclenchés
- Confirmant que plusieurs objets peuvent répondre au même événement
- Vérifiant que vous pouvez ajouter de nouveaux comportements sans modifier le code existant
- Assurant que les entrées clavier/souris déclenchent correctement les événements de jeu
Votre soumission doit inclure :
- Fichier(s) JavaScript avec votre implémentation de jeu
- Fichier HTML pour exécuter et tester votre jeu (peut être simple)
- Commentaires expliquant quel motif vous avez choisi et pourquoi
- Brève documentation de vos types de messages et leur fonction
| Critère | Exemplaire (3 points) | Adéquat (2 points) | À améliorer (1 point) |
|---|---|---|---|
| Motif d’architecture | Implémente correctement soit l’héritage SOIT la composition avec une hiérarchie claire des classes/objets | Utilise le motif choisi avec des problèmes ou incohérences mineurs | Tente d’utiliser le motif mais l’implémentation a des problèmes importants |
| Implémentation Pub/Sub | EventEmitter fonctionne correctement avec plusieurs types de messages et un flux d’événements approprié | Système pub/sub basique fonctionne avec une certaine gestion d’événements | Système d’événements présent mais ne fonctionne pas de façon fiable |
| Fonctionnalité du jeu | Trois éléments interactifs ou plus qui communiquent via les événements | Deux éléments interactifs avec communication événementielle basique | Un élément répond aux événements ou interaction basique |
| Qualité du code | Code propre, bien commenté, logique et moderne en JavaScript | Code généralement bien organisé avec des commentaires adéquats | Code fonctionnel mais manque d’organisation ou de commentaires clairs |
Points bonus :
- Mécaniques de jeu créatives qui mettent en valeur des usages intéressants des motifs
- Méthodes d’entrée multiples (événements clavier ET souris)
- Architecture évolutive facile à étendre avec de nouvelles fonctionnalités
Avertissement :
Ce document a été traduit à l’aide du service de traduction automatique Co-op Translator. Bien que nous nous efforcions d’assurer l’exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source faisant foi. Pour des informations critiques, une traduction professionnelle réalisée par un humain est recommandée. Nous ne saurions être tenus responsables des malentendus ou interprétations erronées résultant de l’utilisation de cette traduction.