Skip to content
Snippets Groups Projects
Select Git revision
  • 26c5ffb94b6bd8bdd36f4e873543d466f6a54cc2
  • main default protected
2 results

ComputerPlayer.java

Blame
  • Forked from TRAVERS Corentin / flooding-template
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Controller.java 2.10 KiB
    package controller;
    
    import javafx.animation.KeyFrame;
    import javafx.animation.Timeline;
    import javafx.fxml.FXML;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    import javafx.scene.control.ToggleButton;
    import javafx.util.Duration;
    import model.FirefighterBoard;
    import view.FirefighterGrid;
    
    public class Controller {
    
      private FirefighterBoard board;
      private Timeline timeline;
    
      @FXML
      private Label generationNumberLabel;
    
      @FXML
      private Button restartButton;
    
      @FXML
      private Button oneStepButton;
    
      @FXML
      private ToggleButton playToggleButton;
    
      @FXML
      private ToggleButton pauseToggleButton;
    
      @FXML
      private FirefighterGrid grid;
    
      public void initialize(int boxWidth, int boxHeight, int columns, int rows, int fireCount, int firefighterCount) {
        // Initialize the simulation board and connect it to the grid
        board = new FirefighterBoard(columns, rows, fireCount, firefighterCount);
        grid.initialize(columns, rows, boxWidth, boxHeight, board);
    
        // Initialize timeline for automatic progression
        timeline = new Timeline(new KeyFrame(Duration.seconds(1), event -> updateGame()));
        timeline.setCycleCount(Timeline.INDEFINITE);
    
        // Ensure initial UI state is consistent
        updateGenerationLabel();
        pauseToggleButton.setSelected(true);
        stopSimulation();
        board.reset();
        grid.repaint();
        updateGenerationLabel();
      }
    
    
      @FXML
      private void restartButtonAction() {
        stopSimulation();
        board.reset();
        grid.repaint();
        updateGenerationLabel();
      }
      @FXML
      private void oneStepButtonAction() {
        stopSimulation();
        updateGame();
      }
    
      @FXML
      private void playToggleButtonAction() {
        startSimulation();
      }
    
      @FXML
      private void pauseToggleButtonAction() {
        stopSimulation();
      }
    
      private void startSimulation() {
        timeline.play();
      }
    
      private void stopSimulation() {
        timeline.stop();
      }
    
      private void updateGame() {
        board.updateToNextGeneration();
        grid.repaint();
        updateGenerationLabel();
      }
    
      private void updateGenerationLabel() {
        generationNumberLabel.setText(String.valueOf(board.stepNumber()));
      }
    }