api:projects:pong:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
api:projects:pong:start [2020/12/29 12:59] – Martin Pabst | api:projects:pong:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ====== |
- | Pong ist eines der ersten Computerspiele. Es wurde 1972 von Atari entwickelt, [[https:// | + | {{ : |
+ | <WRAP center round info 50%> | ||
+ | Das 1972 von Atari veröffentlichte Pong war eines der ersten Computerspiele, [[https:// | ||
+ | Zwei Spieler steuern je einen Schläger am linken bzw. rechten Bildschirmrand und versuchen, einen Ball so abprallen | ||
+ | </ | ||
+ | \\ | ||
+ | ===== Programmierung des Schlägers ===== | ||
+ | {{ youtube> | ||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new Schläger(0, | ||
+ | new Schläger(800 - 20, 20, 200, Key.ArrowUp, | ||
+ | |||
+ | class Schläger extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | super(x, | ||
+ | | ||
+ | this.tasteRauf = tasteRauf; | ||
+ | this.tasteRunter = tasteRunter; | ||
+ | | ||
+ | setFillColor(Color.white); | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(isKeyDown(tasteRauf)) { | ||
+ | | ||
+ | move(0, -dy); | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | if(isKeyDown(tasteRunter)) { | ||
+ | | ||
+ | move(0, dy); | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | | ||
+ | ===== Programmierung des Balls ===== | ||
+ | {{ youtube> | ||
< | < | ||
- | <div class=" | ||
- | <script type="text/plain" | + | <div class="java-online" |
+ | <script type=" | ||
+ | Schläger links = new Schläger(0, | ||
+ | Schläger rechts = new Schläger(800 - 20, 20, 200, Key.ArrowUp, | ||
+ | new Ball(20, 400, 300, links, rechts); | ||
+ | |||
+ | class Schläger extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | super(x, | ||
+ | | ||
+ | this.tasteRauf = tasteRauf; | ||
+ | this.tasteRunter = tasteRunter; | ||
+ | | ||
+ | setFillColor(Color.white); | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(isKeyDown(tasteRauf)) { | ||
+ | | ||
+ | move(0, -dy); | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | if(isKeyDown(tasteRunter)) { | ||
+ | | ||
+ | move(0, dy); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
</ | </ | ||
+ | <script type=" | ||
+ | class Ball extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | | ||
+ | super(x - breite / 2, y - breite / 2, breite, breite); | ||
+ | setFillColor(Color.white); | ||
+ | this.schlägerLinks = schlägerLinks; | ||
+ | this.schlägerRechts = schlägerRechts; | ||
+ | |||
+ | setzeZufallsGeschwindigkeit(); | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | move(vx, vy); | ||
+ | |||
+ | if(getCenterY() < getWidth() / 2) { | ||
+ | vy = vy * (-1); | ||
+ | } | ||
+ | |||
+ | if(getCenterY() > 600 - getWidth() / 2) { | ||
+ | vy = vy * (-1); | ||
+ | } | ||
+ | |||
+ | if(collidesWith(schlägerLinks) || collidesWith(schlägerRechts)) { | ||
+ | vx = vx * (-1); | ||
+ | } | ||
+ | |||
+ | if(getCenterX() < - getWidth() / 2) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | if(getCenterX() > 800 + getWidth() / 2) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | void setzeZufallsGeschwindigkeit() { | ||
+ | |||
+ | double r = Math.random() * 5 + 5; | ||
+ | double winkelGrad = Math.random() * 50 + 20; | ||
+ | double winkelRad = winkelGrad / 180 * Math.PI; | ||
+ | | ||
+ | vx = r * Math.cos(winkelRad); | ||
+ | vy = - r * Math.sin(winkelRad); | ||
+ | |||
+ | if(Math.random() < 0.5) { | ||
+ | vx = -vx; | ||
+ | } | ||
+ | |||
+ | if(Math.random() < 0.5) { | ||
+ | vy = -vy; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
</ | </ | ||
+ | |||
</ | </ | ||
+ | | ||
+ | ===== Hauptprogramm, | ||
+ | {{ youtube> | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new Pong(); | ||
+ | |||
+ | class Pong extends Actor { | ||
+ | |||
+ | Text punkteanzeige; | ||
+ | |||
+ | Text großeAnzeige; | ||
+ | |||
+ | int punkteLinks = 0; | ||
+ | int punkteRechts = 0; | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | Ball ball; | ||
+ | |||
+ | | ||
+ | super(); | ||
+ | links = new Schläger(0, | ||
+ | rechts = new Schläger(800 - 20, 20, 200, Key.ArrowUp, | ||
+ | ball = new Ball(20, 400, 300, links, rechts, this); | ||
+ | |||
+ | punkteanzeige = new Text(400, 20, 64, "" | ||
+ | punkteanzeige.setAlignment(Alignment.center); | ||
+ | punkteanzeige.setFillColor(Color.white); | ||
+ | punkteAnzeigen(); | ||
+ | |||
+ | großeAnzeige = new Text(400, 150, 140, " | ||
+ | großeAnzeige.setAlignment(Alignment.center); | ||
+ | großeAnzeige.setFillColor(Color.white); | ||
+ | |||
+ | setZustand(" | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(key == " " && zustand == "Vor dem Spiel" | ||
+ | | ||
+ | } else | ||
+ | if(key == " " && zustand == "Game over") { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void punkteAnzeigen() { | ||
+ | punkteanzeige.setText(punkteLinks + " : " + punkteRechts); | ||
+ | | ||
+ | if((punkteLinks == 3 || punkteRechts == 3) && zustand == "Im Spiel" | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void punktFürRechtenSpieler() { | ||
+ | punkteRechts++; | ||
+ | punkteAnzeigen(); | ||
+ | } | ||
+ | |||
+ | void punktFürLinkenSpieler() { | ||
+ | punkteLinks++; | ||
+ | punkteAnzeigen(); | ||
+ | } | ||
+ | |||
+ | void setZustand(String neuerZustand) { | ||
+ | | ||
+ | if(neuerZustand == "Vor dem Spiel" | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } else if(neuerZustand == "Im Spiel" | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } else if(neuerZustand == "Game over") { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | zustand = neuerZustand; | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <script type=" | ||
+ | class Schläger extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | super(x, | ||
+ | | ||
+ | this.tasteRauf = tasteRauf; | ||
+ | this.tasteRunter = tasteRunter; | ||
+ | | ||
+ | setFillColor(Color.white); | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(isKeyDown(tasteRauf)) { | ||
+ | | ||
+ | move(0, -dy); | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | if(isKeyDown(tasteRunter)) { | ||
+ | | ||
+ | move(0, dy); | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <script type=" | ||
+ | class Ball extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Pong pong; | ||
+ | |||
+ | |||
+ | | ||
+ | Pong pong) { | ||
+ | super(x - breite / 2, y - breite / 2, breite, breite); | ||
+ | setFillColor(Color.white); | ||
+ | this.schlägerLinks = schlägerLinks; | ||
+ | this.schlägerRechts = schlägerRechts; | ||
+ | this.pong = pong; | ||
+ | |||
+ | setzeZufallsGeschwindigkeit(); | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | if(pong.zustand != "Im Spiel" | ||
+ | | ||
+ | } | ||
+ | |||
+ | move(vx, vy); | ||
+ | |||
+ | if(getCenterY() < getWidth() / 2) { | ||
+ | vy = vy * (-1); | ||
+ | } | ||
+ | |||
+ | if(getCenterY() > 600 - getWidth() / 2) { | ||
+ | vy = vy * (-1); | ||
+ | } | ||
+ | |||
+ | if(collidesWith(schlägerLinks) || collidesWith(schlägerRechts)) { | ||
+ | vx = vx * (-1); | ||
+ | } | ||
+ | |||
+ | if(getCenterX() < - getWidth() / 2) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | if(getCenterX() > 800 + getWidth() / 2) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | void setzeZufallsGeschwindigkeit() { | ||
+ | |||
+ | double r = Math.random() * 5 + 5; | ||
+ | double winkelGrad = Math.random() * 50 + 20; | ||
+ | double winkelRad = winkelGrad / 180 * Math.PI; | ||
+ | | ||
+ | vx = r * Math.cos(winkelRad); | ||
+ | vy = - r * Math.sin(winkelRad); | ||
+ | |||
+ | if(Math.random() < 0.5) { | ||
+ | vx = -vx; | ||
+ | } | ||
+ | |||
+ | if(Math.random() < 0.5) { | ||
+ | vy = -vy; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | | ||
+ | ===== Aufgaben ===== | ||
+ | Erweitere das PONG-Spiel folgendermaßen: | ||
+ | - Wenn der Ball am oberen oder unteren Rand abprallt, soll ein tiefer Ton zu hören sein (Anweisung '' | ||
+ | - Oft dauert es ewig, bis ein Tor erzielt wird. Je länger der Ball im Spiel ist, desto schneller soll er werden. Gleichzeitig soll auch die Geschwindigkeit der Schläger zunehmen. Sobald ein Tor erzielt wird, soll die Geschwindigkeit der Schläger wieder auf den ursprünglichen Wert zurückgesetzt werden. | ||
+ | - Herausforderung (freiwillig): | ||
+ | |||
+ |
api/projects/pong/start.1609243181.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)