Skip to content
Snippets Groups Projects
SceneController.java 3.46 KiB
Newer Older
Nick's avatar
Nick committed
import javafx.fxml.FXML;
import javafx.scene.control.Button;
Nick's avatar
Nick committed
import javafx.event.ActionEvent;
Nick's avatar
Nick committed
import javafx.scene.control.Label;
Nick's avatar
Nick committed
import javafx.scene.layout.GridPane;
import logic.*;
Nick's avatar
Nick committed

Nick's avatar
Nick committed
import java.util.ArrayList;
import java.util.List;
Nick's avatar
Nick committed
import java.util.concurrent.TimeUnit;
Nick's avatar
Nick committed

Nick's avatar
Nick committed
public class SceneController {
    private Board board;
Jan's avatar
Jan committed
    private Actor player;
    private Actor enemy;
Nick's avatar
Nick committed
    private int moves = 0;

Nick's avatar
Nick committed
    public int playerTurn = 1;
Nick's avatar
Nick committed

Jan's avatar
Jan committed
    public void initData(Board board, Actor player, Actor enemy) {
        this.board = board;
        this.player = player;
        this.enemy = enemy;
    }
Nick's avatar
Nick committed

Nick's avatar
Nick committed
    public void playerTurn(){
Nick's avatar
Nick committed
        this.playerTurn = 1;
Nick's avatar
Nick committed
        turnlabel.setText("Your Turn");
Nick's avatar
Nick committed
    }

Nick's avatar
Nick committed
    @FXML
Nick's avatar
Nick committed
    private GridPane gridPane;

Nick's avatar
Nick committed
    @FXML
    private Label turnlabel;

Nick's avatar
Nick committed
    @FXML
    private Button button1, button2, button3, button4, button5, button6, button7, button8, button9;

Nick's avatar
Nick committed
    @FXML
    private List<Button> buttonList;

    @FXML
    public void initialize() {
        // Liste der Buttons erstellen und Buttons hinzufügen
        buttonList = new ArrayList<>();
        buttonList.add(button1);
        buttonList.add(button2);
        buttonList.add(button3);
        buttonList.add(button4);
        buttonList.add(button5);
        buttonList.add(button6);
        buttonList.add(button7);
        buttonList.add(button8);
        buttonList.add(button9);
    }

Nick's avatar
Nick committed
    public void aiTurn(){
        // AI's Turn
Nick's avatar
Nick committed
        //TimeUnit.SECONDS.sleep(2);
Nick's avatar
Nick committed
        playerTurn = 0;
        turnlabel.setText("AI's Turn");
        int[] coordinates = enemy.makeMove(board);
        // DEBUG
        System.out.println("Enemy: " + coordinates[0] + ", " + coordinates[1]);
Nick's avatar
Nick committed
        initialize();
Nick's avatar
Nick committed


        buttonList.get(coordinates[0] + coordinates[1] * 3).setText("o");


Nick's avatar
Nick committed
        playerTurn();
    }

Nick's avatar
Nick committed
    public void over(){
        if(board.checkForWin()){
            System.out.println("Game is over!");
            if(playerTurn == 0){
                turnlabel.setText("You win!");
            }else if(playerTurn == 1){
                turnlabel.setText("You lose!");
            }

            playerTurn = -1;
        }
    }
Nick's avatar
Nick committed

Nick's avatar
Nick committed
    @FXML
    private void restartGame(ActionEvent event) {
        initData( new Board(),this.player, this.enemy);
        moves = 0;
        playerTurn = 1;
        initialize();
        for(int i = 0; i < buttonList.size(); i++){
            buttonList.get(i).setText(" ");
        }
    }

Nick's avatar
Nick committed
    // Diese Funktion wird beim Button-Click aufgerufen
    @FXML
Nick's avatar
Nick committed
    private void handleButtonClick(ActionEvent event) {
Nick's avatar
Nick committed
        Button pressedButton = (Button) event.getSource();  // Das gedrückte Button-Objekt wird extrahiert
        String buttonText = pressedButton.getText();  // Der Text des gedrückten Buttons wird extrahiert

        // Zugriff auf die Koordinaten des Buttons:
        int row = GridPane.getRowIndex(pressedButton);  // Zeilen-Koordinate
        int col = GridPane.getColumnIndex(pressedButton);  // Spalten-Koordinate

Nick's avatar
Nick committed

Nick's avatar
Nick committed

        if(buttonText.equals(" ") && playerTurn == 1) {
Nick's avatar
Nick committed
            // Setze X
            pressedButton.setText("X");
Nick's avatar
Nick committed
            moves++;
Nick's avatar
Nick committed
            player.makeMove(board, col, row);
Nick's avatar
Nick committed
            playerTurn = 0;
Nick's avatar
Nick committed
            over();
Nick's avatar
Nick committed
            if(moves == 9 && playerTurn != -1){
Nick's avatar
Nick committed
                turnlabel.setText("Draw!");
                playerTurn = -1;
            }
Nick's avatar
Nick committed

Nick's avatar
Nick committed
            if(playerTurn == 0){
                aiTurn();
Nick's avatar
Nick committed
                moves++;
Nick's avatar
Nick committed
                over();
            }
Nick's avatar
Nick committed
            board.printBoard();
Nick's avatar
Nick committed
        }
Nick's avatar
Nick committed
    }
}