Update of exercises
parent
d188a1126a
commit
3e955cdfe4
|
@ -8,6 +8,8 @@ Eine anonyme Klasse verwenden, um einen Event-Handler zu implementieren. Den Zug
|
||||||
|
|
||||||
## Aufgabe
|
## 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.
|
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`.
|
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`.
|
||||||
|
|
|
@ -2,5 +2,4 @@
|
||||||
|
|
||||||
Musterlösung:
|
Musterlösung:
|
||||||
|
|
||||||
[pr2.lambda.anonymous](../../solutions/src/main/java/pr2/lambda/anonymous/).
|
[pr2.lambda.anonymous](../../solutions/src/main/java/pr2/lambda/anonymous/)
|
||||||
va)
|
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue