diff --git a/GameUI.java b/GameUI.java index d3ccf4716c461b0fbbf08838e7cda01dfaeb2c94..9a91fdf9fb6d4d2888072f8318172d9f1f609c11 100644 --- a/GameUI.java +++ b/GameUI.java @@ -1,158 +1,19 @@ import javafx.application.Application; -import javafx.geometry.Insets; -import javafx.geometry.Pos; import javafx.scene.Scene; -import javafx.scene.control.Label; -import javafx.scene.image.*; -import javafx.scene.control.Button; -import javafx.scene.layout.*; +import javafx.scene.layout.GridPane; 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]; - - /** Provides styles allignment and the scenes for labels, buttons and boxes. - * @param stage starts the scene and is the main stage for the 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;"); - - 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, stage)); - gridPane.add(buttons[i], i % 3, i / 3); - } - - gameBorderPane.setCenter(gridPane); - - //HBox for the labels - HBox Box = new HBox(20); - Box.setAlignment(Pos.CENTER); - playerLabel.setAlignment(Pos.TOP_CENTER); - playerLabel.setPadding(new Insets(10, 0, 15, 15)); - Box.getChildren().add(playerLabel); - - //space between the labels - Region spacer = new Region(); - HBox.setHgrow(spacer, Priority.ALWAYS); - Box.getChildren().add(spacer); - - //score labels design - scoreLabelX.setAlignment(Pos.TOP_CENTER); - scoreLabelO.setAlignment(Pos.TOP_CENTER); - VBox scoreBox = new VBox(15); - scoreBox.setPadding(new Insets(15, 25, 5, 5)); - scoreBox.setAlignment(Pos.TOP_RIGHT); - scoreBox.getChildren().addAll(scoreLabelX, scoreLabelO); - - Box.getChildren().add(scoreBox); - gameBorderPane.setTop(Box); - - //board allignment - gridPane.setPadding(new Insets(10)); - gridPane.setHgap(30); - 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 - game = new Scene(gameBorderPane, 1500, 850); - stage.setScene(game); - stage.setTitle("Tick-Tack-Trauma"); + GridPane GridPane = new GridPane(); + Scene scene = new Scene(GridPane, 300, 300); + stage.setScene(scene); + stage.setTitle("Tic-Tac-Toe"); stage.show(); - } - - /** method for the game updating its state including changing turn of the player and check for win or tie. Images are set as symbols. - * - * @param index of the selectet tile - */ - private void handleTurn(int index,Stage stage){ - if (board.tiles[index].exist_owner()) { - return; - } - board.tiles[index].set_owner(board.currentPlayer); - - //Replace symbols with images - String imageSymbols = board.currentPlayer == 0 ? getClass().getResource("/textures/1_0.png").toExternalForm() : getClass().getResource("/textures/0_0.png").toExternalForm(); - Image image = new Image(""+ imageSymbols); - ImageView imageView = new ImageView(image); - - //size of the image - imageView.setFitWidth(135); - imageView.setFitHeight(135); - imageView.setPreserveRatio(true); - - buttons[index].setGraphic(imageView); - - board.turnEnd(); - updatePlayerTurn(board.currentPlayer); - - //changes label state for the winning player and updates its score - if (board.victoryCheck()) { - winnerLabel.setText("Player " + (board.currentPlayer == 0 ? "X" : "O") + " wins!"); - updatePlayerScore(); - stage.setScene(winningScene); - return; - } - - //changes label state to draw - if (board.marks == 9) { - winnerLabel.setText("It's a draw!"); - stage.setScene(winningScene); - return; - } } - /** updates the label of the current player - * - * @param currentPlayer player whose turn it is - */ - private void updatePlayerTurn(int currentPlayer) { - String playerSymbol = (currentPlayer == 0) ? "X" : "O"; - playerLabel.setText("Player " + playerSymbol + "'s turn"); - } - - /** updates the score of a player who won - * - */ - private void updatePlayerScore(){ - scoreLabelX.setText("Player X: " + board.players[0].getPlayerScore()); - scoreLabelO.setText("Player O: " + board.players[1].getPlayerScore()); - } - /** starts the javafx application - * - * @param args - */ public void call(String[] args){ - launch(args); + launch(args); } } diff --git a/Tile.java b/Tile.java index b1fc002b4503f3b0bdf3a31ac0cd6a3a35d1d1d4..651c4b8c73b973f937ca4e72d9e6840f5285fe95 100644 --- a/Tile.java +++ b/Tile.java @@ -89,7 +89,7 @@ public class Tile extends ImageView{ /**Whether this Tile is owned by a Player */ public boolean exist_owner(){ - return owner != -1; + return owner > 0; } }