g9:uebungen:spiele9
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | g9:uebungen:spiele9 [2024/08/31 10:03] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Spieleprogrammierung in Jgst. 9 ====== | ||
+ | <WRAP center round info 80%> | ||
+ | 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: | ||
+ | * Verwendung der **Processing-API**: | ||
+ | * Verwendung der **Graphics and Games-API des Cornelsen-Verlages**: | ||
+ | * Verwendung von **[[https:// | ||
+ | * 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()) | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||