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.
[wiki=de:Pong in Scratch]Pong in Scratch[/wiki]