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