Lunar Lander

Ekspert
Scratch

Introduksjon

Lunar Lander ble opprinnelig utviklet på slutten av 1970-tallet. Målet med spillet er å lande et romskip på månen. Selve kontrollen av romskipet ble videreført i spillet Asteroids som ble utgitt året etter.

Oversikt over prosjektet

Mesteparten av kodingen av Lunar Lander skal du gjøre selv. I Lunar Lander vil vi spesielt bruke litt tid på gjøre den fysiske modelleringen av romskipet ganske realistisk.

Plan

Steg 1: Et flyvende romskip

Vi skal nå programmere et romskip som flyr rundt på skjermen. For å ha kontroll på bevegelsen vil vi bruke to variable, fartX og fartY, som beskriver hvor raskt romskipet beveger seg henholdsvis sidelengs og opp-og-ned. Ved å bruke begge disse samtidig vil romskipet kunne bevege seg i hvilken som helst retning.

Utfordringen i programmeringen av spillet er at romskipet kan rotere uavhengig av hvilken retning det faktisk flyr. Når spilleren trykker pil-opp for å bruke motoren vil vi gi romskipet ekstra fart i den retningen det peker. Det betyr at vi må fordele farten i romskipets retning i hvor mye sidelengs fart det får, og hvor mye av farten som går opp eller ned.

Dette virker umiddelbart kanskje litt vanskelig, men det er akkurat dette de matematiske funksjonene sinus og cosinus gjør. I funksjonen nedenfor forteller for eksempel cosinus(vinkel) oss hvor lang den vannrette streken er i forhold til den skrå streken.

Sjekkliste

  • sett størrelse til (20) %
    

    rett etter at det grønne flagget er klikket.

  • når jeg mottar [Nytt spill v]
    gå til x: (0) y: (175)
    pek i retning (90 v)
    sett [fartX v] til [0]
    sett [fartY v] til [0]
    for alltid
        endre [fartY v] med (-0.01)
        endre x med (fartX)
        endre y med (fartY)
    slutt
    

    Om du prøver spillet ditt nå skal romskipet falle stadig raskere nedover skjermen. Prøv å endre litt i klossen

    endre [fartY v] med (-0.01)
    

    Det er denne som modellerer tyngdekraften. Om du forandrer verdien her vil romskipet falle raskere eller tregere, eller det kan til og med falle oppover om du lar tyngdekraften være positiv.

  • Legg til to hvis-blokker inne i for alltid-løkken hvor du vender romskipet for eksempel 5 grader mot høyre eller venstre avhengig av hvilken piltast som trykkes.

  • hvis <tast [pil opp v] trykket?>
        endre [fartX v] med ((0) - ([cos v] av (retning)))
        endre [fartY v] med ([sin v] av (retning))
    slutt
    

    Du finner både sinus og cosinus-funksjonene som valg på klossen

    ([kvadratrot v] av (9))
    

    Vi må bruke ((0) - ([cos v] av (retning))) i stedet for ([cos v] av (retning)) fordi retning i Scratch måles motsatt vei av hvordan man måler vinkler i matematikk.

  • endre [fartX v] med ((0.3) * ((0) - ([cos v] av (retning))))
    endre [fartY v] med ((0.3) * ([sin v] av (retning)))
    

    Pass på at du justerer begge klossene med det samme tallet.

Steg 2: Vi ankommer månen

Nå skal vi legge til et månelandskap hvor spilleren skal prøve å lande.

Sjekkliste

Steg 3: Klar for landing

Vi vil til slutt sjekke hvor og hvordan romskipet landet.

Sjekkliste

  • 1: Romskipet landet utenfor landingsplassen (kræsjet).

    2: Romskipet landet på landingsplassen, men landet enten på skrå (eller opp-ned) eller for raskt.

    3: Romskipet landet perfekt på landingsplassen.

    Lag et nytt skript på romskipet som starter når det mottar meldingen Sjekk landing. Under denne klossen må du bruke hvis- og hvis ellers-klosser som tester for de tre tilfellene. Du kan for eksempel si at landingen er perfekt dersom romskipet lander på landingsplassen, fartY er større enn -1.5 og retning er mellom 80 og 100.

Steg 4: Videreutvikling av spillet

Du har nå laget en enkel variant av Lunar Lander. Men prøv å gjøre spillet morsommere ved å videreutvikle det. Du bestemmer selv hvordan du vil jobbe videre, men nedenfor er noen ideer som kanskje kan være til inspirasjon?

Ideer til videreutvikling

Forbedre denne siden

Funnet en feil? Kunne noe vært bedre? Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!

Rapporter et problemVis koden og fiks selv