103 lines
2.5 KiB
Java
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;
|
|
}
|
|
}
|