added classes for client and server state machine
- a client state machine consits out of a 'ClientState' (every state of the machine) and a 'ClientStateMachine' (every state, which consists out of states), the machine starts with the ClientAutomaton - analog for server - started to implement logic for the server, transition from 'Lobby' to 'GameState'
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class Animation extends ClientState {
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class AudioSettings extends Settings {
|
public class AudioSettings extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class Ceremony extends ClientState {
|
public class Ceremony extends ClientState {
|
||||||
|
private final CeremonyStateMachine ceremonyStateMachine = new CeremonyStateMachine();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class CeremonyStateMachine extends ClientStateMachine {
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class ChoosePiece extends Turn {
|
public class ChoosePiece extends ClientState {
|
||||||
|
private final ChoosePieceStateMachine choosePieceStateMachine = new ChoosePieceStateMachine();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class ChoosePieceStateMachine extends ClientStateMachine{
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class ChoosePowerCard extends PowerCard {
|
public class ChoosePowerCard extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class ClientAutomaton extends ClientStateMachine {
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class ClientState {
|
public abstract class ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public abstract class ClientStateMachine extends ClientState {
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class DetermineStartPlayer extends Game {
|
public class DetermineStartPlayer extends ClientState {
|
||||||
|
private final DetermineStartPlayerStateMachine determineStartPlayerStateMachine = new DetermineStartPlayerStateMachine();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class DetermineStartPlayerStateMachine extends ClientStateMachine{
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class Dialogs extends ClientState {
|
public class Dialogs extends ClientState {
|
||||||
|
private final DialogsStateMachine dialogsStateMachine = new DialogsStateMachine();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class DialogsStateMachine extends ClientStateMachine {
|
||||||
|
}
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package pp.mdga.client;
|
|
||||||
|
|
||||||
public class Game extends ClientState {
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class GameState extends ClientState {
|
||||||
|
private final GameStateMachine gameStateMachine = new GameStateMachine();
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class GameStateMachine extends ClientStateMachine {
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class Lobby extends Dialogs {
|
public class Lobby extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class MainSettings extends Settings {
|
public class MainSettings extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class MovePiece extends Turn {
|
public class MovePiece extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class NetworkDialog extends Dialogs {
|
public class NetworkDialog extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class NoPiece extends ChoosePiece {
|
public class NoPiece extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class PlayPowerCard extends PowerCard {
|
public class PlayPowerCard extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class Podium extends ClientState {
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class PowerCard extends Turn {
|
public class PowerCard extends ClientState {
|
||||||
|
private final PowerCardStateMachine powerCardStateMachine = new PowerCardStateMachine();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class PowerCardStateMachine extends ClientStateMachine {
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class RollDice extends Turn {
|
public class RollDice extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class RollRankingDice extends DetermineStartPlayer {
|
public class RollRankingDice extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class SelectPiece extends ChoosePiece {
|
public class SelectPiece extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class Settings {
|
public class Settings extends ClientState {
|
||||||
|
private final SettingsStateMachine settingsStateMachine = new SettingsStateMachine();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class SettingsStateMachine extends ClientStateMachine {
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class Shield extends PowerCard {
|
public class Shield extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class Spectator extends Game {
|
public class Spectator extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class StartPiece extends ChoosePiece {
|
public class StartPiece extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class Statistics extends ClientState {
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class Swap extends ClientState {
|
||||||
|
}
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package pp.mdga.client;
|
|
||||||
|
|
||||||
public class SwitchEnemy extends PowerCard {
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package pp.mdga.client;
|
|
||||||
|
|
||||||
public class SwitchOwn extends PowerCard {
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class Turn extends Game {
|
public class Turn extends ClientState {
|
||||||
|
private final TurnStateMachine turnStateMachine = new TurnStateMachine();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package pp.mdga.client;
|
||||||
|
|
||||||
|
public class TurnStateMachine extends ClientStateMachine {
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class VideoSettings extends Settings {
|
public class VideoSettings extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class WaitRanking extends DetermineStartPlayer {
|
public class WaitRanking extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class Waiting extends Game {
|
public class Waiting extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package pp.mdga.client;
|
package pp.mdga.client;
|
||||||
|
|
||||||
public class WaitingPiece extends ChoosePiece {
|
public class WaitingPiece extends ClientState {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package pp.mdga.game;
|
package pp.mdga.game;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.Map;
|
import pp.mdga.server.Observer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Game class represents the game state of the Ludo game.
|
* The Game class represents the game state of the Ludo game.
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
public class Game {
|
public class Game {
|
||||||
private int diceModifier = 1;
|
private int diceModifier = 1;
|
||||||
private int diceEyes;
|
private int diceEyes;
|
||||||
private Map <Color, Player> players;
|
private Map<Color, Player> players = new HashMap<Color, Player>();
|
||||||
private Statistic gameStatistics;
|
private Statistic gameStatistics;
|
||||||
private ArrayList<BonusCard> drawPile;
|
private ArrayList<BonusCard> drawPile;
|
||||||
private ArrayList<BonusCard> discardPile = new ArrayList<>();
|
private ArrayList<BonusCard> discardPile = new ArrayList<>();
|
||||||
@@ -21,6 +21,10 @@ public class Game {
|
|||||||
private LinkedList<Color> order;
|
private LinkedList<Color> order;
|
||||||
private Map<Color, Integer> playerConnectionID;
|
private Map<Color, Integer> playerConnectionID;
|
||||||
|
|
||||||
|
private ArrayList<Observer> observers = new ArrayList<>();
|
||||||
|
private Boolean gameHasStarted = false;
|
||||||
|
private Boolean playerHasDisconnected = false;
|
||||||
|
|
||||||
private static final int AMOUNT_OF_TURBO_CARDS = 16;
|
private static final int AMOUNT_OF_TURBO_CARDS = 16;
|
||||||
private static final int AMOUNT_OF_SHIELD_AND_SWAP_CARDS = 12;
|
private static final int AMOUNT_OF_SHIELD_AND_SWAP_CARDS = 12;
|
||||||
|
|
||||||
@@ -258,4 +262,71 @@ public void addPlayer(Color color, Player player) {
|
|||||||
public void removePlayer(Color color) {
|
public void removePlayer(Color color) {
|
||||||
players.remove(color);
|
players.remove(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method adds an observer to the game.
|
||||||
|
*
|
||||||
|
* @param observer the observer to be added
|
||||||
|
*/
|
||||||
|
public void addObserver(Observer observer) {
|
||||||
|
observers.add(observer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method removes an observer from the game.
|
||||||
|
*
|
||||||
|
* @param observer the observer to be removed
|
||||||
|
*/
|
||||||
|
public void removeObserver(Observer observer) {
|
||||||
|
observers.remove(observer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the game has started.
|
||||||
|
*
|
||||||
|
* @return the game has started
|
||||||
|
*/
|
||||||
|
public Boolean getGameHasStarted() {
|
||||||
|
return gameHasStarted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method sets the game has started.
|
||||||
|
*
|
||||||
|
* @param gameHasStarted the new game has started
|
||||||
|
*/
|
||||||
|
public void setGameHasStarted(Boolean gameHasStarted) {
|
||||||
|
this.gameHasStarted = gameHasStarted;
|
||||||
|
if (gameHasStarted) notifyObservers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the player has disconnected.
|
||||||
|
*
|
||||||
|
* @return the player has disconnected
|
||||||
|
*/
|
||||||
|
public Boolean getPlayerHasDisconnected() {
|
||||||
|
return playerHasDisconnected;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method sets the player has disconnected.
|
||||||
|
*
|
||||||
|
* @param playerHasDisconnected the new player has disconnected
|
||||||
|
*/
|
||||||
|
public void setPlayerHasDisconnected(Boolean playerHasDisconnected) {
|
||||||
|
this.playerHasDisconnected = playerHasDisconnected;
|
||||||
|
if (playerHasDisconnected) {
|
||||||
|
notifyObservers();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method notifies the observers.
|
||||||
|
*/
|
||||||
|
public void notifyObservers() {
|
||||||
|
for (Observer observer : new ArrayList<>(observers)) {
|
||||||
|
observer.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,4 +79,13 @@ public BonusCard removeHandCard(BonusCard card) {
|
|||||||
}
|
}
|
||||||
return cardToRemove;
|
return cardToRemove;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the id of the connection to the client represented by this player.
|
||||||
|
*
|
||||||
|
* @return the id
|
||||||
|
*/
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,4 +28,10 @@ public interface ClientInterpreter {
|
|||||||
void received(SelectTSK selectTSK , int from);
|
void received(SelectTSK selectTSK , int from);
|
||||||
|
|
||||||
void received(ForceContinueGame forceContinueGame, int from);
|
void received(ForceContinueGame forceContinueGame, int from);
|
||||||
|
|
||||||
|
void received(ClientStartGame clientStartGame, int from);
|
||||||
|
|
||||||
|
void received(NoPowerCard noPowerCard, int from);
|
||||||
|
|
||||||
|
void received(SelectedPieces selectedPieces, int from);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
import com.jme3.network.AbstractMessage;
|
import com.jme3.network.AbstractMessage;
|
||||||
|
|
||||||
public abstract class ClientMessage extends AbstractMessage {
|
public abstract class ClientMessage extends AbstractMessage {
|
||||||
|
|
||||||
protected ClientMessage() {
|
protected ClientMessage() {
|
||||||
super(true);
|
super(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package pp.mdga.message.client;
|
||||||
|
|
||||||
|
public class ClientStartGame extends ClientMessage {
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(ClientInterpreter interpreter, int from) {
|
||||||
|
interpreter.received(this, from);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package pp.mdga.message.client;
|
||||||
|
|
||||||
|
public class NoPowerCard extends ClientMessage {
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(ClientInterpreter interpreter, int from) {
|
||||||
|
interpreter.received(this, from);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package pp.mdga.message.client;
|
||||||
|
|
||||||
|
public class SelectedPieces extends ClientMessage {
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(ClientInterpreter interpreter, int from) {
|
||||||
|
interpreter.received(this, from);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package pp.mdga.message.server;
|
package pp.mdga.message.server;
|
||||||
|
|
||||||
public class StartGame extends ServerMessage {
|
public class ServerStartGame extends ServerMessage {
|
||||||
@Override
|
@Override
|
||||||
public void accept(ServerInterpreter interpreter) {
|
public void accept(ServerInterpreter interpreter) {
|
||||||
|
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class Ceremony extends ServerState {
|
public class Ceremony extends ServerState {
|
||||||
|
public Ceremony(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class ChoosePiece extends Turn {
|
public class ChoosePiece extends ServerState {
|
||||||
|
private final ChoosePieceStateMachine choosePieceStateMachine = new ChoosePieceStateMachine(this, logic);
|
||||||
|
|
||||||
|
public ChoosePiece(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
public class ChoosePieceStateMachine extends ServerStateMachine{
|
||||||
|
public ChoosePieceStateMachine(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServerState initialState() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class DetermineStartPlayer extends Game {
|
public class DetermineStartPlayer extends ServerState {
|
||||||
|
public DetermineStartPlayer(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
package pp.mdga.server;
|
|
||||||
|
|
||||||
public class Dialogs extends ServerState {
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class FirstRoll extends RollDice {
|
public class FirstRoll extends ServerState {
|
||||||
|
public FirstRoll(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
package pp.mdga.server;
|
|
||||||
|
|
||||||
public class Game extends ServerState {
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
import pp.mdga.game.Piece;
|
||||||
|
import pp.mdga.message.client.*;
|
||||||
|
import pp.mdga.message.server.PossibleCard;
|
||||||
|
|
||||||
|
public class GameState extends ServerState {
|
||||||
|
private final GameStateMachine gameStateMachine = new GameStateMachine(this, logic);
|
||||||
|
|
||||||
|
public GameState(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
logic.getGame().addObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void entry() {
|
||||||
|
gameStateMachine.entry();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedAnimationEnd(AnimationEnd msg) {
|
||||||
|
gameStateMachine.receivedAnimationEnd(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo piece?
|
||||||
|
@Override
|
||||||
|
public void receivedConfirmPiece(Piece piece) {
|
||||||
|
gameStateMachine.receivedConfirmPiece(piece);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedNoPowerCard(NoPowerCard msg) {
|
||||||
|
gameStateMachine.receivedNoPowerCard(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedPowerCardChoice(SelectCard msg) {
|
||||||
|
gameStateMachine.receivedPowerCardChoice(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedRequestDice(RequestDice msg) {
|
||||||
|
gameStateMachine.receivedRequestDice(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo msg?
|
||||||
|
@Override
|
||||||
|
public void receivedRollRankingDice() {
|
||||||
|
gameStateMachine.receivedRollRankingDice();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedSelectedPieces(SelectedPieces msg) {
|
||||||
|
gameStateMachine.receivedSelectedPieces(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sentPossibleCard(PossibleCard msg) {
|
||||||
|
gameStateMachine.sentPossibleCard(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo msg?, sent to everyone?
|
||||||
|
@Override
|
||||||
|
public void sentRankingResponse() {
|
||||||
|
gameStateMachine.sentRankingResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
if (logic.getGame().playerHasDisconnected()) {
|
||||||
|
parent.gotoState(new Ceremony(parent, logic));
|
||||||
|
logic.getGame().removeObserver(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
public class GameStateMachine extends ServerStateMachine{
|
||||||
|
public GameStateMachine(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DetermineStartPlayer initialState() {
|
||||||
|
return new DetermineStartPlayer(this, logic);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class Interrupt extends ServerState {
|
public class Interrupt extends ServerState {
|
||||||
|
public Interrupt(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
52
Projekte/mdga/model/src/main/java/pp.mdga/server/Lobby.java
Normal file
52
Projekte/mdga/model/src/main/java/pp.mdga/server/Lobby.java
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
import pp.mdga.message.client.*;
|
||||||
|
import pp.mdga.message.server.ServerMessage;
|
||||||
|
import pp.mdga.message.server.UpdateReady;
|
||||||
|
import pp.mdga.message.server.UpdateTSK;
|
||||||
|
|
||||||
|
public class Lobby extends ServerState {
|
||||||
|
public Lobby(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
logic.getGame().addObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedDeselectTSK(DeselectTSK msg) {
|
||||||
|
broadcastUpdate(new UpdateTSK());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedNotReady(LobbyNotReady msg) {
|
||||||
|
broadcastUpdate(new UpdateReady());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedReady(LobbyReady msg) {
|
||||||
|
broadcastUpdate(new UpdateReady());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedSelectTSK(SelectTSK msg) {
|
||||||
|
broadcastUpdate(new UpdateTSK());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void broadcastUpdate(ServerMessage updateMessage) {
|
||||||
|
for (var entry : logic.getGame().getPlayers().entrySet()) {
|
||||||
|
logic.send(entry.getValue(), updateMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedStartGame(ClientStartGame msg) {
|
||||||
|
// todo: implement??
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
if (logic.getGame().getGameHasStarted()) {
|
||||||
|
parent.gotoState(new GameState(parent, logic));
|
||||||
|
logic.getGame().removeObserver(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class MovePiece extends Turn {
|
public class MovePiece extends ServerState {
|
||||||
|
public MovePiece(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class NoPiece extends ChoosePiece {
|
public class NoPiece extends ServerState {
|
||||||
|
public NoPiece(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class NoTurn extends ChoosePiece {
|
public class NoTurn extends ServerState {
|
||||||
|
public NoTurn(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
public interface Observer {
|
||||||
|
void update();
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class PowerCard extends Turn {
|
public class PowerCard extends ServerState {
|
||||||
|
public PowerCard(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class RollDice extends Turn {
|
public class RollDice extends ServerState {
|
||||||
|
private final RollDiceMachine rollDiceMachine = new RollDiceMachine(this, logic);
|
||||||
|
|
||||||
|
public RollDice(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
public class RollDiceMachine extends ServerStateMachine {
|
||||||
|
public RollDiceMachine(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServerState initialState() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class SecondRoll extends RollDice {
|
public class SecondRoll extends ServerState {
|
||||||
|
public SecondRoll(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class SelectPiece extends ChoosePiece {
|
public class SelectPiece extends ServerState {
|
||||||
|
public SelectPiece(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
public class ServerAutomaton extends ServerStateMachine {
|
||||||
|
public ServerAutomaton(ServerGameLogic logic) {
|
||||||
|
super(null, logic);
|
||||||
|
entry();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Lobby initialState() {
|
||||||
|
return new Lobby(this, logic);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,17 +1,24 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
import pp.mdga.game.Game;
|
||||||
|
import pp.mdga.game.Player;
|
||||||
import pp.mdga.message.client.*;
|
import pp.mdga.message.client.*;
|
||||||
|
import pp.mdga.message.server.ServerMessage;
|
||||||
|
|
||||||
import java.lang.System.Logger;
|
import java.lang.System.Logger;
|
||||||
import java.lang.System.Logger.Level;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
public class ServerGameLogic implements ClientInterpreter {
|
public class ServerGameLogic implements ClientInterpreter {
|
||||||
private static final Logger LOGGER = System.getLogger(ServerGameLogic.class.getName());
|
static final Logger LOGGER = System.getLogger(ServerGameLogic.class.getName());
|
||||||
|
|
||||||
// private final List<Player> players = new ArrayList<>(4);
|
private final Game game;
|
||||||
|
private final ServerSender serverSender;
|
||||||
|
private ServerState state;
|
||||||
|
|
||||||
// private ServerState state = new ;
|
public ServerGameLogic(Game game, ServerSender serverSender) {
|
||||||
|
this.game = game;
|
||||||
|
this.serverSender = serverSender;
|
||||||
|
state = new ServerAutomaton(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -83,4 +90,43 @@ public void received(SelectTSK selectTSK, int from) {
|
|||||||
public void received(ForceContinueGame forceContinueGame, int from) {
|
public void received(ForceContinueGame forceContinueGame, int from) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void received(ClientStartGame clientStartGame, int from) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void received(NoPowerCard noPowerCard, int from) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void received(SelectedPieces selectedPieces, int from) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a message to the specified player.
|
||||||
|
*
|
||||||
|
* @param player the player to send the message to
|
||||||
|
* @param msg the message to send
|
||||||
|
*/
|
||||||
|
public void send(Player player, ServerMessage msg) {
|
||||||
|
LOGGER.log(Logger.Level.INFO, "sending to {0}: {1}", player, msg); //NON-NLS
|
||||||
|
serverSender.send(player.getId(), msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerSender getServerSender() {
|
||||||
|
return serverSender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Game getGame() {
|
||||||
|
return game;
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo: remove
|
||||||
|
public ServerState getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
import pp.mdga.message.server.ServerMessage;
|
||||||
|
|
||||||
|
public interface ServerSender {
|
||||||
|
void send(int id, ServerMessage msg);
|
||||||
|
}
|
||||||
@@ -1,4 +1,65 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class ServerState {
|
import pp.mdga.game.Piece;
|
||||||
|
import pp.mdga.message.client.*;
|
||||||
|
import pp.mdga.message.server.PossibleCard;
|
||||||
|
import java.lang.System.Logger;
|
||||||
|
|
||||||
|
public abstract class ServerState implements Observer {
|
||||||
|
protected static final Logger LOGGER = System.getLogger(ServerState.class.getName());
|
||||||
|
protected ServerState parent;
|
||||||
|
protected ServerGameLogic logic;
|
||||||
|
|
||||||
|
public ServerState(ServerState parent, ServerGameLogic logic) {
|
||||||
|
this.parent = parent;
|
||||||
|
this.logic = logic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void entry() { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedAnimationEnd(AnimationEnd msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
// todo piece?
|
||||||
|
public void receivedConfirmPiece(Piece piece) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedDeselectTSK(DeselectTSK msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedNoPowerCard(NoPowerCard msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedNotReady(LobbyNotReady msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedPowerCardChoice(SelectCard msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedReady(LobbyReady msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedRequestDice(RequestDice msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
// todo msg?
|
||||||
|
public void receivedRollRankingDice() { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedSelectTSK(SelectTSK msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedSelectedPieces(SelectedPieces msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void receivedStartGame(ClientStartGame msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
public void sentPossibleCard(PossibleCard msg) { /* do nothing */ }
|
||||||
|
|
||||||
|
// todo msg?, sent to everyone?
|
||||||
|
public void sentRankingResponse() { /* do nothing */ }
|
||||||
|
|
||||||
|
public void gotoState(ServerState state) {
|
||||||
|
throw new IllegalStateException("not in a statemachine");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerState getParent() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update() { /* do nothing */ }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return getClass().getSimpleName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
import pp.mdga.game.Piece;
|
||||||
|
import pp.mdga.message.client.*;
|
||||||
|
import pp.mdga.message.server.PossibleCard;
|
||||||
|
|
||||||
|
public abstract class ServerStateMachine extends ServerState {
|
||||||
|
|
||||||
|
private ServerState state;
|
||||||
|
|
||||||
|
public ServerStateMachine(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract ServerState initialState();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void gotoState(ServerState newState) {
|
||||||
|
LOGGER.log(System.Logger.Level.DEBUG, "{0}: {1} --> {2}", this, state, newState);
|
||||||
|
enter(newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void entry() {
|
||||||
|
final ServerState newState = initialState();
|
||||||
|
LOGGER.log(System.Logger.Level.DEBUG, "{0}: initial state={1}", this, newState);
|
||||||
|
enter(newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enter(ServerState newState) {
|
||||||
|
if (newState.parent != this)
|
||||||
|
throw new IllegalArgumentException("Wrong state: " + newState + " belongs to " + newState.parent + " instead of " + this);
|
||||||
|
state = newState;
|
||||||
|
state.entry();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedAnimationEnd(AnimationEnd msg) {
|
||||||
|
state.receivedAnimationEnd(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo piece?
|
||||||
|
@Override
|
||||||
|
public void receivedConfirmPiece(Piece piece) {
|
||||||
|
state.receivedConfirmPiece(piece);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedDeselectTSK(DeselectTSK msg) {
|
||||||
|
state.receivedDeselectTSK(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedNoPowerCard(NoPowerCard msg) {
|
||||||
|
state.receivedNoPowerCard(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedNotReady(LobbyNotReady msg) {
|
||||||
|
state.receivedNotReady(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedPowerCardChoice(SelectCard msg) {
|
||||||
|
state.receivedPowerCardChoice(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedReady(LobbyReady msg) {
|
||||||
|
state.receivedReady(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedRequestDice(RequestDice msg) {
|
||||||
|
state.receivedRequestDice(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo msg?
|
||||||
|
@Override
|
||||||
|
public void receivedRollRankingDice() {
|
||||||
|
state.receivedRollRankingDice();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedSelectTSK(SelectTSK msg) {
|
||||||
|
state.receivedSelectTSK(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedSelectedPieces(SelectedPieces msg) {
|
||||||
|
state.receivedSelectedPieces(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receivedStartGame(ClientStartGame msg) {
|
||||||
|
state.receivedStartGame(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sentPossibleCard(PossibleCard msg) {
|
||||||
|
state.sentPossibleCard(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo msg?, sent to everyone?
|
||||||
|
@Override
|
||||||
|
public void sentRankingResponse() {
|
||||||
|
state.sentRankingResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return super.toString() + "(in " + state + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class StartPiece extends ChoosePiece {
|
public class StartPiece extends ServerState {
|
||||||
|
public StartPiece(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class ThirdRoll extends RollDice {
|
public class ThirdRoll extends ServerState {
|
||||||
|
public ThirdRoll(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class Turn extends ServerState {
|
public class Turn extends ServerState {
|
||||||
|
private final TurnStateMachine turnStateMachine = new TurnStateMachine(this, logic);
|
||||||
|
|
||||||
|
public Turn(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package pp.mdga.server;
|
||||||
|
|
||||||
|
public class TurnStateMachine extends ServerStateMachine {
|
||||||
|
public TurnStateMachine(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServerState initialState() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package pp.mdga.server;
|
package pp.mdga.server;
|
||||||
|
|
||||||
public class WaitingPiece extends ChoosePiece {
|
public class WaitingPiece extends ServerState {
|
||||||
|
public WaitingPiece(ServerState parent, ServerGameLogic logic) {
|
||||||
|
super(parent, logic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user