wiederholung:eigeneklassen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
wiederholung:eigeneklassen [2022/11/12 19:42] – [a) Klasse zum Speichern der Seitenzahl] Martin Pabst | wiederholung:eigeneklassen [2023/06/11 15:01] (aktuell) – [Projekt: Einfaches Weltraumspiel (Variante Jgst. 10)] Martin Pabst | ||
---|---|---|---|
Zeile 44: | Zeile 44: | ||
Den Teil '' | Den Teil '' | ||
- | Dahinter folgt in geschweiften Klammern die Implementierung der Methode, d.h. das Programm, das ausgeführt wird, wenn die Methode aufgerufen wird. In diesem Fall besteht es aus einer einzigen Anweisung '' | + | Dahinter folgt in geschweiften Klammern die **Implementierung** der Methode, d.h. das Programm, das ausgeführt wird, wenn die Methode aufgerufen wird. In diesem Fall besteht es aus einer einzigen Anweisung '' |
</ | </ | ||
Zeile 78: | Zeile 78: | ||
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | Attribute sollten i.d.R. nicht direkt von außen veränderbar sein, damit die interne Repräsentation der Daten der Klasse geändert werden kann ohne dass alle Programme angepasst werden müssen, die die Klasse nutzen. Wir ändern daher den visibility modifier von '' | + | Attribute sollten i.d.R. nicht direkt von außen veränderbar sein, damit die interne Repräsentation der Daten der Klasse geändert werden kann ohne dass alle Programme angepasst werden müssen, die die Klasse nutzen. Wir ändern daher den visibility modifier von '' |
+ | Den Konstruktor erkennt der Kompiler daran, dass er exakt denselben Bezeichner trägt wie die Klasse und dass davor kein Rückgabetyp steht (auch nicht '' | ||
</ | </ | ||
Zeile 112: | Zeile 113: | ||
</ | </ | ||
+ | |||
+ | ===== Beispiel 2: Ratespiel ===== | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | Wir schreiben eine Klasse '' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | |||
+ | Ratespiel spiel = new Ratespiel(); | ||
+ | while (!spiel.istBeendet()) { | ||
+ | int z = Input.readInt(" | ||
+ | | ||
+ | } | ||
+ | |||
+ | // Jetzt bis Du dran: Schreibe hier die Klasse Ratespiel! | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | [[.ratespielloesung: | ||
+ | |||
+ | ===== Aufgabe: Weihnachtsbaum ===== | ||
+ | {{ : | ||
+ | Erstelle eine Klasse Weihnachtsbaum, | ||
+ | <code java> | ||
+ | Baum b = new Baum(3, 5, 4); // Stammbreite, | ||
+ | b.zeichne(); | ||
+ | </ | ||
+ | [[.baum: | ||
+ | |||
+ | < | ||
+ | ===== Beispiel 3: Fliegende Rechtecke ===== | ||
+ | {{ : | ||
+ | <WRAP center round info 60%> | ||
+ | Wir schreiben unser erstes eigenes [[https:// | ||
+ | Sobald ein Rechteck unterhalb der unteren Zeichenflächenkante verschwindet, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | World g = new World(800, 900); | ||
+ | SystemTools.setSpeed(500); | ||
+ | |||
+ | g.setBackgroundColor("# | ||
+ | |||
+ | for (int i = 1; i <= 200; i++) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | |||
+ | class Particle extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(x - width / 2, y - height / 2, width, height); | ||
+ | setBorderColor(null); | ||
+ | } | ||
+ | |||
+ | | ||
+ | move(vx, vy); | ||
+ | vy += 0.2; | ||
+ | if(getCenterY() > 950) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **Aufgaben: | ||
+ | * Jedes Rechteck soll eine zufällige Farbe (Tipp: '' | ||
+ | * Jedes Rechteck soll eine zufällige Winkelgeschwindigkeit haben, mit der es sich fortwährend dreht (Tipp: Methode '' | ||
+ | </ | ||
+ | |||
+ | [[.particleloesung: | ||
+ | |||
+ | |||
+ | ===== Projekt: Einfaches Weltraumspiel (Variante Jgst. 9) ===== | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | // | ||
+ | new Spaceship(400, | ||
+ | |||
+ | class Spaceship extends Sprite { | ||
+ | |||
+ | int spaceLastPressedTime = 0; | ||
+ | |||
+ | | ||
+ | super(x, y, SpriteLibrary.Space_Shooter_2, | ||
+ | scale(2); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(isKeyDown(Key.ArrowLeft)) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | if(isKeyDown(Key.ArrowRight)) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | int time = System.currentTimeMillis(); | ||
+ | |||
+ | if(isKeyDown(" | ||
+ | | ||
+ | new Bullet(getCenterX(), | ||
+ | } | ||
+ | |||
+ | if(Math.random() < 0.05) { | ||
+ | new Target(); | ||
+ | } | ||
+ | |||
+ | if(getFirstCollidingSprite(9) != null) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Bullet extends Circle { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(x, y, 10); | ||
+ | this.vx = vx; | ||
+ | this.vy = vy; | ||
+ | this.sendToBack(); | ||
+ | this.setFillColor(0xff0000); | ||
+ | } | ||
+ | |||
+ | | ||
+ | move(vx, vy); | ||
+ | if(isOutsideView()) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | public class Target extends Sprite { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(Random.randint(0, | ||
+ | this.vx = Random.randint(-5, | ||
+ | this.vy = Random.randint(3, | ||
+ | } | ||
+ | |||
+ | | ||
+ | |||
+ | move(vx, vy); | ||
+ | |||
+ | if(getCenterY() > 620) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | if(collidesWithFillColor(0xff0000)) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **Aufgaben: | ||
+ | * Die Bullets sind bisher nur einfache Kreise. Schöner wäre ein geeignetes Sprite! | ||
+ | * Trifft ein Bullet ein Target, so soll auch das Bullet vernichtet werden. | ||
+ | * Ersetze die Explosion der Targets durch ein Particle System (z.B. umherfliegende Dreiecke). Trifft ein Particle das Raumschiff, soll es zerstört werden. | ||
+ | </ | ||
+ | |||
+ | ===== Projekt: Einfaches Weltraumspiel (Variante Jgst. 10) ===== | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new Main(); | ||
+ | |||
+ | class Main extends Actor { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Text caption; | ||
+ | |||
+ | int score = 0; | ||
+ | Text scoreDisplay; | ||
+ | |||
+ | int lastTimeSpacePressed; | ||
+ | |||
+ | | ||
+ | |||
+ | caption = new Text(400, 200, 60, "Space shooter" | ||
+ | caption.setAlignment(Alignment.center); | ||
+ | |||
+ | scoreDisplay = new Text(10, 10, 32, " | ||
+ | |||
+ | spaceship = new Spaceship(400, | ||
+ | | ||
+ | setState(" | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(state == " | ||
+ | | ||
+ | new Target(this); | ||
+ | } | ||
+ | } else if(isKeyDown(" | ||
+ | | ||
+ | | ||
+ | case " | ||
+ | | ||
+ | | ||
+ | case " | ||
+ | | ||
+ | | ||
+ | default : | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | switch(newState) { | ||
+ | case " | ||
+ | caption.setVisible(true); | ||
+ | spaceship.setVisible(false); | ||
+ | caption.setText(" | ||
+ | break; | ||
+ | case " | ||
+ | score = 0; | ||
+ | displayScore(); | ||
+ | caption.setVisible(false); | ||
+ | spaceship.setVisible(true); | ||
+ | break; | ||
+ | case " | ||
+ | caption.setVisible(true); | ||
+ | spaceship.setVisible(false); | ||
+ | caption.setText(" | ||
+ | break; | ||
+ | | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | state = newState; | ||
+ | } | ||
+ | |||
+ | | ||
+ | score += delta; | ||
+ | displayScore(); | ||
+ | } | ||
+ | |||
+ | | ||
+ | scoreDisplay.setText(score); | ||
+ | } | ||
+ | |||
+ | }</ | ||
+ | <script type=" | ||
+ | class Spaceship extends Sprite { | ||
+ | |||
+ | int spaceLastPressedTime = 0; | ||
+ | Main main; | ||
+ | |||
+ | | ||
+ | super(x, y, SpriteLibrary.Space_Shooter_2, | ||
+ | this.main = main; | ||
+ | scale(2); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(main.state != " | ||
+ | | ||
+ | if(isKeyDown(Key.ArrowLeft)) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | if(isKeyDown(Key.ArrowRight)) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | int time = System.currentTimeMillis(); | ||
+ | |||
+ | if(isKeyDown(" | ||
+ | | ||
+ | new Bullet(getCenterX(), | ||
+ | } | ||
+ | |||
+ | if(getFirstCollidingSprite(9) != null) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Bullet extends Circle { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(x, y, 10); | ||
+ | this.vx = vx; | ||
+ | this.vy = vy; | ||
+ | this.sendToBack(); | ||
+ | this.setFillColor(0xff0000); | ||
+ | } | ||
+ | |||
+ | | ||
+ | move(vx, vy); | ||
+ | if(isOutsideView()) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | }</ | ||
+ | <script type=" | ||
+ | public class Target extends Sprite { | ||
+ | |||
+ | | ||
+ | | ||
+ | Main main; | ||
+ | |||
+ | | ||
+ | super(Random.randint(0, | ||
+ | this.vx = Random.randint(-5, | ||
+ | this.vy = Random.randint(3, | ||
+ | this.main = main; | ||
+ | } | ||
+ | |||
+ | | ||
+ | |||
+ | move(vx, vy); | ||
+ | |||
+ | if(getCenterY() > 620) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | if(collidesWithFillColor(0xff0000)) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | **Aufgaben: | ||
+ | * Die Bullets sind bisher nur einfache Kreise. Schöner wäre ein geeignetes Sprite! | ||
+ | * Trifft ein Bullet ein Target, so soll auch das Bullet vernichtet werden. | ||
+ | * Ersetze die Explosion der Targets durch ein Particle System (z.B. umherfliegende Dreiecke). Trifft ein Particle das Raumschiff, soll es zerstört werden. | ||
+ | * Das Raumschiff soll drei Leben haben. Schön wäre eine Lebensanzeige rechts unten, die aus drei kleinen Raumschiffen besteht... | ||
+ | * Es soll verschiedene Gegner geben, die sich verschieden verhalten! | ||
+ | * Es soll Powerups geben, die man aufsammeln kann. Sie bewirken, dass das Raumschiff bessere Fähigkeiten bekommt (verschiedene Kanonen, Schild, ...) | ||
+ | </ | ||
+ | |||
wiederholung/eigeneklassen.1668282171.txt.gz · Zuletzt geändert: 2022/11/12 19:42 von Martin Pabst