Skip to content
Snippets Groups Projects

Add basic implementation

Merged Jan Peter Schweers requested to merge addBasicImplementation into develop
1 file
+ 3
6
Compare changes
  • Side-by-side
  • Inline
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) {
Loading