Player vs AI working in the UI

This commit is contained in:
Ticho Hidding
2025-09-20 02:28:55 +02:00
parent 651a57ef29
commit f620ccc489
2 changed files with 22 additions and 5 deletions

View File

@@ -24,6 +24,7 @@ public class UIGameBoard {
public UIGameBoard(LocalTicTacToe lttt, LocalGameSelector parent) {
this.parentSelector = parent;
this.localTicTacToe = lttt;
lttt.setUIReference(this);
// Root panel
tttPanel = new JPanel(new BorderLayout());
@@ -47,14 +48,14 @@ public class UIGameBoard {
for (int i = 0; i < sizeX * sizeY; i++) {
cells[i] = new JButton(" ");
cells[i].setFont(new Font("Arial", Font.BOLD, 100 / sizeX));
cells[i].setFont(new Font("Arial", Font.BOLD, 400 / sizeX));
panel.add(cells[i]);
final int index = i;
cells[i].addActionListener((ActionEvent e) -> {
int cp = this.localTicTacToe.getCurrentPlayersTurn();
if (cp == 1) { this.currentPlayer = "X"; currentPlayerIndex = 0; }
else if (cp == 2) { this.currentPlayer = "O"; currentPlayerIndex = 1; }
if (cp == 0) { this.currentPlayer = "X"; currentPlayerIndex = 0; }
else if (cp == 1) { this.currentPlayer = "O"; currentPlayerIndex = 1; }
this.localTicTacToe.move(index);
cells[index].setText(currentPlayer);
});
@@ -62,6 +63,10 @@ public class UIGameBoard {
return panel;
}
public void setCell(int index, String move){
System.out.println(cells[index].getText());
cells[index].setText(move);
}
public JPanel getTTTPanel() {
return tttPanel;

View File

@@ -4,6 +4,8 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.toop.eventbus.Events;
import org.toop.eventbus.GlobalEventBus;
import org.toop.frontend.UI.UIGameBoard;
import org.toop.game.GameBase;
import org.toop.game.tictactoe.MinMaxTicTacToe;
import org.toop.game.tictactoe.TicTacToe;
@@ -32,6 +34,7 @@ public class LocalTicTacToe { // TODO: Implement runnable
private boolean isAiPlayer[] = new boolean[2];
private MinMaxTicTacToe[] aiPlayers = new MinMaxTicTacToe[2];
private TicTacToe ticTacToe;
private UIGameBoard ui;
/**
@@ -136,13 +139,19 @@ public class LocalTicTacToe { // TODO: Implement runnable
if (!isAiPlayer[0]) {
this.ticTacToe.play(this.moveQueuePlayerA.take());
} else {
this.ticTacToe.play(aiPlayers[0].findBestMove(this.ticTacToe));
int bestMove = aiPlayers[0].findBestMove(this.ticTacToe);
if (this.ticTacToe.play(bestMove) != GameBase.State.INVALID) {
ui.setCell(bestMove, "X");
}
}
this.setNextPlayersTurn();
if (!isAiPlayer[1]) {
this.ticTacToe.play(this.moveQueuePlayerB.take());
} else {
this.ticTacToe.play(aiPlayers[1].findBestMove(this.ticTacToe));
int bestMove = aiPlayers[1].findBestMove(this.ticTacToe);
if (this.ticTacToe.play(bestMove) != GameBase.State.INVALID) {
ui.setCell(bestMove, "O");
}
}
this.setNextPlayersTurn();
} catch (InterruptedException e) {
@@ -214,4 +223,7 @@ public class LocalTicTacToe { // TODO: Implement runnable
GlobalEventBus.unregister(this.receivedMessageListener);
}
public void setUIReference(UIGameBoard uiGameBoard) {
this.ui = uiGameBoard;
}
}