/// <summary> /// Constructor to resume a saved game /// </summary> /// <param name="data">Game to resume</param> public GameFlowHandler(GameData data) { Game = data; _boardStates = Game.BoardStates; GameHasStarted = true; LastTurnWasMill = false; LegimateTurns = 0; GameEventPlayer1 = GameEvent.NoEvent; GameEventPlayer2 = GameEvent.NoEvent; _lastBoardState = null; }
/// <summary> /// Constructor to start a new game /// </summary> /// <param name="gameType">Type of the game</param> public GameFlowHandler(GameType gameType) { Game = new GameData(gameType); _boardStates = Game.BoardStates; _boardStates.Add(new BoardState()); CurrentPlayer = PlaystoneState.Player1; ModelHelpFunctions.InitializePlaystoneStates(CurrentPlaystones, PlaystoneState.Selectable); GameHasStarted = false; LastTurnWasMill = false; LegimateTurns = 0; GameEventPlayer1 = GameEvent.NoEvent; GameEventPlayer2 = GameEvent.NoEvent; _lastBoardState = null; }
/// <summary> /// Clones the actual BoardState object /// </summary> /// <returns>New instance</returns> public BoardState Clone() { BoardState newState = new BoardState(); for (int i = 0; i <= 6; i++) { for (int j = 0; j <= 6; j++) { newState.Playstones[i, j] = Playstones[i, j]; } } newState.ActivePlayer = ActivePlayer; newState.PlaystonesPlayer1 = PlaystonesPlayer1; newState.PlaystonesPlayer2 = PlaystonesPlayer2; return newState; }
/// <summary> /// Withdraws the last turn /// </summary> public void UndoLastTurn() { if (!GameHasStarted || _boardStates.Count < 2 || Game.GameIsOver) return; if (Game.MoveIsActive || LastTurnWasMill) { CurrentPlayerEvent = GameEvent.FinishTurn; return; } if (_boardStates[_boardStates.Count - 1].BeforeLastTurnWasMill) { CurrentPlayerEvent = GameEvent.CannotUndoMill; return; } _lastBoardState = _boardStates[_boardStates.Count - 1]; _boardStates.RemoveAt(_boardStates.Count - 1); LastTurnWasMill = false; }
/// <summary> /// Repeats the last turn, if possible /// </summary> public void RedoLastTurn() { // Checks for various exeptions if (_lastBoardState == null) return; if (Game.MoveIsActive || LastTurnWasMill) { CurrentPlayerEvent = GameEvent.FinishTurn; return; } _boardStates.RemoveAt(_boardStates.Count - 1); _boardStates.Add(_lastBoardState); LastTurnWasMill = _beforeLastTurnWasMill; _lastBoardState = null; _beforeLastTurnWasMill = false; }