import javax.swing.*; import java.awt.*; import java.awt.event.*; /** * Controller for the manual simulation view. * @version 1.0 * @author Amir Daouadi * @author Lyanis Souidi */ public class ManualSimulationController { /** * The simulation model */ private final ManualSimulation model; /** * The manual simulation view */ private final ManualSimulationView view; /** * The algorithm used for the simulation */ private Algo algo; /** * The next button */ private final Button nextButton = new Button("Coup suivant"); /** * Constructor * @param model The manual simulation model * @param view The manual simulation view */ public ManualSimulationController(ManualSimulationView view, ManualSimulation model) { this.model = model; this.view = view; JPanel buttons = new JPanel(); nextButton.addActionListener(e -> move()); buttons.add(nextButton); this.view.add(buttons, BorderLayout.NORTH); this.view.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { move(); } }); this.view.setFocusable(true); this.view.requestFocusInWindow(); run(); } /** * Run the simulation */ public void run() { if (this.model.getAlgoType() == AlgoType.RANDOM) { this.algo = new RandomAlgo(this.model.getGrid(), this.model.getSimulation()); } else { this.algo = new DeterministicAlgo(this.model.getGrid(), this.model.getSimulation()); } } /** * Makes the next move of the simulation */ private void move() { if (model.getSimulation().isEnded()) return; this.algo.nextMove(); this.view.repaint(); if (model.getSimulation().isEnded()) { nextButton.setEnabled(false); JOptionPane.showMessageDialog(view, "Partie terminée en " + model.getSimulation().getMoves() + " coups !", "Fin de partie", JOptionPane.INFORMATION_MESSAGE); } } }