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:44] – Martin Pabst | wiederholung:eigeneklassen [2023/06/11 15:01] (aktuell) – [Projekt: Einfaches Weltraumspiel (Variante Jgst. 10)] Martin Pabst | ||
---|---|---|---|
Zeile 113: | 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.1668282294.txt.gz · Zuletzt geändert: 2022/11/12 19:44 von Martin Pabst