Newer
Older
import javafx.scene.image.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
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];
/**Random for Images */
Random rnd = new Random();
/**
* Provides styles allignment and the scenes for labels, buttons and boxes.
*
* @param stage starts the scene and is the main stage for the application
*/
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));
String imageSymbols = getClass().getResource("/textures/empty.png").toExternalForm();
Image image = new Image("" + imageSymbols);
ImageView imageView = new ImageView(image);
imageView.setFitWidth(135);
imageView.setFitHeight(135);
imageView.setPreserveRatio(true);
buttons[index].setGraphic(imageView);
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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 -> {
board = new Board(board.players, board.firstPlayer);
for(int i = 0; i < 9; i++){
int index = i;
String imageSymbols = getClass().getResource("/textures/empty.png").toExternalForm();
Image image = new Image("" + imageSymbols);
ImageView imageView = new ImageView(image);
imageView.setFitWidth(135);
imageView.setFitHeight(135);
imageView.setPreserveRatio(true);
buttons[index].setGraphic(imageView);
}
//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");
}
/**
* 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
* @param stage current scene
*/
private void handleTurn(int index, Stage stage){
board.tiles[index].setOwner(board.currentPlayer);
String imageSymbols = board.currentPlayer == 0 ? getClass().getResource("/textures/1_" + rnd.nextInt(3) + ".png").toExternalForm() :
getClass().getResource("/textures/0_" + rnd.nextInt(3) + ".png").toExternalForm();
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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
*/