diff --git a/src/SceneController.java b/src/SceneController.java index 3d67bf7a71f49b128a7a3a1f5efce68a76dd4c43..00f90215c8f168ad8a5a219e42fc1a747c824032 100644 --- a/src/SceneController.java +++ b/src/SceneController.java @@ -13,7 +13,7 @@ public class SceneController { private Actor player; private Actor enemy; - public boolean playerTurn = true; + public int playerTurn = 1; public void initData(Board board, Actor player, Actor enemy) { this.board = board; @@ -22,7 +22,7 @@ public class SceneController { } public void playerTurn(){ - this.playerTurn = true; + this.playerTurn = 1; turnlabel.setText("Your Turn"); } @@ -53,12 +53,30 @@ public class SceneController { buttonList.add(button9); } - public void aiTurn(int col, int row){ + public void aiTurn(){ + // AI's Turn + playerTurn = 0; + turnlabel.setText("AI's Turn"); + int[] coordinates = enemy.makeMove(board); + // DEBUG + System.out.println("Enemy: " + coordinates[0] + ", " + coordinates[1]); initialize(); - buttonList.get(col + row).setText("o"); + buttonList.get(coordinates[0] + coordinates[1]).setText("o"); playerTurn(); } + 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; + } + } // Diese Funktion wird beim Button-Click aufgerufen @FXML @@ -71,15 +89,16 @@ public class SceneController { int row = GridPane.getRowIndex(pressedButton); // Zeilen-Koordinate int col = GridPane.getColumnIndex(pressedButton); // Spalten-Koordinate - if(buttonText.equals(" ") && playerTurn) { + over(); + + if(buttonText.equals(" ") && playerTurn == 1) { // Setze X pressedButton.setText("X"); player.makeMove(board, col, row); + over(); - // AI's Turn - playerTurn = false; - turnlabel.setText("AI's Turn"); + aiTurn(); } } diff --git a/src/TicTacToe.java b/src/TicTacToe.java index 0e6bd068002ae61e4744119dfb13c9a22381a997..2e475b3f9f64a367d083ce3e87430dbb56ac21db 100644 --- a/src/TicTacToe.java +++ b/src/TicTacToe.java @@ -42,26 +42,6 @@ public class TicTacToe extends Application { launch(args); - while (!board.checkForWin()){ - - if (sceneController.playerTurn) { - // TODO Spieler ist am Zug - continue; - - } else { - // TODO Gegner ist am Zug - - - } - // TODO Spielablauf - - } - - // TODO Spiel beenden - - // TODO Gewinner verkünden - - // TODO Option zum Neustart } } diff --git a/src/logic/Actor.java b/src/logic/Actor.java index ded26e333faffc6c585e6c89129a791716b64175..fe7d09658d415531c70883f348fc3a741f6ea595 100644 --- a/src/logic/Actor.java +++ b/src/logic/Actor.java @@ -8,4 +8,20 @@ public interface Actor { public char getSymbol(); public void setSymbol(char symbol); + // Methode für Spieler mit Koordinaten + default boolean makeMove(Board board, int x, int y) { + return board.placeToken(x, y, symbol); + } + + // Methode für Gegner (Zufallsgenerator) + default int[] makeMove(Board board) { + Random random = new Random(); + int x, y; + do { + x = random.nextInt(3); + y = random.nextInt(3); + } while (!board.placeToken(x, y, symbol)); + int[] coordinates = {x, y}; + return coordinates; + } } diff --git a/src/logic/Enemy.java b/src/logic/Enemy.java index 215d22acb597b28c49eef8d0530dfbd771408d17..14bc12b474aabb6764b3584b283b1e3d5db434a8 100644 --- a/src/logic/Enemy.java +++ b/src/logic/Enemy.java @@ -1,7 +1,5 @@ package logic; -import java.util.Random; - public class Enemy implements Actor { public char symbol; public Enemy() { @@ -18,16 +16,4 @@ public class Enemy implements Actor { this.symbol = symbol; } - // Methode, um den nächsten Zug des Akteurs zu machen - public boolean makeMove(Board board) { - Random random = new Random(); - int x; - int y; - do { - x = random.nextInt(3); - y = random.nextInt(3); - } while (!board.placeToken(x, y, symbol)); - return true; - } - } diff --git a/src/logic/Player.java b/src/logic/Player.java index 1c5bf77e745029a2c80f14ededd6d56d0a0f7659..a7b263ba0e45e31f4d01ccd2ae7cf2e662524117 100644 --- a/src/logic/Player.java +++ b/src/logic/Player.java @@ -16,10 +16,4 @@ public class Player implements Actor { this.symbol = symbol; } - // Methode, um den nächsten Zug des Akteurs zu machen - - public boolean makeMove(Board board, int x, int y) { - return board.placeToken(x, y, symbol); - } - }