Update of exercises
parent
d188a1126a
commit
3e955cdfe4
|
@ -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`.
|
||||
|
|
|
@ -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/)
|
||||
|
|
|
@ -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