Aus Das deutschsprachige Scratch-Wiki

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 die grüne flagge 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 die grüne flagge angeklickt
wechsle zu Bühnenbild [Level 1 v]
setze [Level v] auf [1]
setze [Punkte v] auf [0]
setze [Leben v] auf [3]
wiederhole fortlaufend
warte bis <((Punkte) mod (100))=[0]>
ändere [Level v] um (1)
wechsle zu Bühnenbild [nächstes Bühnenbild v]
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 die grüne flagge 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 die grüne flagge angeklickt
gehe zu x: (0) y: (150)
setze Richtung auf (Zufallszahl von (-45) bis (45)) Grad

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

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

Wenn die grüne flagge angeklickt
gehe zu x: (0) y: (150)
setze Richtung auf (Zufallszahl von (-45) bis (45)) Grad
wiederhole fortlaufend
gehe (((Level)*(2.5))+(5))er Schritt
falls <wird [Platte v] berührt?>, dann
pralle vom Rand ab
ändere [Punkte v] um (5)
drehe dich @turnRight um (Zufallszahl von (160) bis (200)) Grad
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)) Grad
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]
Cookies helfen uns bei der Bereitstellung von Das deutschsprachige Scratch-Wiki. Durch die Nutzung von Das deutschsprachige Scratch-Wiki erklärst du dich damit einverstanden, dass wir Cookies speichern.