mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 19:04:49 +00:00
generic game controller now draws legal moves for instances of bitlegalmovedrawer (reversi),
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
package org.toop.app.canvas;
|
||||||
|
|
||||||
|
public interface BitLegalMoveDrawer {
|
||||||
|
void showLegalMove(long move, int currentPlayerIndex);
|
||||||
|
}
|
||||||
@@ -4,10 +4,7 @@ import javafx.scene.paint.Color;
|
|||||||
import org.toop.app.App;
|
import org.toop.app.App;
|
||||||
import org.toop.game.games.reversi.BitboardReversi;
|
import org.toop.game.games.reversi.BitboardReversi;
|
||||||
|
|
||||||
import java.util.Arrays;
|
public class ReversiBitCanvas extends BitGameCanvas<BitboardReversi> implements BitLegalMoveDrawer {
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
public class ReversiBitCanvas extends BitGameCanvas<BitboardReversi> {
|
|
||||||
public ReversiBitCanvas() {
|
public ReversiBitCanvas() {
|
||||||
super(Color.GRAY, new Color(0f, 0.4f, 0.2f, 1f), (App.getHeight() / 4) * 3, (App.getHeight() / 4) * 3, 8, 8, 5, true);
|
super(Color.GRAY, new Color(0f, 0.4f, 0.2f, 1f), (App.getHeight() / 4) * 3, (App.getHeight() / 4) * 3, 8, 8, 5, true);
|
||||||
canvas.setOnMouseMoved(event -> {
|
canvas.setOnMouseMoved(event -> {
|
||||||
@@ -40,13 +37,13 @@ public class ReversiBitCanvas extends BitGameCanvas<BitboardReversi> {
|
|||||||
loopOverBoard(board[1], (i) -> drawDot(Color.BLACK, i));
|
loopOverBoard(board[1], (i) -> drawDot(Color.BLACK, i));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showLegalMoves(long[] legalMoves, int currentPlayerIndex) {
|
@Override
|
||||||
for (long legalMove : legalMoves) {
|
public void showLegalMove(long move, int currentPlayerIndex) {
|
||||||
drawLegalMove(legalMove, currentPlayerIndex);
|
int idx = Long.numberOfTrailingZeros(move);
|
||||||
}
|
drawLegalMove(idx, currentPlayerIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawLegalMove(long cell, int player) {
|
public void drawLegalMove(int cell, int player) {
|
||||||
Color innerColor;
|
Color innerColor;
|
||||||
if (player == 1) {
|
if (player == 1) {
|
||||||
innerColor = new Color(0.0f, 0.0f, 0.0f, 0.6f);
|
innerColor = new Color(0.0f, 0.0f, 0.0f, 0.6f);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import javafx.geometry.Pos;
|
|||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.toop.app.canvas.GameCanvas;
|
import org.toop.app.canvas.GameCanvas;
|
||||||
|
import org.toop.app.canvas.BitLegalMoveDrawer;
|
||||||
import org.toop.app.widget.WidgetContainer;
|
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;
|
||||||
@@ -18,7 +19,7 @@ import org.toop.framework.gameFramework.view.GUIEvents;
|
|||||||
import org.toop.framework.networking.events.NetworkEvents;
|
import org.toop.framework.networking.events.NetworkEvents;
|
||||||
import org.toop.game.players.LocalPlayer;
|
import org.toop.game.players.LocalPlayer;
|
||||||
|
|
||||||
public class GenericGameController<T extends TurnBasedGame<T>> implements GameController {
|
public class GenericGameController<T extends TurnBasedGame<T>, C extends GameCanvas<T>> implements GameController {
|
||||||
protected final EventFlow eventFlow = new EventFlow();
|
protected final EventFlow eventFlow = new EventFlow();
|
||||||
|
|
||||||
// Logger for logging
|
// Logger for logging
|
||||||
@@ -31,13 +32,13 @@ public class GenericGameController<T extends TurnBasedGame<T>> implements GameCo
|
|||||||
protected final String gameType;
|
protected final String gameType;
|
||||||
|
|
||||||
// Reference to game canvas
|
// Reference to game canvas
|
||||||
protected final GameCanvas<T> canvas;
|
protected final C canvas;
|
||||||
|
|
||||||
protected final TurnBasedGame<T> game; // Reference to game instance
|
protected final TurnBasedGame<T> game; // Reference to game instance
|
||||||
private final ThreadBehaviour gameThreadBehaviour;
|
private final ThreadBehaviour gameThreadBehaviour;
|
||||||
|
|
||||||
// TODO: Change gameType to automatically happen with either dependency injection or something else.
|
// TODO: Change gameType to automatically happen with either dependency injection or something else.
|
||||||
public GenericGameController(GameCanvas<T> canvas, T game, ThreadBehaviour gameThreadBehaviour, String gameType) {
|
public GenericGameController(C canvas, T game, ThreadBehaviour gameThreadBehaviour, String gameType) {
|
||||||
logger.info("Creating: " + this.getClass());
|
logger.info("Creating: " + this.getClass());
|
||||||
|
|
||||||
this.canvas = canvas;
|
this.canvas = canvas;
|
||||||
@@ -147,5 +148,14 @@ public class GenericGameController<T extends TurnBasedGame<T>> implements GameCo
|
|||||||
getPlayer((game.getCurrentTurn() + 1 ) % 2).getName(),
|
getPlayer((game.getCurrentTurn() + 1 ) % 2).getName(),
|
||||||
this.gameType
|
this.gameType
|
||||||
);
|
);
|
||||||
|
// draw legal moves for bit canvasses
|
||||||
|
if (canvas instanceof BitLegalMoveDrawer) {
|
||||||
|
long movesLoop = game.getLegalMoves();
|
||||||
|
while (movesLoop != 0) {
|
||||||
|
long move = 1L << Long.numberOfTrailingZeros(movesLoop);
|
||||||
|
((BitLegalMoveDrawer) canvas).showLegalMove(move, getCurrentPlayerIndex());
|
||||||
|
movesLoop &= movesLoop - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import org.toop.game.games.reversi.BitboardReversi;
|
|||||||
import org.toop.game.players.LocalPlayer;
|
import org.toop.game.players.LocalPlayer;
|
||||||
import org.toop.game.players.OnlinePlayer;
|
import org.toop.game.players.OnlinePlayer;
|
||||||
|
|
||||||
public class ReversiBitController extends GenericGameController<BitboardReversi> {
|
public class ReversiBitController extends GenericGameController<BitboardReversi, ReversiBitCanvas> {
|
||||||
public ReversiBitController(Player<BitboardReversi>[] players) {
|
public ReversiBitController(Player<BitboardReversi>[] players) {
|
||||||
BitboardReversi game = new BitboardReversi(players);
|
BitboardReversi game = new BitboardReversi(players);
|
||||||
ThreadBehaviour thread = new LocalThreadBehaviour<>(game);
|
ThreadBehaviour thread = new LocalThreadBehaviour<>(game);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import org.toop.game.gameThreads.OnlineThreadBehaviour;
|
|||||||
import org.toop.game.games.tictactoe.BitboardTicTacToe;
|
import org.toop.game.games.tictactoe.BitboardTicTacToe;
|
||||||
import org.toop.game.players.OnlinePlayer;
|
import org.toop.game.players.OnlinePlayer;
|
||||||
|
|
||||||
public class TicTacToeBitController extends GenericGameController<BitboardTicTacToe> {
|
public class TicTacToeBitController extends GenericGameController<BitboardTicTacToe, TicTacToeBitCanvas > {
|
||||||
public TicTacToeBitController(Player<BitboardTicTacToe>[] players) {
|
public TicTacToeBitController(Player<BitboardTicTacToe>[] players) {
|
||||||
BitboardTicTacToe game = new BitboardTicTacToe(players);
|
BitboardTicTacToe game = new BitboardTicTacToe(players);
|
||||||
ThreadBehaviour thread = new LocalThreadBehaviour<>(game);
|
ThreadBehaviour thread = new LocalThreadBehaviour<>(game);
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ public final class GameView extends ViewWidget {
|
|||||||
private final Text turnHeader;
|
private final Text turnHeader;
|
||||||
private final Text player1Header;
|
private final Text player1Header;
|
||||||
private final Text player2Header;
|
private final Text player2Header;
|
||||||
private Circle player1Icon;
|
private final Circle player1Icon;
|
||||||
private Circle player2Icon;
|
private final Circle player2Icon;
|
||||||
private final Button forfeitButton;
|
private final Button forfeitButton;
|
||||||
private final Button exitButton;
|
private final Button exitButton;
|
||||||
private final TextField chatInput;
|
private final TextField chatInput;
|
||||||
|
|||||||
Reference in New Issue
Block a user