From ad8be0859c1e74459b65fdde023003e7b134eb29 Mon Sep 17 00:00:00 2001
From: David Reiser <david.060903@gmail.com>
Date: Wed, 8 Jan 2025 04:20:41 +0100
Subject: [PATCH] win/tie screen after match with reset button

---
 GameUI.java | 39 +++++++++++++++++++++++++++++----------
 1 file changed, 29 insertions(+), 10 deletions(-)

diff --git a/GameUI.java b/GameUI.java
index 5e205ea..d3ccf47 100644
--- a/GameUI.java
+++ b/GameUI.java
@@ -9,9 +9,11 @@ import javafx.scene.layout.*;
 import javafx.stage.Stage;
 
 public class GameUI extends Application{
-
+    Scene game, winningScene;
+    BorderPane gameBorderPane, winningBorderPane;
     private Board board = new Board();
     private Label playerLabel = new Label("Player X's turn");
+    private Label winnerLabel = new Label("Won");
     private Label scoreLabelX = new Label("Player X: 0");
     private Label scoreLabelO= new Label("Player O: 0");
     private Button[] buttons = new Button[9]; 
@@ -22,21 +24,23 @@ public class GameUI extends Application{
     @Override
     public void start(Stage stage){
         playerLabel.setStyle("-fx-font-size: 30px; -fx-font-family: 'Impact'; -fx-text-fill: blue;");
+        winnerLabel.setStyle("-fx-font-size: 150px; -fx-font-family: 'Impact'; -fx-text-fill: blue;");
         scoreLabelX.setStyle("-fx-font-size: 30px; -fx-font-family: 'Impact'; -fx-text-fill: black;");
         scoreLabelO.setStyle("-fx-font-size: 30px; -fx-font-family: 'Impact'; -fx-text-fill: black;");
 
-        BorderPane borderPane= new BorderPane();
+        gameBorderPane = new BorderPane();
+        winningBorderPane = new BorderPane();
         GridPane gridPane = new GridPane(); 
 
         for(int i = 0; i < 9; i++){
             int index = i;
             buttons[i] = new Button();
             buttons[i].setPrefSize(150, 150);
-            buttons[i].setOnAction(e -> handleTurn(index));
+            buttons[i].setOnAction(e -> handleTurn(index, stage));
             gridPane.add(buttons[i], i % 3, i / 3);
         }
 
-        borderPane.setCenter(gridPane);
+        gameBorderPane.setCenter(gridPane);
 
         //HBox for the labels
         HBox Box = new HBox(20); 
@@ -59,7 +63,7 @@ public class GameUI extends Application{
         scoreBox.getChildren().addAll(scoreLabelX, scoreLabelO);
 
         Box.getChildren().add(scoreBox);
-        borderPane.setTop(Box);
+        gameBorderPane.setTop(Box);
         
         //board allignment 
         gridPane.setPadding(new Insets(10)); 
@@ -67,9 +71,22 @@ public class GameUI extends Application{
         gridPane.setVgap(30); 
         gridPane.setAlignment(Pos.CENTER);
 
+        //reset button
+        Button reset = new Button("Reset");
+        reset.setStyle("-fx-font-size: 30px; -fx-font-family: 'Impact'; -fx-text-fill: black;");
+        reset.setOnAction(e -> stage.setScene(game));
+        
+        //winning/tie screen
+        winnerLabel.setAlignment(Pos.CENTER);
+        VBox finalBox = new VBox(35);
+        finalBox.setAlignment(Pos.CENTER);
+        finalBox.getChildren().addAll(winnerLabel, reset);
+        winningBorderPane.setCenter(finalBox); 
+        winningScene = new Scene(winningBorderPane, 1500,850);
+
         //main Scene 
-        Scene scene = new Scene(borderPane, 1500, 850);
-        stage.setScene(scene);
+        game = new Scene(gameBorderPane, 1500, 850);
+        stage.setScene(game);
         stage.setTitle("Tick-Tack-Trauma");
         stage.show();
     } 
@@ -78,7 +95,7 @@ public class GameUI extends Application{
      * 
      * @param index of the selectet tile
      */
-    private void handleTurn(int index){
+    private void handleTurn(int index,Stage stage){
         if (board.tiles[index].exist_owner()) {
             return; 
         }
@@ -101,14 +118,16 @@ public class GameUI extends Application{
 
         //changes label state for the winning player and updates its score
         if (board.victoryCheck()) {
-            playerLabel.setText("Player " + (board.currentPlayer == 0 ? "X" : "O") + " wins!");
+            winnerLabel.setText("Player " + (board.currentPlayer == 0 ? "X" : "O") + " wins!");
             updatePlayerScore();
+            stage.setScene(winningScene);
             return; 
         } 
         
         //changes label state to draw
         if (board.marks == 9) {
-            playerLabel.setText("It's a draw!");
+            winnerLabel.setText("It's a draw!");
+            stage.setScene(winningScene);
             return; 
         }
     }
-- 
GitLab