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)); } }