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

103 lines
2.5 KiB
Java

import javax.swing.*;
import java.awt.*;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* Beschreiben Sie hier die Klasse Spiel.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Spiel extends JFrame
{
private final Display display;
private final Labyrinth labyrinth;
private final PacMan pacman;
private final GeistGegner geistgegner;
private final GeistGegner2 geistgegner2;
private boolean won;
Spiel(){
super("Game");
display = new Display(this);
labyrinth = new Labyrinth(40);
pacman = new PacMan(this, 13.5, 10.5, 0.375, 0.07);
addKeyListener(pacman);
geistgegner = new GeistGegner(this,12.5, 8.5, 0.375, 0.06);
addKeyListener(geistgegner);
geistgegner2 = new GeistGegner2(this,14.5, 8.5, 0.375, 0.06);
addKeyListener(geistgegner2);
setSize(1096, 759);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
startSpielLoop();
}
private void startSpielLoop(){
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(()-> {tick();display.repaint();}, 0L, 1000L / 60L, TimeUnit.MILLISECONDS);
}
private void zuruecksetzen(){
won = false;
labyrinth.zuruecksetzen();
pacman.zuruecksetzen();
geistgegner.zuruecksetzen();
geistgegner2.zuruecksetzen();
}
public void win() {
won = true;
}
public void lose(){
JOptionPane.showMessageDialog(null, "Game Over!");
zuruecksetzen();
}
private void tick(){
if (won) {
JOptionPane.showMessageDialog(null, "Du hast gewonnen!");
zuruecksetzen();
}
pacman.tick();
geistgegner.tick();
geistgegner2.tick();
}
public void render(Graphics2D g2){
g2.setColor(Color.BLACK);
g2.fillRect(0,0,getWidth(), getHeight());
labyrinth.render(g2, labyrinth.getSpielobjektGröße());
pacman.render(g2, labyrinth.getSpielobjektGröße());
geistgegner.render(g2, labyrinth.getSpielobjektGröße());
geistgegner2.render(g2, labyrinth.getSpielobjektGröße());
}
public Labyrinth getLabyrinth(){
return labyrinth;
}
public GeistGegner getGegner() {
return geistgegner;
}
}