diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index eb314d9..7b909ba 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -41,6 +41,8 @@ public final class App extends Application { stage.setWidth(1080); stage.setHeight(720); + scene.getRoot(); + stage.setMinWidth(1080); stage.setMinHeight(720); stage.setOnCloseRequest(event -> { diff --git a/app/src/main/java/org/toop/app/canvas/ReversiCanvas.java b/app/src/main/java/org/toop/app/canvas/ReversiCanvas.java index c1b24f7..b3f1628 100644 --- a/app/src/main/java/org/toop/app/canvas/ReversiCanvas.java +++ b/app/src/main/java/org/toop/app/canvas/ReversiCanvas.java @@ -80,7 +80,5 @@ public final class ReversiCanvas extends GameCanvas { innerColor = new Color(1.0f, 1.0f, 1.0f, 0.75f); } drawInnerDot(innerColor, cell,false); - public void drawLegalPosition(Color color, int cell) { - drawDot(new Color(color.getRed(), color.getGreen(), color.getBlue(), 0.25), cell); } } \ No newline at end of file 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 a65805e..b70e6ab 100644 --- a/app/src/main/java/org/toop/app/game/ReversiGame.java +++ b/app/src/main/java/org/toop/app/game/ReversiGame.java @@ -28,8 +28,6 @@ public final class ReversiGame { private final int myTurn; private final Runnable onGameOver; private final BlockingQueue moveQueue; - private Runnable onGameOver; - private final BlockingQueue moveQueue; private final Reversi game; private final ReversiAI ai; @@ -167,16 +165,15 @@ public final class ReversiGame { final GameState state = game.play(move); updateCanvas(true); - if (state != Game.State.NORMAL) { - if (state == Game.State.WIN) { - primary.gameOver(true, information.players[currentTurn].name); - } else if (state == Game.State.DRAW) { - primary.gameOver(false, ""); if (state != GameState.NORMAL) { - if (state == GameState.WIN) { - view.gameOver(true, information.players[currentTurn].name); - } else if (state == GameState.DRAW) { - view.gameOver(false, ""); + if (state == GameState.TURN_SKIPPED){ + continue; + } + int winningPLayerNumber = getPlayerNumberWithHighestScore(); + if (state == GameState.WIN && winningPLayerNumber > -1) { + primary.gameOver(true, information.players[winningPLayerNumber].name); + } else if (state == GameState.DRAW || winningPLayerNumber == -1) { + primary.gameOver(false, ""); } isRunning.set(false); @@ -184,6 +181,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; @@ -209,8 +213,8 @@ public final class ReversiGame { primary.gameOver(false, information.players[1].name); gameOver(); } - } else if (state == GameState.DRAW) { - view.gameOver(false, ""); + } else if (state == Game.State.DRAW) { + primary.gameOver(false, ""); game.play(move); } } @@ -282,13 +286,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 Game.Move legalMove : legalMoves) { - canvas.drawLegalPosition(fromColor, legalMove.position()); - } + for (final Game.Move legalMove : legalMoves) { + canvas.drawLegalPosition(legalMove.position(), game.getCurrentPlayer()); + } + } }); animation.play(); @@ -305,23 +309,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/app/src/main/java/org/toop/app/game/TicTacToeGame.java b/app/src/main/java/org/toop/app/game/TicTacToeGame.java index 84fc237..427d09f 100644 --- a/app/src/main/java/org/toop/app/game/TicTacToeGame.java +++ b/app/src/main/java/org/toop/app/game/TicTacToeGame.java @@ -24,8 +24,8 @@ public final class TicTacToeGame { private final GameInformation information; private final int myTurn; - private Runnable onGameOver; - private final BlockingQueue moveQueue; + private final Runnable onGameOver; + private final BlockingQueue 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 != GameState.NORMAL) { - if (state == GameState.WIN) { + if (state != Game.State.NORMAL) { + if (state == Game.State.WIN) { primary.gameOver(true, information.players[currentTurn].name); - } else if (state == GameState.DRAW) { + } else if (state == Game.State.DRAW) { primary.gameOver(false, ""); } diff --git a/app/src/main/java/org/toop/app/view/displays/SongDisplay.java b/app/src/main/java/org/toop/app/view/displays/SongDisplay.java index f21e2aa..3bd8a6c 100644 --- a/app/src/main/java/org/toop/app/view/displays/SongDisplay.java +++ b/app/src/main/java/org/toop/app/view/displays/SongDisplay.java @@ -108,6 +108,10 @@ public class SongDisplay extends VBox implements Widget { return time; } + @Override + public Node getNode() { + return this; + } private String getPlayString(boolean paused) { if (paused) { return "▶"; @@ -116,11 +120,6 @@ public class SongDisplay extends VBox implements Widget { return "⏸"; } } - - @Override - public Node getNode() { - return this; - } } diff --git a/app/src/main/java/org/toop/local/AppContext.java b/app/src/main/java/org/toop/local/AppContext.java index 59092f5..0097473 100644 --- a/app/src/main/java/org/toop/local/AppContext.java +++ b/app/src/main/java/org/toop/local/AppContext.java @@ -1,5 +1,10 @@ package org.toop.local; +import java.util.Locale; +import java.util.MissingResourceException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.toop.framework.resource.ResourceManager; import org.toop.framework.resource.resources.LocalizationAsset; @@ -14,9 +19,8 @@ public class AppContext { private static final LocalizationAsset localization = ResourceManager.get("localization"); private static Locale locale = Locale.forLanguageTag("en"); - private static final Logger logger = LogManager.getLogger(AppContext.class); - private static final ObjectProperty localeProperty = new SimpleObjectProperty<>(locale); + private static final Logger logger = LogManager.getLogger(AppContext.class); public static LocalizationAsset getLocalization() { return localization;