g9:uebungen:spiele9
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
g9:uebungen:spiele9 [2022/06/30 09:24] – angelegt Martin Pabst | g9:uebungen:spiele9 [2022/07/01 07:54] (aktuell) – [Spieleprogrammierung in Jgst. 9] Martin Pabst | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Der bayerische Lehrplan der Jahrgangsstufe 9 sieht noch keine Objektreferenzen in Attributen vor. Dies schränkt die Programmierung umfangreicherer Spiele deutlich ein, mit etwas Geschick kann man aber doch zu ansprechenden Ergebnissen kommen. \\ | Der bayerische Lehrplan der Jahrgangsstufe 9 sieht noch keine Objektreferenzen in Attributen vor. Dies schränkt die Programmierung umfangreicherer Spiele deutlich ein, mit etwas Geschick kann man aber doch zu ansprechenden Ergebnissen kommen. \\ | ||
**Strategien: | **Strategien: | ||
- | * Verwendung der **Processing-API**: | + | * Verwendung der **Processing-API**: |
- | * Verwendung der **Graphics and Games-API des Cornelsen-Verlages**: | + | * Verwendung der **Graphics and Games-API des Cornelsen-Verlages**: |
+ | * Verwendung von **[[https:// | ||
* Verwendung der **Graphik-API der Online-IDE**: | * Verwendung der **Graphik-API der Online-IDE**: | ||
{{: | {{: | ||
</ | </ | ||
+ | |||
+ | ===== Verwendung der Grafikklassen der Online-IDE ===== | ||
+ | |||
+ | ==== 1. Spiel " | ||
+ | <WRAP center round tip 80%> | ||
+ | Auf der Seite [[https:// | ||
+ | Sehr sehenswert! | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 2. Pong ==== | ||
+ | <WRAP center round tip 80%> | ||
+ | Die Klassen Ball und Schläger stehen in keiner Beziehung zueinander: Der Ball erkennt mit der Methode '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new Schläger(0, | ||
+ | new Schläger(780, | ||
+ | new Ball(); | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Schläger extends Rectangle { | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(left, 250, 20, 100); | ||
+ | this.tasteRauf = tasteRauf; | ||
+ | this.tasteRunter = tasteRunter; | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(isKeyDown(tasteRauf) && getCenterY() > 50) { | ||
+ | | ||
+ | } | ||
+ | if(isKeyDown(tasteRunter) && getCenterY() < 550) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Ball extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | int scoreLeft; | ||
+ | int scoreRight; | ||
+ | |||
+ | | ||
+ | super(395, 295, 20, 20); | ||
+ | setFillColor(Color.white); | ||
+ | setRandomVelocity(); | ||
+ | } | ||
+ | |||
+ | | ||
+ | move(vx, vy); | ||
+ | if(collidesWithAnyShape()) { | ||
+ | vx *= -1; | ||
+ | | ||
+ | } | ||
+ | | ||
+ | if(getCenterX() < 0) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | if(getCenterX() > 800) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | | ||
+ | if(getCenterY() < 10 || getCenterY() > 590) { | ||
+ | vy *= -1; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void setRandomVelocity() { | ||
+ | double v = Random.randdouble(5, | ||
+ | double winkel = Random.randdouble(20, | ||
+ | vx = v * Math.cos(Math.toRadians(winkel)); | ||
+ | vy = v * Math.sin(Math.toRadians(winkel)); | ||
+ | if(Math.random() < 0.5) vx *= -1; | ||
+ | if(Math.random() < 0.5) vy *= -1; | ||
+ | |||
+ | moveTo(390, 290); | ||
+ | } | ||
+ | |||
+ | void printScore() { | ||
+ | SystemTools.clearScreen(); | ||
+ | println(scoreLeft + " : " + scoreRight); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 3. Hunter Game ==== | ||
+ | <WRAP center round tip 80%> | ||
+ | Die Idee zu diesem Spiel kommt von Frau Dr. Siglinde Voss. Ein ähnliches Spiel auf Basis des Processing Frameworks findet sich im Klett-Buch. | ||
+ | \\ \\ | ||
+ | Wie im Beispiel Pong oben haben auch hier die Klassen '' | ||
+ | Das ganze funktioniert natürlich nur, wenn das Prey-Objekt und die Bomben nur dorthin gesetzt werden wo noch nichts liegt. Dies wird durch die Methode '' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new Hunter(); | ||
+ | new Prey(); | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Hunter extends Circle { | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(400, 300, 15); | ||
+ | setFillColor(Color.blue); | ||
+ | } | ||
+ | |||
+ | | ||
+ | move(vx, vy); | ||
+ | |||
+ | if(isKeyDown(Key.ArrowRight)) { | ||
+ | vx = v; vy = 0; | ||
+ | } | ||
+ | if(isKeyDown(Key.ArrowLeft)) { | ||
+ | vx = -v; vy = 0; | ||
+ | } | ||
+ | if(isKeyDown(Key.ArrowUp)) { | ||
+ | vx = 0; vy = -v; | ||
+ | } | ||
+ | if(isKeyDown(Key.ArrowDown)) { | ||
+ | vx = 0; vy = v; | ||
+ | } | ||
+ | |||
+ | if(isOutsideView()) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Prey extends Circle { | ||
+ | |||
+ | int score = 0; | ||
+ | int time = 0; | ||
+ | |||
+ | | ||
+ | super(400, 300, 10); | ||
+ | setFillColor(Color.green); | ||
+ | moveToRandomLocation(); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(collidesWithAnyShape()) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | | ||
+ | time++; | ||
+ | if(time % 150 == 0) { | ||
+ | new Bomb(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void moveToRandomLocation() { | ||
+ | do { | ||
+ | | ||
+ | } while(collidesWithAnyShape()) | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Bomb extends Rectangle { | ||
+ | |||
+ | | ||
+ | super(400, 300, 10, 10); | ||
+ | setFillColor(Color.red); | ||
+ | moveToRandomLocation(); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(collidesWithAnyShape()) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | |||
+ | void moveToRandomLocation() { | ||
+ | do { | ||
+ | | ||
+ | } while (collidesWithAnyShape()) | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
g9/uebungen/spiele9.1656573894.txt.gz · Zuletzt geändert: 2022/06/30 09:24 von Martin Pabst