added visual score to reversi

This commit is contained in:
michiel
2026-01-19 09:47:41 +01:00
parent 7565757b6b
commit 989e0a65c6
4 changed files with 33 additions and 6 deletions

View File

@@ -10,6 +10,7 @@ import org.toop.app.widget.WidgetContainer;
import org.toop.app.widget.view.GameView; import org.toop.app.widget.view.GameView;
import org.toop.framework.eventbus.EventFlow; import org.toop.framework.eventbus.EventFlow;
import org.toop.framework.eventbus.GlobalEventBus; import org.toop.framework.eventbus.GlobalEventBus;
import org.toop.framework.game.games.reversi.BitboardReversi;
import org.toop.framework.gameFramework.controller.GameController; import org.toop.framework.gameFramework.controller.GameController;
import org.toop.framework.gameFramework.model.game.threadBehaviour.SupportsOnlinePlay; import org.toop.framework.gameFramework.model.game.threadBehaviour.SupportsOnlinePlay;
import org.toop.framework.gameFramework.model.game.TurnBasedGame; import org.toop.framework.gameFramework.model.game.TurnBasedGame;
@@ -158,8 +159,14 @@ public class GenericGameController implements GameController {
canvas.redraw(gameCopy); canvas.redraw(gameCopy);
String gameType = game.getClass().getSimpleName().replace("Bitboard",""); String gameType = game.getClass().getSimpleName().replace("Bitboard","");
gameView.nextPlayer(true, getCurrentPlayer().getName(), game.getPlayer(1-getCurrentPlayerIndex()).getName(),gameType); gameView.nextPlayer(true, getCurrentPlayer().getName(), game.getPlayer(1-getCurrentPlayerIndex()).getName(),gameType);
if (getCurrentPlayer() instanceof LocalPlayer && gameType.equals("Reversi")){ if (gameType.equals("Reversi")) {
BitboardReversi reversiGame = (BitboardReversi) game;
BitboardReversi.Score reversiScore = reversiGame.getScore();
gameView.setPlayer1Score(reversiScore.black());
gameView.setPlayer2Score(reversiScore.white());
if (getCurrentPlayer() instanceof LocalPlayer) {
((ReversiBitCanvas)canvas).drawLegalDots(gameCopy); ((ReversiBitCanvas)canvas).drawLegalDots(gameCopy);
} }
} }
} }
}

View File

@@ -11,13 +11,19 @@ import org.toop.framework.game.players.OnlinePlayer;
import java.util.Arrays; import java.util.Arrays;
public class ReversiBitController extends GenericGameController { public class ReversiBitController extends GenericGameController {
private BitboardReversi game;
public ReversiBitController(Player[] players) { public ReversiBitController(Player[] players) {
BitboardReversi game = new BitboardReversi(); BitboardReversi game = new BitboardReversi();
game.init(players); game.init(players);
ThreadBehaviour thread = Arrays.stream(players).anyMatch(e -> e instanceof OnlinePlayer) ? ThreadBehaviour thread = Arrays.stream(players).anyMatch(e -> e instanceof OnlinePlayer) ?
new OnlineThreadBehaviour(game) : new LocalThreadBehaviour(game); new OnlineThreadBehaviour(game) : new LocalThreadBehaviour(game);
super(new ReversiBitCanvas(), game, thread, "Reversi"); super(new ReversiBitCanvas(), game, thread, "Reversi");
} }
public BitboardReversi.Score getScore() {
return game.getScore();
}
} }

View File

@@ -4,6 +4,7 @@ import org.toop.app.widget.complex.ConfirmWidget;
import org.toop.app.widget.complex.PopupWidget; import org.toop.app.widget.complex.PopupWidget;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import org.toop.framework.game.games.reversi.BitboardReversi;
public final class GameOverPopup extends PopupWidget { public final class GameOverPopup extends PopupWidget {
public GameOverPopup(boolean winOrTie, String winner) { public GameOverPopup(boolean winOrTie, String winner) {
@@ -15,7 +16,6 @@ public final class GameOverPopup extends PopupWidget {
else{ else{
confirmWidget.setMessage("It was a tie!"); confirmWidget.setMessage("It was a tie!");
} }
confirmWidget.addButton("ok", this::hide); confirmWidget.addButton("ok", this::hide);
add(Pos.CENTER, confirmWidget); add(Pos.CENTER, confirmWidget);

View File

@@ -26,6 +26,8 @@ public final class GameView extends ViewWidget {
private final Text player2Header; private final Text player2Header;
private Circle player1Icon; private Circle player1Icon;
private Circle player2Icon; private Circle player2Icon;
private final Text player1Score;
private final Text player2Score;
private final Button forfeitButton; private final Button forfeitButton;
private final Button exitButton; private final Button exitButton;
private final TextField chatInput; private final TextField chatInput;
@@ -40,6 +42,8 @@ public final class GameView extends ViewWidget {
player2Header = Primitive.header(""); player2Header = Primitive.header("");
player1Icon = new Circle(); player1Icon = new Circle();
player2Icon = new Circle(); player2Icon = new Circle();
player1Score = Primitive.header("");
player2Score = Primitive.header("");
if (onForfeit != null) { if (onForfeit != null) {
forfeitButton = Primitive.button("forfeit", () -> onForfeit.run(), false); forfeitButton = Primitive.button("forfeit", () -> onForfeit.run(), false);
@@ -153,14 +157,16 @@ public final class GameView extends ViewWidget {
private void setPlayerInfoReversi() { private void setPlayerInfoReversi() {
var player1box = Primitive.hbox( var player1box = Primitive.hbox(
player1Icon, player1Icon,
player1Header player1Header,
player1Score
); );
player1box.getStyleClass().add("hboxspacing"); player1box.getStyleClass().add("hboxspacing");
var player2box = Primitive.hbox( var player2box = Primitive.hbox(
player2Icon, player2Icon,
player2Header player2Header,
player2Score
); );
player2box.getStyleClass().add("hboxspacing"); player2box.getStyleClass().add("hboxspacing");
@@ -178,4 +184,12 @@ public final class GameView extends ViewWidget {
player2Icon.setFill(Color.BLACK); player2Icon.setFill(Color.BLACK);
add(Pos.TOP_RIGHT, playerInfo); add(Pos.TOP_RIGHT, playerInfo);
} }
public void setPlayer1Score(int score) {
player1Score.setText("(" + Integer.toString(score) + ")");
}
public void setPlayer2Score(int score) {
player2Score.setText("(" + Integer.toString(score) + ")");
}
} }