Merge remote-tracking branch 'origin/Development' into Development

This commit is contained in:
ramollia
2025-11-27 18:50:12 +01:00
5 changed files with 35 additions and 34 deletions

View File

@@ -6,6 +6,7 @@ import org.toop.app.widget.view.GameView;
import org.toop.framework.eventbus.EventFlow;
import org.toop.framework.networking.events.NetworkEvents;
import org.toop.game.Game;
import org.toop.game.records.Move;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
@@ -18,7 +19,7 @@ public abstract class BaseGameThread<TGame extends Game, TAI, TCanvas> {
protected final GameInformation information;
protected final int myTurn;
protected final Runnable onGameOver;
protected final BlockingQueue<Game.Move> moveQueue;
protected final BlockingQueue<Move> moveQueue;
protected final TGame game;
protected final TAI ai;
@@ -84,7 +85,7 @@ public abstract class BaseGameThread<TGame extends Game, TAI, TCanvas> {
final char value = getSymbolForTurn(currentTurn);
try {
moveQueue.put(new Game.Move(cell, value));
moveQueue.put(new Move(cell, value));
} catch (InterruptedException _) {}
}

View File

@@ -27,7 +27,7 @@ public final class ReversiGame {
private final int myTurn;
private final Runnable onGameOver;
private final BlockingQueue<Game.Move> moveQueue;
private final BlockingQueue<Move> moveQueue;
private final Reversi game;
private final ReversiAI ai;
@@ -213,7 +213,7 @@ public final class ReversiGame {
primary.gameOver(false, information.players[1].name);
gameOver();
}
} else if (state == Game.State.DRAW) {
} else if (state == GameState.DRAW) {
primary.gameOver(false, "");
game.play(move);
}
@@ -289,7 +289,7 @@ public final class ReversiGame {
if (information.players[game.getCurrentTurn()].isHuman) {
final Move[] legalMoves = game.getLegalMoves();
for (final Game.Move legalMove : legalMoves) {
for (final Move legalMove : legalMoves) {
canvas.drawLegalPosition(legalMove.position(), game.getCurrentPlayer());
}
}

View File

@@ -25,7 +25,7 @@ public final class TicTacToeGame {
private final int myTurn;
private final Runnable onGameOver;
private final BlockingQueue<Game.Move> moveQueue;
private final BlockingQueue<Move> moveQueue;
private final TicTacToe game;
private final TicTacToeAI ai;
@@ -152,10 +152,10 @@ public final class TicTacToeGame {
canvas.drawO(Color.ROYALBLUE, move.position());
}
if (state != Game.State.NORMAL) {
if (state == Game.State.WIN) {
if (state != GameState.NORMAL) {
if (state == GameState.WIN) {
primary.gameOver(true, information.players[currentTurn].name);
} else if (state == Game.State.DRAW) {
} else if (state == GameState.DRAW) {
primary.gameOver(false, "");
}

View File

@@ -5,7 +5,8 @@ import org.toop.app.GameInformation;
import org.toop.app.canvas.TicTacToeCanvas;
import org.toop.framework.eventbus.EventFlow;
import org.toop.framework.networking.events.NetworkEvents;
import org.toop.game.Game;
import org.toop.game.enumerators.GameState;
import org.toop.game.records.Move;
import org.toop.game.tictactoe.TicTacToe;
import org.toop.game.tictactoe.TicTacToeAI;
@@ -47,7 +48,7 @@ public final class TicTacToeGameThread extends BaseGameThread<TicTacToe, TicTacT
return turn == 0 ? "X" : "O";
}
private void drawMove(Game.Move move) {
private void drawMove(Move move) {
if (move.value() == 'X') canvas.drawX(Color.RED, move.position());
else canvas.drawO(Color.BLUE, move.position());
}
@@ -66,11 +67,11 @@ public final class TicTacToeGameThread extends BaseGameThread<TicTacToe, TicTacT
playerChar = myTurn == 0? 'O' : 'X';
}
final Game.Move move = new Game.Move(Integer.parseInt(response.move()), playerChar);
final Game.State state = game.play(move);
final Move move = new Move(Integer.parseInt(response.move()), playerChar);
final GameState state = game.play(move);
if (state != Game.State.NORMAL) {
if (state == Game.State.WIN) {
if (state != GameState.NORMAL) {
if (state == GameState.WIN) {
if (response.player().equalsIgnoreCase(information.players[0].name)) {
primary.gameOver(true, information.players[0].name);
gameOver();
@@ -78,7 +79,7 @@ public final class TicTacToeGameThread extends BaseGameThread<TicTacToe, TicTacT
primary.gameOver(false, information.players[1].name);
gameOver();
}
} else if (state == Game.State.DRAW) {
} else if (state == GameState.DRAW) {
if (game.getLegalMoves().length == 0) {
primary.gameOver(false, "");
gameOver();
@@ -105,7 +106,7 @@ public final class TicTacToeGameThread extends BaseGameThread<TicTacToe, TicTacT
position = moveQueue.take().position();
} catch (InterruptedException _) {}
} else {
final Game.Move move;
final Move move;
if (information.players[1].name.equalsIgnoreCase("pism")) {
move = ai.findWorstMove(game,9);
}else{
@@ -126,14 +127,14 @@ public final class TicTacToeGameThread extends BaseGameThread<TicTacToe, TicTacT
final int currentTurn = game.getCurrentTurn();
setGameLabels(currentTurn == myTurn);
Game.Move move = null;
Move move = null;
if (information.players[currentTurn].isHuman) {
try {
final Game.Move wants = moveQueue.take();
final Game.Move[] legalMoves = game.getLegalMoves();
final Move wants = moveQueue.take();
final Move[] legalMoves = game.getLegalMoves();
for (final Game.Move legalMove : legalMoves) {
for (final Move legalMove : legalMoves) {
if (legalMove.position() == wants.position() &&
legalMove.value() == wants.value()) {
move = wants;
@@ -160,13 +161,13 @@ public final class TicTacToeGameThread extends BaseGameThread<TicTacToe, TicTacT
continue;
}
final Game.State state = game.play(move);
final GameState state = game.play(move);
drawMove(move);
if (state != Game.State.NORMAL) {
if (state == Game.State.WIN) {
if (state != GameState.NORMAL) {
if (state == GameState.WIN) {
primary.gameOver(information.players[currentTurn].isHuman, information.players[currentTurn].name);
} else if (state == Game.State.DRAW) {
} else if (state == GameState.DRAW) {
primary.gameOver(false, "");
}

View File

@@ -1,26 +1,25 @@
package org.toop.game;
public abstract class TurnBasedGame extends Game {
private final int turns;
private int currentTurn;
private final int playerCount; // How many players are playing
private int turn = 0; // What turn it is in the game
protected TurnBasedGame(int rowSize, int columnSize, int turns) {
protected TurnBasedGame(int rowSize, int columnSize, int playerCount) {
super(rowSize, columnSize);
assert turns >= 2;
this.turns = turns;
this.playerCount = playerCount;
}
protected TurnBasedGame(TurnBasedGame other) {
super(other);
turns = other.turns;
currentTurn = other.currentTurn;
playerCount = other.playerCount;
turn = other.turn;
}
protected void nextTurn() {
currentTurn = (currentTurn + 1) % turns;
turn += 1;
}
public int getCurrentTurn() {
return currentTurn;
return turn % playerCount;
}
}