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

5.1 KiB

Lag en Spillprototype: Bruk Designmønstre

Oppgaveoversikt

Bruk din nyervervede kunnskap om designmønstre til å lage en enkel spillprototype! Denne oppgaven hjelper deg med å øve på både arkitektoniske mønstre (arv eller komposisjon) og pub/sub-kommunikasjonssystemet du lærte om i leksjonen.

Instruksjoner

Lag en enkel spillrepresentasjon som demonstrerer designmønstrene fra denne leksjonen. Spillet ditt skal være funksjonelt, men trenger ikke komplekse grafikk fokuser på den underliggende arkitekturen og kommunikasjonsmønstrene.

Krav

Velg ditt arkitekturmønster:

  • Alternativ A: Bruk klassebasert arv (som eksempelet GameObjectMovableHero)
  • Alternativ B: Bruk komposisjon (som fabrikkfunksjonstilnærmingen med blandede oppføringer)

Implementer kommunikasjon:

  • Inkluder en EventEmitter-klasse for pub/sub-meldingssystem
  • Sett opp minst 2-3 forskjellige meldingstyper (som PLAYER_MOVE, ENEMY_SPAWN, SCORE_UPDATE)
  • Koble brukerinput (tastatur/mus) til spillhendelser gjennom hendelsessystemet

Spillelementer som skal inkluderes:

  • Minst én spillerstyrt karakter
  • Minst én annen spillelement (fiende, samlegjenstand eller miljøelement)
  • Grunnleggende interaksjon mellom objekter (kollisjon, samling eller kommunikasjon)

Forslag til spillideer

Enkle spill å vurdere:

  • Snake-spill Slangesegmenter følger hodet, mat dukker opp tilfeldig
  • Pong-variant Racketen reagerer på input, ballen spretter mot veggene
  • Samlespill Spilleren beveger seg rundt og samler gjenstander mens den unngår hindringer
  • Tower Defense-grunnleggende Tårn oppdager og skyter på bevegelige fiender

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 */ }

Testing av implementeringen

Bekreft at koden din fungerer ved å:

  • Teste at objekter beveger seg eller endres når hendelser utløses
  • Bekrefte at flere objekter kan reagere på samme hendelse
  • Sjekke at du kan legge til nye oppføringer uten å endre eksisterende kode
  • Sikre at tastatur/mus-input utløser spillhendelser riktig

Retningslinjer for innlevering

Din innlevering bør inkludere:

  1. JavaScript-fil(er) med din spillimplementering
  2. HTML-fil for å kjøre og teste spillet ditt (kan være enkel)
  3. Kommentarer som forklarer hvilket mønster du valgte og hvorfor
  4. Kort dokumentasjon av meldingstypene og hva de gjør

Vurderingskriterier

Kriterier Fremragende (3 poeng) Tilfredsstillende (2 poeng) Trenger forbedring (1 poeng)
Arkitekturmønster Implementerer korrekt enten arv ELLER komposisjon med klar klasse-/objekthierarki Bruker valgt mønster med mindre problemer eller inkonsekvenser Forsøker å bruke mønster, men implementeringen har betydelige problemer
Pub/Sub-implementering EventEmitter fungerer korrekt med flere meldingstyper og riktig hendelsesflyt Grunnleggende pub/sub-system fungerer med noe hendelseshåndtering Hendelsessystemet er til stede, men fungerer ikke pålitelig
Spillfunksjonalitet Tre eller flere interaktive elementer som kommuniserer gjennom hendelser To interaktive elementer med grunnleggende hendelseskommunikasjon Ett element reagerer på hendelser eller grunnleggende interaksjon
Kodekvalitet Ren, godt kommentert kode med logisk organisering og moderne JavaScript Generelt godt organisert kode med tilstrekkelige kommentarer Koden fungerer, men mangler organisering eller tydelig kommentering

Ekstrapoeng:

  • Kreative spillmekanikker som viser interessante bruk av mønstrene
  • Flere inputmetoder (tastatur OG musehendelser)
  • Skalerbar arkitektur som er enkel å utvide med nye funksjoner

Ansvarsfraskrivelse:
Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi tilstreber nøyaktighet, vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på dets opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.