Update of exercises

master
Thomas Smits 2024-01-20 16:43:16 +01:00
parent d188a1126a
commit 3e955cdfe4
5 changed files with 139 additions and 2 deletions

View File

@ -8,6 +8,8 @@ Eine anonyme Klasse verwenden, um einen Event-Handler zu implementieren. Den Zug
## Aufgabe
Gehen Sie in das Paket [pr2.lambda.anonymous](../../solutions/src/main/java/pr2/lambda/anonymous/).
In dieser Aufgabe sollen Sie den Event-Handler für das Zerstören des Aliens als anonyme Klasse im Konstruktor von `GameBoard` realisieren. D.h. nicht mehr das Alien selbst reagiert auf das Klicken, sondern das `GameBoard` bekommt alle Klicks und überprüft, ob sich die Maus über dem Alien befindet.
Fügen Sie dem Konstruktor von `GameBoard` eine anonyme Klasse hinzu, die von `MouseAdapter` erbt. Überschreiben Sie in dieser Klasse die Methode `mousePressed` aus `MouseAdapter`.

View File

@ -2,5 +2,4 @@
Musterlösung:
[pr2.lambda.anonymous](../../solutions/src/main/java/pr2/lambda/anonymous/).
va)
[pr2.lambda.anonymous](../../solutions/src/main/java/pr2/lambda/anonymous/)

View File

@ -0,0 +1,46 @@
package pr2.lambda.anonymous;
import de.smits_net.games.framework.board.Board;
import de.smits_net.games.framework.image.AnimatedImage;
import de.smits_net.games.framework.image.ImagePack;
import de.smits_net.games.framework.image.StripedImage;
import de.smits_net.games.framework.sprite.AnimatedSprite;
import de.smits_net.games.framework.sprite.Direction;
import java.awt.Point;
/**
* Ein Alien.
*/
public class Alien extends AnimatedSprite {
/**
* Geschwindigkeit des Aliens X-Richtung.
*/
private static final int ALIEN_SPEED = 2;
/**
* Neues Alien anlegen.
*
* @param board das Spielfeld
* @param startPoint Start-Position
*/
public Alien(Board board, Point startPoint) {
super(board, startPoint, BoundaryPolicy.JUMP_BACK,
new AnimatedImage(50,
new ImagePack("pr2/lambda/anonymous/",
"ship01", "ship02", "ship03")));
velocity.setVelocity(Direction.WEST, ALIEN_SPEED);
}
/**
* Alien explodieren lassen.
*/
public void explode() {
setActive(false);
setImages(new AnimatedImage(20,
new StripedImage("pr2/lambda/anonymous/explosion_1" + ".png",
43)));
setInvisibleAfterFrames(70);
}
}

View File

@ -0,0 +1,62 @@
package pr2.lambda.anonymous;
import de.smits_net.games.framework.board.Board;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;
/**
* Spielfeld.
*/
public class GameBoard extends Board {
/**
* Alien, das durch das Bild läuft.
*/
Alien alien; // nicht private wegen des Zugriffs aus der inneren Klasse
/**
* Erzeugt ein neues Board.
*/
public GameBoard() {
// neues Spielfeld anlegen
super(10, new Dimension(800, 300), Color.BLACK);
// Alien initialisieren
alien = new Alien(this,
new Point(800, 50 + new Random().nextInt(100)));
// TODO: Event-Handler hier erstellen
}
/**
* Spielfeld neu zeichnen. Wird vom Framework aufgerufen.
*/
@Override
public void drawGame(Graphics g) {
// Alien zeichnen
alien.draw(g, this);
}
/**
* Game-Over-Text anzeigen. Wird vom Framework aufgerufen.
*/
@Override
public void drawGameOver(Graphics g) {
centerText(g, "Das Spiel ist aus!");
}
/**
* Spielsituation updaten. Wird vom Framework aufgerufen.
*/
@Override
public boolean updateGame() {
alien.move();
return alien.isVisible();
}
}

View File

@ -0,0 +1,28 @@
package pr2.lambda.anonymous;
import de.smits_net.games.framework.board.MainWindow;
import java.awt.EventQueue;
/**
* Hauptklasse des Spiels.
*/
public class GameMain extends MainWindow {
/**
* Neues Spiel anlegen.
*/
public GameMain() {
super("Click Alien - (04) Anonymous Class", new GameBoard());
}
/**
* Startpunkt.
*
* @param args command line arguments.
*/
public static void main(String[] args) {
EventQueue.invokeLater(GameMain::new);
}
}