Ejemplo n.º 1
0
        public Move.eMoveResult MoveTo(Coordinate i_ToCoordinate)
        {
            Move.eMoveResult moveResult = Move.eMoveResult.Invalid;

            if (m_Board.IsValidCoordinate(i_ToCoordinate))
            {
                int rowDelta = Math.Abs(m_Position.Row - i_ToCoordinate.Row);
                int colDelta = Math.Abs(m_Position.Column - i_ToCoordinate.Column);

                if (rowDelta == 1 && colDelta == 1)
                {
                    moveResult = Move.eMoveResult.Moving;
                }
                else if (rowDelta == 2 && colDelta == 2)
                {
                    moveResult = Move.eMoveResult.Skipping;
                }
            }

            if (moveResult != Move.eMoveResult.Invalid)
            {
                m_Board.UpdateSoldierPosition(m_Position, i_ToCoordinate);
                m_Position = i_ToCoordinate;
                if (m_Position.Row == 0 || m_Position.Row == m_Board.Size - 1)
                {
                    becomeKing();
                }
            }

            return(moveResult);
        }
Ejemplo n.º 2
0
        public bool TryMove(Move i_Move)
        {
            bool validMove = false;

            if (m_CurrentPlayer.IsAvaibleMove(i_Move))
            {
                Soldier          soldierToMove = m_Board.GetSoliderAt(i_Move.FromCoordinate);
                bool             wasKing       = soldierToMove.IsKing();
                Move.eMoveResult moveResult    = soldierToMove.MoveTo(i_Move.ToCoordinate);

                if (moveResult != Move.eMoveResult.Invalid)
                {
                    OnEventOccured(new SoldierMovedEvent(i_Move));
                    validMove  = true;
                    m_LastMove = i_Move;
                    if (moveResult == Move.eMoveResult.Skipping)
                    {
                        removeSkippedSoldier(i_Move);
                    }

                    if (!wasKing && soldierToMove.IsKing())
                    {
                        OnEventOccured(new BecameKingEvent(soldierToMove.Symbol, soldierToMove.Position));
                    }

                    calcPlayersAviableMoves();
                    if (moveResult == Move.eMoveResult.Skipping && soldierToMove.IsAbleToSkip())
                    {
                        m_PreviousPlayer = m_CurrentPlayer;
                    }
                    else
                    {
                        switchPlayerTurn();
                        OnEventOccured(new PlayerSwitchedEvent());
                    }

                    if (m_CurrentPlayer.Kind == Player.ePlayerKind.Computer)
                    {
                        makeComputerMove();
                    }
                }
            }

            if (IsGameEnded())
            {
                OnEventOccured(new GameEndedEvent(PreviousPlayer));
            }

            return(validMove);
        }