diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2520c752367f7ad06a2838ab1d048b1380296e6f
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,8 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="TrivialIf" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="ignoreChainedIf" value="true" />
+    </inspection_tool>
+  </profile>
+</component>
\ No newline at end of file
diff --git a/src/main/java/com/example/tictactoe_game/GameEvent.java b/src/main/java/com/example/tictactoe_game/GameEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..188dab95950a6a25b90d612a3a71c478ad8fe9c9
--- /dev/null
+++ b/src/main/java/com/example/tictactoe_game/GameEvent.java
@@ -0,0 +1,13 @@
+package com.example.tictactoe_game;
+
+import javafx.event.Event;
+import javafx.event.EventType;
+
+public class GameEvent extends Event {
+    public static final EventType<GameEvent> VICTORY_EVENT = new EventType<>("VICTORY_EVENT");
+    public static final EventType<GameEvent> DRAW_EVENT = new EventType<>("DRAW_EVENT");
+
+    public GameEvent(EventType<? extends Event> eventType) {
+        super(eventType);
+    }
+}
diff --git a/src/main/java/com/example/tictactoe_game/TicTacToeFX.java b/src/main/java/com/example/tictactoe_game/TicTacToeFX.java
index 8683ae6c05b341b058f0e4360bb5876a9d6e33aa..541023a671656b878999b91e74471650867d20c4 100644
--- a/src/main/java/com/example/tictactoe_game/TicTacToeFX.java
+++ b/src/main/java/com/example/tictactoe_game/TicTacToeFX.java
@@ -1,32 +1,194 @@
 package com.example.tictactoe_game;
 
 import javafx.application.Application;
