Skip to content
Snippets Groups Projects
Commit e2efc498 authored by Jan Peter Schweers's avatar Jan Peter Schweers
Browse files

Merge branch 'addBasicImplementation' into 'develop'

Add basic implementation

See merge request !5
parents 18a96310 222eb3f8
No related branches found
No related tags found
2 merge requests!6Add final version of the game to main branch,!5Add basic implementation
<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
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);
}
}
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) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment