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/da/6-space-game/1-introduction/assignment.md

5.2 KiB

Mock op et spil: Anvend designmønstre

Opgaveoversigt

Brug din nyvundne viden om designmønstre til at lave en simpel spilprototype! Denne opgave vil hjælpe dig med at øve både arkitektoniske mønstre (arv eller komposition) og det pub/sub-kommunikationssystem, du lærte om i lektionen.

Instruktioner

Lav en simpel spilrepræsentation, der demonstrerer designmønstrene fra denne lektion. Dit spil skal være funktionelt, men behøver ikke komplekse grafik \u2013 fokusér på den underliggende arkitektur og kommunikationsmønstre.

Krav

Vælg dit arkitekturmønster:

  • Mulighed A: Brug klassebaseret arv (som eksemplet GameObjectMovableHero)
  • Mulighed B: Brug komposition (som fabriksfunktionstilgangen med blandede adfærdsmønstre)

Implementér kommunikation:

  • Inkluder en EventEmitter-klasse til pub/sub-beskeder
  • Opsæt mindst 2-3 forskellige beskedtyper (som PLAYER_MOVE, ENEMY_SPAWN, SCORE_UPDATE)
  • Forbind brugerinput (tastatur/mus) til spilbegivenheder gennem begivenhedssystemet

Spilelementer, der skal inkluderes:

  • Mindst én spillerstyret karakter
  • Mindst én anden spilobjekt (fjende, samlbar genstand eller miljøelement)
  • Grundlæggende interaktion mellem objekter (kollision, indsamling eller kommunikation)

Forslag til spilidéer

Enkle spil at overveje:

  • Slangespil \u2013 Slangesegmenter følger hovedet, mad spawner tilfældigt
  • Pong-variation \u2013 Paddel reagerer på input, bolden hopper mod væggene
  • Samlerspil \u2013 Spilleren bevæger sig rundt og samler genstande, mens han undgår forhindringer
  • Grundlæggende Tower Defense \u2013 Tårne opdager og skyder mod bevægelige fjender

Retningslinjer for kodens struktur

// Example starting structure
const Messages = {
  // Define your game messages here
};

class EventEmitter {
  // Your event system implementation
}

// Choose either class-based OR composition approach
// Class-based example:
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }

// OR Composition example:
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }

Test din implementering

Bekræft, at din kode fungerer ved:

  • Test af, at objekter bevæger sig eller ændrer sig, når begivenheder udløses
  • Bekræft at flere objekter kan reagere på den samme begivenhed
  • Kontrollér at du kan tilføje nye adfærdsmønstre uden at ændre eksisterende kode
  • Sikre at tastatur/mus-input korrekt udløser spilbegivenheder

Retningslinjer for aflevering

Din aflevering skal inkludere:

  1. JavaScript-fil(er) med din spilimplementering
  2. HTML-fil til at køre og teste dit spil (kan være simpel)
  3. Kommentarer der forklarer, hvilket mønster du valgte og hvorfor
  4. Kort dokumentation af dine beskedtyper og hvad de gør

Bedømmelseskriterier

Kriterier Fremragende (3 point) Tilstrækkelig (2 point) Kræver forbedring (1 point)
Arkitekturmønster Implementerer korrekt enten arv ELLER komposition med klar klasse-/objekthierarki Bruger det valgte mønster med mindre problemer eller inkonsistenser Forsøger at bruge mønsteret, men implementeringen har betydelige problemer
Pub/Sub-implementering EventEmitter fungerer korrekt med flere beskedtyper og korrekt begivenhedsflow Grundlæggende pub/sub-system fungerer med noget begivenhedshåndtering Begivenhedssystemet er til stede, men fungerer ikke pålideligt
Spilfunktionalitet Tre eller flere interaktive elementer, der kommunikerer gennem begivenheder To interaktive elementer med grundlæggende begivenhedskommunikation Ét element reagerer på begivenheder eller grundlæggende interaktion
Kodekvalitet Ren, velkommenteret kode med logisk organisering og moderne JavaScript Generelt velorganiseret kode med tilstrækkelige kommentarer Koden fungerer, men mangler organisering eller klare kommentarer

Bonuspoint:

  • Kreative spilmekanikker der viser interessante anvendelser af mønstrene
  • Flere inputmetoder (tastatur OG musebegivenheder)
  • Skalerbar arkitektur der ville være nem at udvide med nye funktioner

Ansvarsfraskrivelse:
Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.