Files
PacMan/GeistGegner.java
2023-10-16 15:09:46 +02:00

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