Wir nutzen Cookies, um das allgemeine Benutzerelebnis zu verbessern. Mit der Nutzung unseres Wikis stimmst du der Nutzung von Cookies zu.

Pong in Scratch

Bei einem simplen Pong-Spiel wird vom Spieler eine Platte gesteuert, die einen Ball auffangen muss, damit dieser nicht auf dem Boden landet. In diesem Tutorial erfährst du, wie du ein solches Spiel programmieren kannst.

Methode

Nach der in diesem Tutorial verwendeten Methode wird die Platte mit der Maus gesteuert (die Höhe der Platte bleibt jedoch stets erhalten). Zu Beginn hat man drei Leben; landet der Ball auf dem Boden, verliert man eines. Für jeden Aufprall auf der Platte gibt es 5 Punkte; alle 100 Punkte erreicht man ein neues Level. Insgesamt gibt es 10 Level.

Grafiken

Wir benötigen für alle zehn Level ein Hintergrundbild, damit das Spiel nicht so langweilig aussieht. Auch muss an den Ball und an die Platte gedacht werden.

Variablen

Für das Spiel verwenden wir folgende Variablen:

  • Level (am Anfang 1)
  • Punkte (am Anfang 0)
  • Leben (am Anfang 3)

Skripte

Bühne

Wir haben im Projekt zwei Figuren (Ball und Platte) sowie die Bühne. Der Bühne fügen wir folgendes Skript hinzu:

Wenn @greenFlag angeklickt
wechsle zu Bühnenbild [Level 1 v]
setze [Level v] auf [1]
setze [Punkte v] auf [0]
setze [Leben v] auf [3]

Nun brauchen wir ein Skript, das definiert, dass alle 100 Punkte das nächste Level kommen soll und damit auch das nächste Bühnenbild. Theoretisch könnte man das so lösen:

warte bis <(Punkte)=[100]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 2 v]
warte bis <(Punkte)=[200]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 3 v]
warte bis <(Punkte)=[300]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 4 v]
warte bis <(Punkte)=[400]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 5 v]
warte bis <(Punkte)=[500]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 6 v]
warte bis <(Punkte)=[600]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 7 v]
warte bis <(Punkte)=[700]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 8 v]
warte bis <(Punkte)=[800]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 9 v]
warte bis <(Punkte)=[900]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [Level 10 v]

Dieses Skript könnte man aber um einiges abkürzen, zum Beispiel so:

wiederhole fortlaufend
warte bis <((Punkte) mod (100))=[0]>//prüft, ob die Punktzahl durch 100 geteilt 0 ergibt
ändere [Level v] um (1)
wechsle zu Bühnenbild [nächstes Bühnenbild v]//wechselt zum nächsten Bühnenbild
ende

Außerdem wird das Spiel wird gestoppt, wenn der Spieler keine Leben mehr hat oder schon alle Level durchgespielt hat.

Wenn @greenFlag angeklickt::grey
wechsle zu Bühnenbild [Level 1 v]::grey
setze [Level v] auf [1]::grey
setze [Punkte v] auf [0]::grey
setze [Leben v] auf [3]::grey
wiederhole fortlaufend::grey
warte bis <((Punkte::grey) mod (100)::grey)=[0]::grey>::grey
ändere [Level v] um (1)::grey
wechsle zu Bühnenbild [nächstes Bühnenbild v]::grey
falls <<(Punkte)=[1000]> oder <(Leben)=[0]>> dann
stoppe [alles v]
ende
ende

Super, die Skripte des Bühnenbilds wären damit auch schon fertig!

Platte

Nun kommen wir zu den Skripten der Platte. Hier brauchen wir auch nicht viele Blöcke, denn die Platte hat ja nicht viele Aufgaben.

Wenn @greenFlag angeklickt
setze y auf (-150)//positioniert die Platte nach unten
wiederhole fortlaufend
setze x auf (Maus x-Position)//lässt die Platte nach links und rechts dem Mauszeiger folgen
ende

Ball

Okay, jetzt wird es ein bisschen komplizierter, denn wir kommen nun zu dem Ball. Zuerst bestimmen wir die Anfangsposition des Balls. Auch muss eine (Zufalls-)Richtung bestimmt werden, in die der Ball "geschossen" wird.

Wenn @greenFlag angeklickt
gehe zu x: (0) y: (150)
setze Richtung auf (Zufallszahl von (-45) bis (45))

Dann muss der Ball ja auch immer von der Platte abprallen und sich neue Punkte holen, also:

wiederhole fortlaufend
falls <wird [Platte v] berührt?>
pralle vom Rand ab
ändere [Punkte v] um (5)
drehe dich @turnRight um (Zufallszahl von (160) bis (200)) Grad
ende

Und natürlich muss sich der Ball ja auch ständig bewegen.

Wenn @greenFlag angeklickt::grey
wiederhole fortlaufend::grey
gehe (((Level)*(2.5))+(5))er-Schritt//die Geschwindigkeit des Balls ist vom Level abhängig
falls <wird [Platte v] berührt?::grey> dann::grey
pralle vom Rand ab::grey
ändere [Punkte v] um (5)::grey
drehe dich @turnRight um (Zufallszahl von (160) bis (200)::grey) Grad::grey
ende

Es muss ebenfalls daran gedacht werden, dass der Ball den Boden ja nicht berühren darf (sonst wird ein Leben abgezogen).

Wenn @greenFlag angeklickt::grey
gehe zu x: (0) y: (150)::grey
setze Richtung auf (Zufallszahl von (-45) bis (45)::grey)::grey
wiederhole fortlaufend::grey
gehe (((Level::grey)*(2.5)::grey)+(5)::grey)er-Schritt::grey
falls <wird [Platte v] berührt?::grey> dann::grey
pralle vom Rand ab::grey
ändere [Punkte v] um (5)::grey
drehe dich @turnRight um (Zufallszahl von (160) bis (200)::grey) Grad::grey
ende
falls <(y-Position)<[-150]> dann//prüft, ob die y-Position des Balls geringer ist als die der Platte
ändere [Leben v] um (-1)
gehe zu x: (0) y: (150)
setze Richtung auf (Zufallszahl von (-45) bis (45))
ende

Cool, damit hast du die Basis deines Pong-Spiels programmiert! Füge nun Elemente deiner Auswahl hinzu, die das Spiel noch interessanter machen.



Code zum Einbinden ins Forum:
[wiki=de:Pong in Scratch]Pong in Scratch[/wiki]