From 81f4d307a2157d45a8cb200d21ae7ff796e22f39 Mon Sep 17 00:00:00 2001 From: Ticho Hidding Date: Thu, 27 Nov 2025 15:41:09 +0100 Subject: [PATCH] fixed turn skip bug fixed end score bug now only shows legal and highlight moves when human --- .../java/org/toop/app/game/ReversiGame.java | 57 ++++++++++++------- .../java/org/toop/game/reversi/ReversiAI.java | 1 + 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/toop/app/game/ReversiGame.java b/app/src/main/java/org/toop/app/game/ReversiGame.java index ec9a5e6..660a6a2 100644 --- a/app/src/main/java/org/toop/app/game/ReversiGame.java +++ b/app/src/main/java/org/toop/app/game/ReversiGame.java @@ -168,9 +168,13 @@ public final class ReversiGame { updateCanvas(true); if (state != GameState.NORMAL) { - if (state == GameState.WIN) { - view.gameOver(true, information.players[currentTurn].name); - } else if (state == GameState.DRAW) { + if (state == GameState.TURN_SKIPPED){ + continue; + } + int winningPLayerNumber = getPlayerNumberWithHighestScore(); + if (state == GameState.WIN && winningPLayerNumber > -1) { + view.gameOver(true, information.players[winningPLayerNumber].name); + } else if (state == GameState.DRAW || winningPLayerNumber == -1) { view.gameOver(false, ""); } @@ -179,6 +183,13 @@ public final class ReversiGame { } } + private int getPlayerNumberWithHighestScore(){ + Reversi.Score score = game.getScore(); + if (score.player1Score() > score.player2Score()) return 0; + if (score.player1Score() < score.player2Score()) return 1; + return -1; + } + private void onMoveResponse(NetworkEvents.GameMoveResponse response) { if (!isRunning.get()) { return; @@ -287,11 +298,13 @@ public final class ReversiGame { animation.setOnFinished(_ -> { isPaused.set(false); - final Move[] legalMoves = game.getLegalMoves(); + if (information.players[game.getCurrentTurn()].isHuman) { + final Move[] legalMoves = game.getLegalMoves(); - for (final Move legalMove : legalMoves) { - canvas.drawLegalPosition(legalMove.position(), game.getCurrentPlayer()); - } + for (final Move legalMove : legalMoves) { + canvas.drawLegalPosition(legalMove.position(), game.getCurrentPlayer()); + } + } }); animation.play(); @@ -308,23 +321,25 @@ public final class ReversiGame { } private void highlightCells(int cellEntered) { - Move[] legalMoves = game.getLegalMoves(); - boolean isLegalMove = false; - for (Move move : legalMoves) { - if (move.position() == cellEntered){ - isLegalMove = true; - break; + if (information.players[game.getCurrentTurn()].isHuman) { + Move[] legalMoves = game.getLegalMoves(); + boolean isLegalMove = false; + for (Move move : legalMoves) { + if (move.position() == cellEntered){ + isLegalMove = true; + break; + } } - } - if (cellEntered >= 0){ - Move[] moves = null; - if (isLegalMove) { - moves = game.getFlipsForPotentialMove( - new Point(cellEntered%game.getColumnSize(),cellEntered/game.getRowSize()), - game.getCurrentPlayer()); + if (cellEntered >= 0){ + Move[] moves = null; + if (isLegalMove) { + moves = game.getFlipsForPotentialMove( + new Point(cellEntered%game.getColumnSize(),cellEntered/game.getRowSize()), + game.getCurrentPlayer()); + } + canvas.drawHighlightDots(moves); } - canvas.drawHighlightDots(moves); } } } \ No newline at end of file diff --git a/game/src/main/java/org/toop/game/reversi/ReversiAI.java b/game/src/main/java/org/toop/game/reversi/ReversiAI.java index 495db52..2fc78d5 100644 --- a/game/src/main/java/org/toop/game/reversi/ReversiAI.java +++ b/game/src/main/java/org/toop/game/reversi/ReversiAI.java @@ -8,6 +8,7 @@ public final class ReversiAI extends AI { public Move findBestMove(Reversi game, int depth) { Move[] moves = game.getLegalMoves(); int inty = (int)(Math.random() * moves.length-.5f); + if (moves.length == 0) return null; return moves[inty]; } }