96 lines
2.7 KiB
Java
96 lines
2.7 KiB
Java
|
|
import java.awt.*;
|
|
import java.awt.geom.Rectangle2D;
|
|
import java.awt.event.KeyListener;
|
|
import java.awt.event.KeyEvent;
|
|
/**
|
|
* Beschreiben Sie hier die Klasse PacMan.
|
|
*
|
|
* @author (Ihr Name)
|
|
* @version (eine Versionsnummer oder ein Datum)
|
|
*/
|
|
public class GeistGegner extends Spielfiguren implements KeyListener
|
|
{
|
|
protected PacMan pacman;
|
|
|
|
GeistGegner(Spiel spiel, double centerX, double centerY, double radius, double Geschwindigkeit){
|
|
super(spiel, centerX, centerY, radius, Geschwindigkeit, Color.RED);
|
|
}
|
|
|
|
public void tickSpielerkollision() {
|
|
int x = (int) centerX;
|
|
int y = (int) centerY;
|
|
|
|
double dx = pacman.getCenterX() - centerX;
|
|
double dy = pacman.getCenterY() - centerY;
|
|
double r = pacman.getRadius() + radius;
|
|
|
|
if (dx * dx + dy * dy < r * r) {
|
|
spiel.lose();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void tickPunktKollision(){
|
|
int x = (int) centerX;
|
|
int y = (int) centerY;
|
|
if(spiel.getLabyrinth().getSpielobjekt(x,y) instanceof Punkt punkt){
|
|
double dx = punkt.getCenterX() - centerX;
|
|
double dy = punkt.getCenterY() - centerY;
|
|
double r = punkt.getRadius() + radius;
|
|
|
|
if (dx * dy + dy * dx < r * r){
|
|
spiel.getLabyrinth().setSpielobjekt(x, y, new Nichts(x, y));
|
|
if (spiel.getLabyrinth().PunkteZaehler() == 0) {
|
|
spiel.win();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void keyTyped(KeyEvent e){
|
|
|
|
}
|
|
|
|
@Override
|
|
public void keyPressed(KeyEvent e) {
|
|
int keyCode = e.getKeyCode();
|
|
|
|
if (keyCode == KeyEvent.VK_T) {
|
|
bevorzugteRichtungX = 0;
|
|
bevorzugteRichtungY = -1;
|
|
}else if (keyCode == KeyEvent.VK_F) {
|
|
bevorzugteRichtungX = -1;
|
|
bevorzugteRichtungY = 0;
|
|
}else if (keyCode == KeyEvent.VK_G) {
|
|
bevorzugteRichtungX = 0;
|
|
bevorzugteRichtungY = 1;
|
|
}else if (keyCode == KeyEvent.VK_H) {
|
|
bevorzugteRichtungX = 1;
|
|
bevorzugteRichtungY = 0;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void keyReleased(KeyEvent e){
|
|
|
|
}
|
|
|
|
@Override
|
|
public void tick(){
|
|
super.tick();
|
|
}
|
|
|
|
@Override
|
|
public void render(Graphics2D g, int SpielobjektGröße){
|
|
double centerXOnScreen = centerX * SpielobjektGröße;
|
|
double centerYOnScreen = centerY* SpielobjektGröße;
|
|
double radiusOnScreen = radius * SpielobjektGröße;
|
|
double diameterOnScreen = radiusOnScreen * 2.0;
|
|
|
|
g.setColor(color);
|
|
g.fill(new Rectangle2D.Double(centerXOnScreen - radiusOnScreen, centerYOnScreen - radiusOnScreen, diameterOnScreen, diameterOnScreen));
|
|
}
|
|
} |