Level 4Pong

Skrevet av: Geir Arne Hjelle

Kurs: Scratch
Tema: Blokkbasert, Spill
Fag: Matematikk, Programmering, Kunst og håndverk
Klassetrinn: 5.-7. klasse, 8.-10. klasse

Introduksjon

Pong er et av de aller første dataspillene som ble laget, og det første dataspillet som ble en kommersiell suksess. Selve spillet er en forenklet variant av tennis hvor to spillere slår en ball frem og tilbake. Hvis en av spillerne ikke klarer å returnere ballen får den andre spilleren poeng.

Illustrasjon av et ferdig poing spill

Oversikt over prosjektet

Mesteparten av kodingen av Pong skal du gjøre på egen hånd. Men vi vil gi litt tips underveis. Spesielt vil vi se litt på hvordan vi kontrollerer en ballfigur mens den spretter rundt på skjermen. I resten av leksjonen vil du finne følgende:

checkPlan

Steg 1: En sprettende ball

Når man lager nye programmer og spill er det alltid lurt å begynne med en enkel versjon som gjør litt av det det ferdige programmet skal gjøre. Da kan du begynne og teste at programmet virker som det skal nesten med en gang.

I vår enkle versjon skal vi bare få en ball til å sprette over skjermen. Ingen spillere, ingen poeng, ingenting annet enn en sprettende ball!

checkSjekkliste

  • når jeg mottar [Ny ball v]
    sett [hastighet v] til [7]
    gå til x: (0) y: (0)
    pek i retning (tilfeldig tall fra (1) til (360))
    gjenta for alltid
        gå (hastighet) steg
        sprett tilbake ved kanten
    slutt
    

    Les koden nøye mens du legger den til på ball-figuren. Pass på at du skjønner hva hver enkelt kloss gjør, fordi denne koden skal du endre selv etterhvert.

En bedre måte å starte programmet på

Vi har laget meldingen Ny ball siden vi tenker at i selve spillet vil vi at ballen begynner fra midten av skjermen etter hver gang en spiller har gjort poeng. I denne enkle versjonen kan vi sende meldingen Ny ball hver gang det grønne flagget klikkes, for å enklere starte spillet.

  • Legg denne enkle kodesnutten til på scenen:

    når @greenFlag klikkes
    send melding [Ny ball v]
    

Steg 2: Litt mer kontroll på ballen

Klossen sprett tilbake ved kanten er veldig enkel å bruke, men dessverre gir den oss ikke så mye kontroll. For eksempel kan vi ikke bruke den om vi vil at ballen skal sprette andre steder enn ved kanten (for eksempel i en racket). Den er også vanskelig å bruke om vi vil at andre ting skal skje når ballen spretter, kanskje vi vil spille en lyd, endring på hastigheten eller endre litt i retningen.

Vi vil bruke sansning-klosser for å bedre kontrollere hvordan ballen spretter. Da kan vi oppdage når ballen berører andre figurer (som for eksempel racketene til spillerene), eller når den berører spesielle farger.

checkSjekkliste

  • Bilde av bakgrunnen til Pong spillet
  • gjenta for alltid
    slutt
    

    med

    gjenta til <berører fargen [#0000FF]>
    slutt
    send melding [Poeng v]
    
  • sprett tilbake ved kanten
    

    med for eksempel

    hvis <berører fargen [#9999FF]>
        pek i retning ((180) - (retning))
        trommeslag (15 v) som varer (0.01) takter
    slutt
    

    Skjønner du hva tallet 180 gjør? Prøv å tenk på hvordan en ball spretter i en vegg, og hvordan retningen på ballen endrer seg.

Steg 3: Racketer til spillerene

Nå som ballen spretter fint kan vi lage racketene som spillerene skal styre. Disse vil være veldig like hverandre, slik at vi kan først lage den ene racketen og deretter kopiere denne.

checkSjekkliste

  • hvis <<tast [w v] trykket> og <(y-posisjon) < [150]>>
    slutt
    

Steg 4: Videreutvikling av spillet

Vi har nå laget en enkel versjon av et av de første dataspillene i historien. Men det er mange muligheter for videreutvikling av spillet.

Du står helt fritt i hvordan du vil jobbe videre med spillet ditt, men her er noen ideer som kan gjøre spillet enda morsommere å spille:

checkIdeer til videreutvikling

Lisens: CC BY-SA 4.0

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!