diff --git a/app/src/main/java/org/toop/app/game/Connect4Game.java b/app/src/main/java/org/toop/app/game/Connect4Game.java index bd063b0..c0fd942 100644 --- a/app/src/main/java/org/toop/app/game/Connect4Game.java +++ b/app/src/main/java/org/toop/app/game/Connect4Game.java @@ -13,6 +13,7 @@ import org.toop.framework.networking.events.NetworkEvents; import org.toop.game.Connect4.Connect4; import org.toop.game.Connect4.Connect4AI; import org.toop.game.Game; +import org.toop.game.enumerators.GameState; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -147,7 +148,7 @@ public class Connect4Game { continue; } - final Game.State state = game.play(move); + final GameState state = game.play(move); updateCanvas(); /* if (move.value() == 'X') { @@ -156,10 +157,10 @@ public class Connect4Game { canvas.drawO(Color.ROYALBLUE, move.position()); } */ - if (state != Game.State.NORMAL) { - if (state == Game.State.WIN) { + if (state != GameState.NORMAL) { + if (state == GameState.WIN) { view.gameOver(true, information.players[currentTurn].name); - } else if (state == Game.State.DRAW) { + } else if (state == GameState.DRAW) { view.gameOver(false, ""); } @@ -182,10 +183,10 @@ public class Connect4Game { } final Game.Move move = new Game.Move(Integer.parseInt(response.move()), playerChar); - final Game.State state = game.play(move); + final GameState state = game.play(move); - if (state != Game.State.NORMAL) { - if (state == Game.State.WIN) { + if (state != GameState.NORMAL) { + if (state == GameState.WIN) { if (response.player().equalsIgnoreCase(information.players[0].name)) { view.gameOver(true, information.players[0].name); gameOver(); @@ -193,7 +194,7 @@ public class Connect4Game { view.gameOver(false, information.players[1].name); gameOver(); } - } else if (state == Game.State.DRAW) { + } else if (state == GameState.DRAW) { view.gameOver(false, ""); gameOver(); } 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 2889280..d0e2b0b 100644 --- a/app/src/main/java/org/toop/app/game/ReversiGame.java +++ b/app/src/main/java/org/toop/app/game/ReversiGame.java @@ -10,6 +10,7 @@ import org.toop.app.view.views.LocalMultiplayerView; import org.toop.framework.eventbus.EventFlow; import org.toop.framework.networking.events.NetworkEvents; import org.toop.game.Game; +import org.toop.game.enumerators.GameState; import org.toop.game.reversi.Reversi; import org.toop.game.reversi.ReversiAI; @@ -163,13 +164,13 @@ public final class ReversiGame { } canvas.setCurrentlyHighlightedMovesNull(); - final Game.State state = game.play(move); + final GameState state = game.play(move); updateCanvas(true); - if (state != Game.State.NORMAL) { - if (state == Game.State.WIN) { + if (state != GameState.NORMAL) { + if (state == GameState.WIN) { view.gameOver(true, information.players[currentTurn].name); - } else if (state == Game.State.DRAW) { + } else if (state == GameState.DRAW) { view.gameOver(false, ""); } @@ -192,10 +193,10 @@ public final class ReversiGame { } final Game.Move move = new Game.Move(Integer.parseInt(response.move()), playerChar); - final Game.State state = game.play(move); + final GameState state = game.play(move); - if (state != Game.State.NORMAL) { - if (state == Game.State.WIN) { + if (state != GameState.NORMAL) { + if (state == GameState.WIN) { if (response.player().equalsIgnoreCase(information.players[0].name)) { view.gameOver(true, information.players[0].name); gameOver(); @@ -203,7 +204,7 @@ public final class ReversiGame { view.gameOver(false, information.players[1].name); gameOver(); } - } else if (state == Game.State.DRAW) { + } else if (state == GameState.DRAW) { view.gameOver(false, ""); game.play(move); } 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 27060f1..b4c9294 100644 --- a/app/src/main/java/org/toop/app/game/TicTacToeGame.java +++ b/app/src/main/java/org/toop/app/game/TicTacToeGame.java @@ -9,6 +9,7 @@ import org.toop.app.view.views.LocalMultiplayerView; import org.toop.framework.eventbus.EventFlow; import org.toop.framework.networking.events.NetworkEvents; import org.toop.game.Game; +import org.toop.game.enumerators.GameState; import org.toop.game.tictactoe.TicTacToe; import org.toop.game.tictactoe.TicTacToeAI; @@ -145,7 +146,7 @@ public final class TicTacToeGame { continue; } - final Game.State state = game.play(move); + final GameState state = game.play(move); if (move.value() == 'X') { canvas.drawX(Color.INDIANRED, move.position()); @@ -153,10 +154,10 @@ public final class TicTacToeGame { canvas.drawO(Color.ROYALBLUE, move.position()); } - if (state != Game.State.NORMAL) { - if (state == Game.State.WIN) { + if (state != GameState.NORMAL) { + if (state == GameState.WIN) { view.gameOver(true, information.players[currentTurn].name); - } else if (state == Game.State.DRAW) { + } else if (state == GameState.DRAW) { view.gameOver(false, ""); } @@ -179,10 +180,10 @@ public final class TicTacToeGame { } final Game.Move move = new Game.Move(Integer.parseInt(response.move()), playerChar); - final Game.State state = game.play(move); + final GameState state = game.play(move); - if (state != Game.State.NORMAL) { - if (state == Game.State.WIN) { + if (state != GameState.NORMAL) { + if (state == GameState.WIN) { if (response.player().equalsIgnoreCase(information.players[0].name)) { view.gameOver(true, information.players[0].name); gameOver(); @@ -190,7 +191,7 @@ public final class TicTacToeGame { view.gameOver(false, information.players[1].name); gameOver(); } - } else if (state == Game.State.DRAW) { + } else if (state == GameState.DRAW) { if(game.getLegalMoves().length == 0) { //only return draw in online multiplayer if the game is actually over. view.gameOver(false, ""); gameOver(); diff --git a/game/src/main/java/org/toop/game/Connect4/Connect4.java b/game/src/main/java/org/toop/game/Connect4/Connect4.java index 45f776d..c49ad1e 100644 --- a/game/src/main/java/org/toop/game/Connect4/Connect4.java +++ b/game/src/main/java/org/toop/game/Connect4/Connect4.java @@ -1,6 +1,7 @@ package org.toop.game.Connect4; import org.toop.game.TurnBasedGame; +import org.toop.game.enumerators.GameState; import java.util.ArrayList; @@ -31,7 +32,7 @@ public class Connect4 extends TurnBasedGame { } @Override - public State play(Move move) { + public GameState play(Move move) { assert move != null; assert move.position() >= 0 && move.position() < board.length; assert move.value() == getCurrentValue(); @@ -49,13 +50,13 @@ public class Connect4 extends TurnBasedGame { movesLeft--; if (checkForWin()) { - return State.WIN; + return GameState.WIN; } nextTurn(); - return State.NORMAL; + return GameState.NORMAL; } private boolean checkForWin() { diff --git a/game/src/main/java/org/toop/game/Connect4/Connect4AI.java b/game/src/main/java/org/toop/game/Connect4/Connect4AI.java index 420ab0d..5fc6836 100644 --- a/game/src/main/java/org/toop/game/Connect4/Connect4AI.java +++ b/game/src/main/java/org/toop/game/Connect4/Connect4AI.java @@ -2,6 +2,7 @@ package org.toop.game.Connect4; import org.toop.game.AI; import org.toop.game.Game; +import org.toop.game.enumerators.GameState; import org.toop.game.tictactoe.TicTacToe; public class Connect4AI extends AI { @@ -34,11 +35,11 @@ public class Connect4AI extends AI { private int getMoveScore(Connect4 game, int depth, Game.Move move, boolean maximizing) { final Connect4 copy = new Connect4(game); - final Game.State state = copy.play(move); + final GameState state = copy.play(move); switch (state) { - case Game.State.DRAW: return 0; - case Game.State.WIN: return maximizing? depth + 1 : -depth - 1; + case GameState.DRAW: return 0; + case GameState.WIN: return maximizing? depth + 1 : -depth - 1; } if (depth <= 0) { diff --git a/game/src/main/java/org/toop/game/Game.java b/game/src/main/java/org/toop/game/Game.java index 7b0af68..fb04916 100644 --- a/game/src/main/java/org/toop/game/Game.java +++ b/game/src/main/java/org/toop/game/Game.java @@ -1,16 +1,10 @@ package org.toop.game; +import org.toop.game.enumerators.GameState; + import java.util.Arrays; public abstract class Game { - public enum State { - NORMAL, - DRAW, - WIN, - - TURN_SKIPPED, - } - public record Move(int position, char value) {} public static final char EMPTY = (char)0; @@ -37,5 +31,5 @@ public abstract class Game { public abstract Move[] getLegalMoves(); - public abstract State play(Move move); + public abstract GameState play(Move move); } diff --git a/game/src/main/java/org/toop/game/enumerators/GameState.java b/game/src/main/java/org/toop/game/enumerators/GameState.java new file mode 100644 index 0000000..4d556e3 --- /dev/null +++ b/game/src/main/java/org/toop/game/enumerators/GameState.java @@ -0,0 +1,9 @@ +package org.toop.game.enumerators; + +public enum GameState { + NORMAL, + DRAW, + WIN, + + TURN_SKIPPED, +} diff --git a/game/src/main/java/org/toop/game/reversi/Reversi.java b/game/src/main/java/org/toop/game/reversi/Reversi.java index b5f503c..641da73 100644 --- a/game/src/main/java/org/toop/game/reversi/Reversi.java +++ b/game/src/main/java/org/toop/game/reversi/Reversi.java @@ -2,6 +2,7 @@ package org.toop.game.reversi; import org.toop.game.Game; import org.toop.game.TurnBasedGame; +import org.toop.game.enumerators.GameState; import java.awt.*; import java.util.ArrayList; @@ -130,7 +131,7 @@ public final class Reversi extends TurnBasedGame { return boardGrid; } @Override - public State play(Move move) { + public GameState play(Move move) { Move[] legalMoves = getLegalMoves(); boolean moveIsLegal = false; for (Move legalMove : legalMoves) { @@ -151,19 +152,19 @@ public final class Reversi extends TurnBasedGame { if (getLegalMoves().length == 0) { skipMyTurn(); if (getLegalMoves().length > 0) { - return State.TURN_SKIPPED; + return GameState.TURN_SKIPPED; } else { Score score = getScore(); if (score.player1Score() == score.player2Score()) { - return State.DRAW; + return GameState.DRAW; } else { - return State.WIN; + return GameState.WIN; } } } - return State.NORMAL; + return GameState.NORMAL; } return null; } diff --git a/game/src/main/java/org/toop/game/tictactoe/TicTacToe.java b/game/src/main/java/org/toop/game/tictactoe/TicTacToe.java index 0fa6ca8..ef0e672 100644 --- a/game/src/main/java/org/toop/game/tictactoe/TicTacToe.java +++ b/game/src/main/java/org/toop/game/tictactoe/TicTacToe.java @@ -2,6 +2,7 @@ package org.toop.game.tictactoe; import java.util.ArrayList; import org.toop.game.TurnBasedGame; +import org.toop.game.enumerators.GameState; public final class TicTacToe extends TurnBasedGame { private int movesLeft; @@ -31,7 +32,7 @@ public final class TicTacToe extends TurnBasedGame { } @Override - public State play(Move move) { + public GameState play(Move move) { assert move != null; assert move.position() >= 0 && move.position() < board.length; assert move.value() == getCurrentValue(); @@ -40,18 +41,18 @@ public final class TicTacToe extends TurnBasedGame { movesLeft--; if (checkForWin()) { - return State.WIN; + return GameState.WIN; } nextTurn(); if (movesLeft <= 2) { if (movesLeft <= 0 || checkForEarlyDraw(this)) { - return State.DRAW; + return GameState.DRAW; } } - return State.NORMAL; + return GameState.NORMAL; } private boolean checkForWin() { @@ -86,7 +87,7 @@ public final class TicTacToe extends TurnBasedGame { for (final Move move : game.getLegalMoves()) { final TicTacToe copy = new TicTacToe(game); - if (copy.play(move) == State.WIN || !checkForEarlyDraw(copy)) { + if (copy.play(move) == GameState.WIN || !checkForEarlyDraw(copy)) { return false; } } diff --git a/game/src/main/java/org/toop/game/tictactoe/TicTacToeAI.java b/game/src/main/java/org/toop/game/tictactoe/TicTacToeAI.java index 59341e5..35476d3 100644 --- a/game/src/main/java/org/toop/game/tictactoe/TicTacToeAI.java +++ b/game/src/main/java/org/toop/game/tictactoe/TicTacToeAI.java @@ -2,6 +2,7 @@ package org.toop.game.tictactoe; import org.toop.game.AI; import org.toop.game.Game; +import org.toop.game.enumerators.GameState; public final class TicTacToeAI extends AI { @Override @@ -59,11 +60,11 @@ public final class TicTacToeAI extends AI { private int getMoveScore(TicTacToe game, int depth, Game.Move move, boolean maximizing) { final TicTacToe copy = new TicTacToe(game); - final Game.State state = copy.play(move); + final GameState state = copy.play(move); switch (state) { - case Game.State.DRAW: return 0; - case Game.State.WIN: return maximizing? depth + 1 : -depth - 1; + case GameState.DRAW: return 0; + case GameState.WIN: return maximizing? depth + 1 : -depth - 1; } if (depth <= 0) {