diff --git a/app/src/main/java/org/toop/app/Server.java b/app/src/main/java/org/toop/app/Server.java index c451c3f..d470389 100644 --- a/app/src/main/java/org/toop/app/Server.java +++ b/app/src/main/java/org/toop/app/Server.java @@ -223,7 +223,7 @@ public final class Server { Player[] players = new Player[2]; players[(myTurn + 1) % 2] = new OnlinePlayer<>(response.opponent()); players[myTurn] = new ArtificialPlayer<>(new RandomAI(), user); - gameController = new ReversiBitController(players);} + gameController = new ReversiBitController(players, false);} default -> new ErrorPopup("Unsupported game type."); } diff --git a/app/src/main/java/org/toop/app/canvas/ReversiBitCanvas.java b/app/src/main/java/org/toop/app/canvas/ReversiBitCanvas.java index 8246470..9a1c684 100644 --- a/app/src/main/java/org/toop/app/canvas/ReversiBitCanvas.java +++ b/app/src/main/java/org/toop/app/canvas/ReversiBitCanvas.java @@ -5,8 +5,14 @@ import org.toop.app.App; import org.toop.game.games.reversi.BitboardReversi; public class ReversiBitCanvas extends BitGameCanvas implements BitLegalMoveDrawer { - public ReversiBitCanvas() { + + private final boolean switchColors; + private final boolean local; + + public ReversiBitCanvas(boolean switchColors, boolean local) { super(Color.GRAY, new Color(0f, 0.4f, 0.2f, 1f), (App.getHeight() / 4) * 3, (App.getHeight() / 4) * 3, 8, 8, 5, true); + this.switchColors = switchColors; + this.local = local; canvas.setOnMouseMoved(event -> { double mouseX = event.getX(); double mouseY = event.getY(); @@ -33,8 +39,13 @@ public class ReversiBitCanvas extends BitGameCanvas implements public void redraw(BitboardReversi gameCopy) { clearAll(); long[] board = gameCopy.getBoard(); - loopOverBoard(board[0], (i) -> drawDot(Color.WHITE, i)); - loopOverBoard(board[1], (i) -> drawDot(Color.BLACK, i)); + if (switchColors && local) { + loopOverBoard(board[0], (i) -> drawDot(Color.BLACK, i)); + loopOverBoard(board[1], (i) -> drawDot(Color.WHITE, i)); + } else { + loopOverBoard(board[0], (i) -> drawDot(Color.WHITE, i)); + loopOverBoard(board[1], (i) -> drawDot(Color.BLACK, i)); + } } @Override @@ -45,12 +56,22 @@ public class ReversiBitCanvas extends BitGameCanvas implements public void drawLegalMove(int cell, int player) { Color innerColor; + if (switchColors) { + if (player == 0) { + innerColor = new Color(0.0f, 0.0f, 0.0f, 0.6f); + } + else { + innerColor = new Color(1.0f, 1.0f, 1.0f, 0.75f); + } + this.drawInnerDot(innerColor, cell, false); + } else { if (player == 1) { innerColor = new Color(0.0f, 0.0f, 0.0f, 0.6f); } else { innerColor = new Color(1.0f, 1.0f, 1.0f, 0.75f); } - this.drawInnerDot(innerColor, (int) cell, false); + this.drawInnerDot(innerColor, cell, false); + } } } diff --git a/app/src/main/java/org/toop/app/gameControllers/ReversiBitController.java b/app/src/main/java/org/toop/app/gameControllers/ReversiBitController.java index d2b9559..16fc8db 100644 --- a/app/src/main/java/org/toop/app/gameControllers/ReversiBitController.java +++ b/app/src/main/java/org/toop/app/gameControllers/ReversiBitController.java @@ -11,7 +11,7 @@ import org.toop.game.players.LocalPlayer; import org.toop.game.players.OnlinePlayer; public class ReversiBitController extends GenericGameController { - public ReversiBitController(Player[] players) { + public ReversiBitController(Player[] players, boolean switchColors) { BitboardReversi game = new BitboardReversi(players); ThreadBehaviour thread = new LocalThreadBehaviour<>(game); for (Player player : players) { @@ -19,6 +19,6 @@ public class ReversiBitController extends GenericGameController(game); } } - super(new ReversiBitCanvas(), game, thread, "Reversi"); + super(new ReversiBitCanvas(switchColors, players[0] instanceof LocalPlayer), game, thread, "Reversi"); } } diff --git a/app/src/main/java/org/toop/app/widget/view/GameView.java b/app/src/main/java/org/toop/app/widget/view/GameView.java index 1dc528d..f4ed23a 100644 --- a/app/src/main/java/org/toop/app/widget/view/GameView.java +++ b/app/src/main/java/org/toop/app/widget/view/GameView.java @@ -16,6 +16,7 @@ import org.toop.app.widget.tutorial.Connect4TutorialWidget; import org.toop.app.widget.tutorial.ReversiTutorialWidget; import org.toop.app.widget.tutorial.TicTacToeTutorialWidget; import org.toop.local.AppContext; +import org.toop.local.AppSettings; public final class GameView extends ViewWidget { private final Text playerHeader; @@ -125,7 +126,8 @@ public final class GameView extends ViewWidget { setPlayerInfoTTT(); } else if (GameType.equals("Reversi")) { - if (isMe) { + boolean swap = AppSettings.getSettings().getSwitchReversi(); + if (!swap) { player1Header.setText(nextPlayer); player2Header.setText(currentPlayer); } diff --git a/app/src/main/java/org/toop/app/widget/view/LocalMultiplayerView.java b/app/src/main/java/org/toop/app/widget/view/LocalMultiplayerView.java index f28f49d..3e313d6 100644 --- a/app/src/main/java/org/toop/app/widget/view/LocalMultiplayerView.java +++ b/app/src/main/java/org/toop/app/widget/view/LocalMultiplayerView.java @@ -79,6 +79,7 @@ public class LocalMultiplayerView extends ViewWidget { } break; case REVERSI: + boolean swap = AppSettings.getSettings().getSwitchReversi(); if (information.players[0].isHuman) { players[0] = new LocalPlayer<>(information.players[0].name); } else { @@ -92,17 +93,17 @@ public class LocalMultiplayerView extends ViewWidget { if (AppSettings.getSettings().getTutorialFlag() && AppSettings.getSettings().getFirstReversi()) { new ShowEnableTutorialWidget( () -> new ReversiTutorialWidget(() -> { - gameController = new ReversiBitController(players); + gameController = new ReversiBitController(players, swap); gameController.start(); }), () -> Platform.runLater(() -> { - gameController = new ReversiBitController(players); + gameController = new ReversiBitController(players, swap); gameController.start(); }), () -> AppSettings.getSettings().setFirstReversi(false) ); } else { - gameController = new ReversiBitController(players); + gameController = new ReversiBitController(players, swap); gameController.start(); } break; diff --git a/app/src/main/java/org/toop/app/widget/view/OptionsView.java b/app/src/main/java/org/toop/app/widget/view/OptionsView.java index 0284632..e1907ec 100644 --- a/app/src/main/java/org/toop/app/widget/view/OptionsView.java +++ b/app/src/main/java/org/toop/app/widget/view/OptionsView.java @@ -149,13 +149,22 @@ public class OptionsView extends ViewWidget { "small", "medium", "large" ); + var swapReversiColors = new ToggleWidget( + "reversinotswapped", "reversiswapped", + AppSettings.getSettings().getSwitchReversi(), + swap -> { + AppSettings.getSettings().setSwitchReversi(swap); + } + ); return Primitive.vbox( Primitive.header("style"), Primitive.separator(), themeWidget.getNode(), - layoutWidget.getNode() + layoutWidget.getNode(), + Primitive.text("reversiswap"), + swapReversiColors.getNode() ); } } \ No newline at end of file diff --git a/app/src/main/java/org/toop/local/AppSettings.java b/app/src/main/java/org/toop/local/AppSettings.java index b1ea938..09b58d4 100644 --- a/app/src/main/java/org/toop/local/AppSettings.java +++ b/app/src/main/java/org/toop/local/AppSettings.java @@ -91,5 +91,6 @@ public class AppSettings { settingsAsset.setMusicVolume(15); settingsAsset.setTutorialFlag(true); settingsAsset.setLayoutSize("medium"); + settingsAsset.setSwitchReversi(false); } } \ No newline at end of file diff --git a/app/src/main/resources/localization/localization_ar.properties b/app/src/main/resources/localization/localization_ar.properties index 42c4a80..2a82e83 100644 --- a/app/src/main/resources/localization/localization_ar.properties +++ b/app/src/main/resources/localization/localization_ar.properties @@ -89,6 +89,9 @@ turnof=\u062F\u0648\u0631\u0647 zwartepiet=\u0633\u0647\u0644: Zwarte Piet sinterklaas=\u0645\u062a\u0648\u0633\u0637: Sint R. Klaas santa=\u0635\u0639\u0628: Santa +reversiswapped=\u0645\u0628\u062F\u0651\u064E\u0644 +reversinotswapped=\u063A\u064A\u0631\u0020\u0645\u0628\u062F\u0651\u064E\u0644 +reversiswap=\u0647\u0644\u0020\u062A\u0631\u064A\u062F\u0020\u062A\u0628\u062F\u064A\u0644\u0020\u0623\u0644\u0648\u0627\u0646\u0020\u0627\u0644\u0631\u064A\u0641\u064E\u0631\u0633\u064A\u061F\u0020\u0645\u062D\u0644\u064A\u0020\u0641\u0642\u0637\u002E arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 diff --git a/app/src/main/resources/localization/localization_de.properties b/app/src/main/resources/localization/localization_de.properties index 20a0afa..ff81b82 100644 --- a/app/src/main/resources/localization/localization_de.properties +++ b/app/src/main/resources/localization/localization_de.properties @@ -91,6 +91,9 @@ turnof=ist dran zwartepiet=Leicht: Zwarte Piet sinterklaas=Mittel: Sint R. Klaas santa=Schwer: Santa +reversiswapped=Getauscht +reversinotswapped=Nicht getauscht +reversiswap=M\u00F6chten Sie die Reversi-Farben tauschen? Nur lokal. arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (Arabisch) chinese=\u4e2d\u6587 (Chinesisch) diff --git a/app/src/main/resources/localization/localization_en.properties b/app/src/main/resources/localization/localization_en.properties index de4f4ba..2986cd9 100644 --- a/app/src/main/resources/localization/localization_en.properties +++ b/app/src/main/resources/localization/localization_en.properties @@ -93,6 +93,9 @@ turnof='s turn zwartepiet=Easy: Zwarte Piet sinterklaas=Medium: Sint R. Klaas santa=Hard:Santa +reversiswapped=Swapped +reversinotswapped=Not Swapped +reversiswap=Do you want to swap the Reversi colors? Local only. arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (Arabic) chinese=\u4e2d\u6587 (Chinese) diff --git a/app/src/main/resources/localization/localization_es.properties b/app/src/main/resources/localization/localization_es.properties index 0096339..ca3f365 100644 --- a/app/src/main/resources/localization/localization_es.properties +++ b/app/src/main/resources/localization/localization_es.properties @@ -90,6 +90,9 @@ turnof=le toca zwartepiet=F\u00e1cil: Zwarte Piet sinterklaas=Medio: Sint R. Klaas santa=Dif\u00edcil: Santa +reversiswapped=Cambiado +reversinotswapped=No cambiado +reversiswap=\u00BFDeseas intercambiar los colores de Reversi? Solo local. arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (Ar\u00e1bigo) chinese=\u4e2d\u6587 (Chino) diff --git a/app/src/main/resources/localization/localization_fr.properties b/app/src/main/resources/localization/localization_fr.properties index 96337b0..7a64475 100644 --- a/app/src/main/resources/localization/localization_fr.properties +++ b/app/src/main/resources/localization/localization_fr.properties @@ -90,6 +90,9 @@ turnof=\u00E0 son tour zwartepiet=Facile: Zwarte Piet sinterklaas=Moyen : Sint R. Klaas santa=Difficile: Santa +reversiswapped=\u00C9chang\u00E9 +reversinotswapped=Non \u00E9chang\u00E9 +reversiswap=Voulez-vous \u00E9changer les couleurs de Reversi ? Local uniquement. arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (Arabe) chinese=\u4e2d\u6587 (Chinois) diff --git a/app/src/main/resources/localization/localization_hi.properties b/app/src/main/resources/localization/localization_hi.properties index 4a11271..9746e86 100644 --- a/app/src/main/resources/localization/localization_hi.properties +++ b/app/src/main/resources/localization/localization_hi.properties @@ -90,6 +90,9 @@ turnof=\u0915\u0940 \u092C\u093E\u0930\u0940 zwartepiet=\u0905\u0938\u093e\u0928: Zwarte Piet sinterklaas=\u092e\u0927\u094d\u092f\u092e: Sint R. Klaas santa=\u0915\u0924\u093f\u0928: Santa +reversiswapped=\u092C\u0926\u0932\u093E\u0020\u0939\u0941\u0906 +reversinotswapped=\u0928\u0939\u0940\u0902\u0020\u092C\u0926\u0932\u093E\u0020\u0939\u0941\u0906 +reversiswap=\u0915\u094D\u092F\u093E\u0020\u0906\u092A\u0020\u0930\u093F\u0935\u0930\u094D\u0938\u0940\u0020\u0915\u0947\u0020\u0930\u0902\u0917\u0020\u092C\u0926\u0932\u0928\u093E\u0020\u091A\u093E\u0939\u0924\u0947\u0020\u0939\u0948\u0902?\u0020\u0915\u0947\u0935\u0932\u0020\u0938\u094D\u0925\u093E\u0928\u0940\u092F\u002E arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0905\u0930\u092c\u0940) chinese=\u4e2d\u6587 (\u091a\u0940\u0928\u0940) diff --git a/app/src/main/resources/localization/localization_it.properties b/app/src/main/resources/localization/localization_it.properties index d83b12f..4cd3218 100644 --- a/app/src/main/resources/localization/localization_it.properties +++ b/app/src/main/resources/localization/localization_it.properties @@ -89,6 +89,9 @@ turnof=\u00E8 il suo turno zwartepiet=Facile: Zwarte Piet sinterklaas=Medio: Sint R. Klaas santa=Difficile: Santa +reversiswapped=Scambiato +reversinotswapped=Non scambiato +reversiswap=Vuoi scambiare i colori di Reversi? Solo locale. arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (Arabo) chinese=\u4e2d\u6587 (Cinese) diff --git a/app/src/main/resources/localization/localization_ja.properties b/app/src/main/resources/localization/localization_ja.properties index 769f939..1c5a9ba 100644 --- a/app/src/main/resources/localization/localization_ja.properties +++ b/app/src/main/resources/localization/localization_ja.properties @@ -89,6 +89,10 @@ turnof=\u306E\u756A zwartepiet=\u7c21\u5358: Zwarte Piet sinterklaas=\u4e2d\u7d1a: Sint R. Klaas santa=\u96e3\u3057\u3044: Santa +reversiswapped=\u5165\u308C\u66FF\u3048\u6E08\u307F +reversinotswapped=\u672A\u5165\u308C\u66FF\u3048 +reversiswap=\u30EA\u30D0\u30FC\u30B7\u306E\u8272\u3092\u5165\u308C\u66FF\u3048\u307E\u3059\u304B?\u0020\u30ED\u30FC\u30AB\u30EB\u306E\u307F\u3067\u3059\u002E + arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u30a2\u30e9\u30d3\u30a2\u8a9e) chinese=\u4e2d\u6587 (\u4e2d\u6587) diff --git a/app/src/main/resources/localization/localization_ko.properties b/app/src/main/resources/localization/localization_ko.properties index aa1c0da..da667e7 100644 --- a/app/src/main/resources/localization/localization_ko.properties +++ b/app/src/main/resources/localization/localization_ko.properties @@ -89,6 +89,9 @@ turnof=\uC758 \uCC28\uB840 zwartepiet=\uc218\uc601: Zwarte Piet sinterklaas=\ubcf4\ud1b5: Sint R. Klaas santa=\uc5d0\uc18c: Santa +reversiswapped=\uAD50\uCCB4\uB428 +reversinotswapped=\uAD50\uCCB4\uB418\uC9C0 \uC54A\uC74C +reversiswap=\uB9AC\uBC84\uC2DC \uC0C9\uC0C1\uC744 \uBC14\uAFB8\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?\u0020\uB85C\uCEEC \uC804\uC6A9\u0020\uC785\uB2C8\uB2E4\u002E arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0639\u0631\u0628\u064a\u0629) chinese=\u4e2d\u6587 (\u4e2d\u6587) diff --git a/app/src/main/resources/localization/localization_nl.properties b/app/src/main/resources/localization/localization_nl.properties index 1be45ea..103424a 100644 --- a/app/src/main/resources/localization/localization_nl.properties +++ b/app/src/main/resources/localization/localization_nl.properties @@ -89,6 +89,9 @@ turnof=is aan de beurt zwartepiet=Makkelijk: Zwarte Piet sinterklaas=Gemiddeld: Sint R. Klaas santa=Moeilijk: Santa +reversiswapped=Gewisseld +reversinotswapped=Niet gewisseld +reversiswap=Wil je de Reversi-kleuren wisselen? Alleen lokaal. arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (Arabisch) chinese=\u4e2d\u6587 (Chinees) diff --git a/app/src/main/resources/localization/localization_ru.properties b/app/src/main/resources/localization/localization_ru.properties index cc0ab81..faf7ea5 100644 --- a/app/src/main/resources/localization/localization_ru.properties +++ b/app/src/main/resources/localization/localization_ru.properties @@ -89,6 +89,9 @@ turnof=\u0445\u043E\u0434\u0438\u0442 zwartepiet=\u041b\u0435\u0433\u043a\u043e: Zwarte Piet sinterklaas=\u0421\u0440\u0435\u0434\u043d\u0438\u0439: Sint R. Klaas santa=\u0421\u043b\u043e\u0436\u043d\u043e: Santa +reversiswapped=\u041F\u043E\u043C\u0435\u043D\u044F\u043D\u043E +reversinotswapped=\u041D\u0435 \u043F\u043E\u043C\u0435\u043D\u044F\u043D\u043E +reversiswap=\u0425\u043E\u0442\u0438\u0442\u0435 \u043F\u043E\u043C\u0435\u043D\u044F\u0442\u044C \u0446\u0432\u0435\u0442\u0430 \u0420\u0435\u0432\u0435\u0440\u0441\u0438?\u0020\u0422\u043E\u043B\u044C\u043A\u043E \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E\u002E arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0410\u0440\u0430\u0431\u0441\u043a\u0438\u0439) chinese=\u4e2d\u6587 (\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439) diff --git a/app/src/main/resources/localization/localization_zh.properties b/app/src/main/resources/localization/localization_zh.properties index 33dce40..4904cf5 100644 --- a/app/src/main/resources/localization/localization_zh.properties +++ b/app/src/main/resources/localization/localization_zh.properties @@ -89,6 +89,9 @@ turnof=\u7684\u56DE\u5408 zwartepiet=\u7b80\u5355: Zwarte Piet sinterklaas=\u4e2d\u7b49: Sint R. Klaas santa=\u56f0\u96be: Santa +reversiswapped=\u5DF2\u4EA4\u6362 +reversinotswapped=\u672A\u4EA4\u6362 +reversiswap=\u662F\u5426\u8981\u4EA4\u6362\u9ED1\u767D\u68CB\u7684\u989C\u8272\uFF1F\u4EC5\u9650\u672C\u5730\u002E arabic=\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u963f\u62c9\u4f2f\u8bed) chinese=\u4e2d\u6587 diff --git a/framework/src/main/java/org/toop/framework/resource/resources/SettingsAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/SettingsAsset.java index 79422b3..e7e5dfa 100644 --- a/framework/src/main/java/org/toop/framework/resource/resources/SettingsAsset.java +++ b/framework/src/main/java/org/toop/framework/resource/resources/SettingsAsset.java @@ -57,6 +57,10 @@ public class SettingsAsset extends JsonAsset { return getContent().firstReversi; } + public boolean getSwitchReversi() { + return getContent().switchReversi; + } + public void setVolume(int volume) { getContent().volume = volume; save(); @@ -112,6 +116,11 @@ public class SettingsAsset extends JsonAsset { save(); } + public void setSwitchReversi(boolean switchReversi) { + getContent().switchReversi = switchReversi; + save(); + } + public void setContent(Settings settings) { setVolume(settings.volume); setFxVolume(settings.fxVolume); @@ -124,6 +133,7 @@ public class SettingsAsset extends JsonAsset { setFirstTTT(settings.firstTTT); setFirstConnect4(settings.firstConnect4); setFirstReversi(settings.firstReversi); + setSwitchReversi(settings.switchReversi); } public static SettingsAsset getPath() { diff --git a/framework/src/main/java/org/toop/framework/settings/Settings.java b/framework/src/main/java/org/toop/framework/settings/Settings.java index d6e6101..e0a0a2c 100644 --- a/framework/src/main/java/org/toop/framework/settings/Settings.java +++ b/framework/src/main/java/org/toop/framework/settings/Settings.java @@ -12,5 +12,5 @@ public class Settings { public Boolean firstReversi; public Boolean firstTTT; public Boolean firstConnect4; - + public boolean switchReversi = false; }