+import javafx.event.EventHandler;
+import javafx.geometry.Pos;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.layout.GridPane;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Text;
+import javafx.stage.Modality;
 import javafx.stage.Stage;
 
 public class TicTacToeFX extends Application {
 
+    private final Button[][] buttons = new Button[3][3];
+
+    private boolean isXTurn = true;
+
+    private boolean isGameOver = false;
+
+    private Text currentPlayer;
+
+    private Text turnCounter;
+
+    private int currentTurn = 0;
+
     @Override
     public void start(Stage primaryStage) {
-        // Erstelle das Spielfeld
+
+        EventHandler<GameEvent> gameEventHandler = gameEvent -> {
+            String currentPlayer = this.isXTurn ? "X" : "O";
+
+            // Dialogfenster erstellen
+            final Stage dialog = new Stage();
+            dialog.initModality(Modality.APPLICATION_MODAL);
+            dialog.initOwner(primaryStage);
+
+            VBox dialogVbox = new VBox(20);
+            dialogVbox.setAlignment(Pos.CENTER);
+
+            // Dialogtexte
+            if (gameEvent.getEventType() == GameEvent.VICTORY_EVENT) {
+                dialogVbox.getChildren().add(new Text("This is a victory for player " + currentPlayer + " in turn " + this.currentTurn + "!"));
+            } else if (gameEvent.getEventType() == GameEvent.DRAW_EVENT) {
+                dialogVbox.getChildren().add(new Text("This is a Draw!"));
+            }
+
+            // Schaltfläche "Schließen"
+            Button closeButton = new Button("Close");
+            closeButton.setOnAction(event -> primaryStage.close());
+            dialogVbox.getChildren().add(closeButton);
+
+            //Schaltfläche "Restart"
+            Button restartButton = new Button("Restart");
+            restartButton.setOnAction(event -> {
+                restartGame();
+                dialog.close();
+            });
+            dialogVbox.getChildren().add(restartButton);
+
+
+            Scene dialogScene = new Scene(dialogVbox, 300, 200);
+            dialog.setScene(dialogScene);
+            dialog.show();
+        };
+
+        // Spielbrett erstellen
         GridPane grid = new GridPane();
 
         // 3x3 Buttons hinzufügen
         for (int row = 0; row < 3; row++) {
             for (int col = 0; col < 3; col++) {
                 Button button = new Button();
-                button.setPrefSize(100, 100); // Größe der Buttons
-                grid.add(button, col, row); // Hinzufügen zum Grid
+                button.setPrefSize(100, 100);
+                grid.add(button, col, row);
+                buttons[row][col] = button;
+                button.setOnAction(event -> handleButtonClick(button));
             }
         }
 
+        // Ereignisse für Sieg und Unentschieden hinzufügen
+        grid.addEventHandler(GameEvent.VICTORY_EVENT, gameEventHandler);
+        grid.addEventHandler(GameEvent.DRAW_EVENT, gameEventHandler);
+
+        // Texte für aktuellen Spieler und Züge
+        currentPlayer = new Text("Current Player: " + (isXTurn ? "X" : "O"));
+        turnCounter = new Text("Current Turn: " + currentTurn);
+
+        // Elemente dem Spielfeld hinzufügen
+        Button restartButton = new Button("Restart");
+        restartButton.setOnAction(event -> restartGame());
+
+        VBox vbox = new VBox(10);
+        vbox.setAlignment(Pos.CENTER);
+        vbox.getChildren().addAll(grid, currentPlayer, turnCounter, restartButton);
+
         // Szene und Stage erstellen
-        Scene scene = new Scene(grid, 300, 300); // Größe der Szene
+        Scene scene1 = new Scene(vbox, 300, 400);
         primaryStage.setTitle("Tic-Tac-Toe");
-        primaryStage.setScene(scene);
+        primaryStage.setScene(scene1);
         primaryStage.show();
+
+
+    }
+
+    private  void  restartGame(){
+        isXTurn = true;
+        isGameOver = false;
+        currentTurn = 0;
+        currentPlayer.setText("Current Player: X");
+        turnCounter.setText("Current Turn: 0");
+
+        for(int i = 0; i < 3; i++){
+            for(int j = 0; j < 3; j++){
+                buttons[i][j].setText("");
+            }
+        }
+
+    }
+
+
+    private void handleButtonClick(Button button) {
+        if (button.getText().isEmpty() && !this.isGameOver) {
+            if (this.isXTurn) {
+                button.setText("X");
+                this.currentTurn++;
+            } else {
+                button.setText("O");
+            }
+            turnCounter.setText("Current Turn: " + currentTurn);
+
+            if (checkForWin()) {
+                this.isGameOver = true;
+                button.fireEvent(new GameEvent(GameEvent.VICTORY_EVENT));
+            } else if (checkForDraw()) {
+                this.isGameOver = true;
+                button.fireEvent(new GameEvent(GameEvent.DRAW_EVENT));
+            }
+
+            this.isXTurn = !this.isXTurn;
+            currentPlayer.setText("Current Player: " + (isXTurn ? "X" : "O"));
+
+        }
+    }
+
+    private boolean checkForWin() {
+        for (int row = 0; row < 3; row++) {
+            String text1 = buttons[row][0].getText();
+            String text2 = buttons[row][1].getText();
+            String text3 = buttons[row][2].getText();
+            if (!text1.isEmpty() && text1.equals(text2) && text1.equals(text3)) {
+                return true;
+            }
+        }
+
+        for (int col = 0; col < 3; col++) {
+            String text1 = buttons[0][col].getText();
+            String text2 = buttons[1][col].getText();
+            String text3 = buttons[2][col].getText();
+            if (!text1.isEmpty() && text1.equals(text2) && text1.equals(text3)) {
+                return true;
+            }
+        }
+
+        String upperLeftCorner = buttons[0][0].getText();
+        String center = buttons[1][1].getText();
+        String lowerRightCorner = buttons[2][2].getText();
+        String upperRightCorner = buttons[0][2].getText();
+        String lowerLeftCorner = buttons[2][0].getText();
+
+        if (!upperLeftCorner.isEmpty() && upperLeftCorner.equals(center) && upperLeftCorner.equals(lowerRightCorner)) {
+            return true;
+        }
+
+        if (!upperRightCorner.isEmpty() && upperRightCorner.equals(center) && upperRightCorner.equals(lowerLeftCorner)) {
+            return true;
+        }
+
+        return false;
+    }
+
+    private boolean checkForDraw() {
+        for (int row = 0; row < 3; row++) {
+            for (int col = 0; col < 3; col++) {
+                if (buttons[row][col].getText().isEmpty()) {
+                    return false;
+                }
+            }
+        }
+        return true;
     }
 
     public static void main(String[] args) {