Пример #1
0
        // in make a move there is the logic of switcing turns
        // the rule is that after MakeAMove() the player that is playing the next move will be in current player in sessionData class
        public void MakeAMove(CheckersGameStep io_MoveToExecute, GameBoard io_CheckersBoard)
        {
            GameBoard.Soldier currentSoldierToMove = io_CheckersBoard.GetSoldierFromMatrix(io_MoveToExecute.CurrentPosition);
            io_CheckersBoard.MoveSoldier(io_MoveToExecute);

            if (io_MoveToExecute.MoveTypeInfo.KingMove)
            {
                currentSoldierToMove.BecomeAKing();
            }

            if (io_MoveToExecute.MoveTypeInfo.TypeIndicator != eMoveTypes.EatMove)
            {
                SessionData.ChangeTurn();
            }
            else
            {
                currentSoldierToMove.calculatePossibleMovements(ref io_CheckersBoard);
                if (currentSoldierToMove.eatPossibleMovements.Count == 0)
                {
                    SessionData.ChangeTurn();
                }
            }

            // here was supposed to be else --> do nothing cuz we dont want switch turns --> player ate a soldier and can creat a combo
        }
Пример #2
0
        private Point calculatePositionOfEatenSoldier(CheckersGameStep i_move)
        {
            Point resultPosition = new Point();

            resultPosition.XCoord  = i_move.CurrentPosition.XCoord + ((i_move.RequestedPosition.XCoord - i_move.CurrentPosition.XCoord) / 2);
            resultPosition.YCooord = i_move.CurrentPosition.YCooord + ((i_move.RequestedPosition.YCooord - i_move.CurrentPosition.YCooord) / 2);

            return(resultPosition);
        }
Пример #3
0
        public static CheckersGameStep CreateCheckersGameStep(Point i_currentSoldierPosition, Point i_requestedSoldierPosition, bool i_ToQuit = false)
        {
            CheckersGameStep result = new CheckersGameStep();

            result.CurrentPosition   = i_currentSoldierPosition;
            result.RequestedPosition = i_requestedSoldierPosition;
            result.MoveTypeInfo      = MoveType.CalculateMoveType(result);
            result.m_quitIndicator   = i_ToQuit;

            return(result);
        }
Пример #4
0
        public bool Equals(CheckersGameStep i_step)
        {
            bool validity = true;

            if (!(i_step.CurrentPosition.XCoord == CurrentPosition.XCoord && i_step.CurrentPosition.XCoord == CurrentPosition.XCoord && i_step.CurrentPosition.YCooord == CurrentPosition.YCooord && i_step.CurrentPosition.YCooord == CurrentPosition.YCooord))
            {
                validity = false;
            }

            return(validity);
        }
Пример #5
0
            public static MoveType CalculateMoveType(CheckersGameStep i_requestedStep)
            {
                MoveType result = new MoveType();

                int distanceY = 0;
                int distanceX = 0;

                int indexForLastLineOnBoard = 0;

                distanceY = Abs(i_requestedStep.RequestedPosition.YCooord - i_requestedStep.CurrentPosition.YCooord);
                distanceX = Abs(i_requestedStep.RequestedPosition.XCoord - i_requestedStep.CurrentPosition.XCoord);

                if (distanceY == 2 && distanceX == 2)
                {
                    result.m_MoveType = eMoveTypes.EatMove;
                }
                else if (distanceY == 1 && distanceX == 1)
                {
                    result.m_MoveType = eMoveTypes.RegularMove;
                }
                else
                {
                    result.m_MoveType = eMoveTypes.Undefined;
                }

                if (distanceX > 2 || distanceY > 2 || distanceX < 1 || distanceY < 1)
                {
                    result.m_MoveType = eMoveTypes.Undefined;
                }

                switch (SessionData.m_CurrentActivePlayer)
                {
                case ePlayerOptions.Player1:
                    indexForLastLineOnBoard = 0;
                    break;

                case ePlayerOptions.ComputerPlayer:
                case ePlayerOptions.Player2:
                    indexForLastLineOnBoard = (int)SessionData.m_BoardSize - 1;
                    break;
                }

                if (i_requestedStep.RequestedPosition.YCooord == indexForLastLineOnBoard)
                {
                    result.KingMove = true;
                }
                else
                {
                    result.KingMove = false;
                }

                return(result);
            }
Пример #6
0
        internal void MoveSoldier(CheckersGameStep io_MoveToExecute)
        {
            Soldier theOneWeMove = GetSoldierFromMatrix(io_MoveToExecute.CurrentPosition);

            theOneWeMove.Position = io_MoveToExecute.RequestedPosition;
            m_CheckersBoard[io_MoveToExecute.CurrentPosition.YCooord, io_MoveToExecute.CurrentPosition.XCoord]     = null;
            m_CheckersBoard[io_MoveToExecute.RequestedPosition.YCooord, io_MoveToExecute.RequestedPosition.XCoord] = theOneWeMove;

            if (io_MoveToExecute.MoveTypeInfo.TypeIndicator == eMoveTypes.EatMove)
            {
                Point     eatenSoldierPosition = calculatePositionOfEatenSoldier(io_MoveToExecute);
                Soldier   eatenSoldier         = GetSoldierFromMatrix(eatenSoldierPosition);
                GameBoard gb = this;
                eatenSoldier.killed(gb);
                m_CheckersBoard[eatenSoldier.Position.YCooord, eatenSoldier.Position.XCoord] = null;
            }
        }
Пример #7
0
            private static List <CheckersGameStep> resetPossibleMovesArray(int i_indexOfTopRow, Point i_CurrentSoldierPosition, ePlayerOptions i_playerId)
            {
                List <CheckersGameStep> resultPossibleMovesArray = new List <CheckersGameStep>();
                CheckersGameStep        stepToTheLeft            = new CheckersGameStep();
                CheckersGameStep        stepToTheRight           = new CheckersGameStep();

                if (i_CurrentSoldierPosition.YCooord == i_indexOfTopRow)
                {
                    Point MoveToTheLeft  = new Point();
                    Point MoveToTheRight = new Point();

                    stepToTheLeft.CurrentPosition  = i_CurrentSoldierPosition;
                    stepToTheRight.CurrentPosition = i_CurrentSoldierPosition;
                    if (i_playerId == ePlayerOptions.Player1)
                    {
                        MoveToTheLeft.XCoord   = i_CurrentSoldierPosition.XCoord - 1;
                        MoveToTheLeft.YCooord  = i_CurrentSoldierPosition.YCooord - 1;
                        MoveToTheRight.XCoord  = i_CurrentSoldierPosition.XCoord + 1;
                        MoveToTheRight.YCooord = i_CurrentSoldierPosition.YCooord - 1;
                    }
                    else
                    {
                        MoveToTheLeft.XCoord   = i_CurrentSoldierPosition.XCoord - 1;
                        MoveToTheLeft.YCooord  = i_CurrentSoldierPosition.YCooord + 1;
                        MoveToTheRight.XCoord  = i_CurrentSoldierPosition.XCoord + 1;
                        MoveToTheRight.YCooord = i_CurrentSoldierPosition.YCooord + 1;
                    }

                    stepToTheLeft.RequestedPosition  = MoveToTheLeft;
                    stepToTheRight.RequestedPosition = MoveToTheRight;

                    if (stepToTheLeft.RequestedPosition.XCoord >= 0 && stepToTheLeft.RequestedPosition.XCoord < (int)SessionData.m_BoardSize)
                    {
                        resultPossibleMovesArray.Add(stepToTheLeft);
                    }

                    if (stepToTheRight.RequestedPosition.XCoord >= 0 && stepToTheRight.RequestedPosition.XCoord < (int)SessionData.m_BoardSize)
                    {
                        resultPossibleMovesArray.Add(stepToTheRight);
                    }
                }

                return(resultPossibleMovesArray);
            }
Пример #8
0
        public CheckersGameStep GetRandomMoveForPc()
        {
            Random           stepToExecuteIndex = new Random();
            CheckersGameStep returnedStep       = new CheckersGameStep();

            List <CheckersGameStep> arr = new List <CheckersGameStep>();

            foreach (GameBoard.Soldier s in m_PlayerArmy)
            {
                foreach (CheckersGameStep step in s.m_PossibleEatMovements)
                {
                    arr.Add(step);
                }

                foreach (CheckersGameStep step in s.m_PossibleRegularMovements)
                {
                    arr.Add(step);
                }
            }

            returnedStep = arr[stepToExecuteIndex.Next(arr.Count)];
            return(returnedStep);
        }
Пример #9
0
        public void RunCheckersGame()
        {
            m_IsGameOn = true;
            Checkers_LogicAndDataSection.InitialGameSetting GameDemoSettings = setup();//Checkers_UI.class.setup
            Checkers_LogicAndDataSection.SessionData.initializeSessionData(GameDemoSettings);

            InitializePlayers(GameDemoSettings);
            InitializeGameBoard();

            while (m_IsGameOn)
            {
                m_currentActivePlayer = GetNextPlayer();

                while (!m_isRequestedMoveLegal)
                {
                    m_RequestedMove = UI.ReadAndCheckInput();
                    if (Checkers_LogicAndDataSection.GameBoard.CheckIfMoveIsOk(m_RequestedMove))
                    {
                        m_isRequestedMoveLegal = true;
                    }
                }
                m_currentActivePlayer.MakeAMove(m_RequestedMove, m_CheckersBoard); //at the end of this method - we are ready to get the next move in the game
            }
        }
Пример #10
0
 public void MakeAMove(CheckersGameStep m_RequestedMove, GameBoard i_CheckersBoard)
 {
 }
Пример #11
0
        public CheckersGameStep.MoveType SortMoveType(CheckersGameStep i_RequestedMove, Player i_currentActivePlayer)
        {
            Soldier currentPositonSoldier = GetSoldierFromMatrix(i_RequestedMove.CurrentPosition);
            Soldier NextPositonSoldier    = GetSoldierFromMatrix(i_RequestedMove.RequestedPosition);

            CheckersGameStep.MoveType result = new CheckersGameStep.MoveType();
            List <CheckersGameStep>   arrayOfMovements;
            bool validity = true;
            bool exists   = false;

            if (currentPositonSoldier == null && !i_RequestedMove.WantsToQuitIndicator)
            {
                validity = false;
            }

            if (validity && currentPositonSoldier.Team != i_currentActivePlayer.Team)
            {
                validity = false;
            }

            if (validity && NextPositonSoldier != null)
            {
                validity = false;
            }

            if (validity && !i_RequestedMove.RequestedPosition.IsInsideBoard())
            {
                validity = false;
            }

            if (validity && currentPositonSoldier.Rank != eSoldierRanks.King)
            {
                if (i_RequestedMove.RequestedPosition.YCooord > currentPositonSoldier.Position.YCooord && currentPositonSoldier.Team == ePlayerOptions.Player1)
                {
                    validity = false;
                }
                else if (i_RequestedMove.RequestedPosition.YCooord < currentPositonSoldier.Position.YCooord && currentPositonSoldier.Team == ePlayerOptions.Player2)
                {
                    validity = false;
                }
            }

            if (validity && i_currentActivePlayer.HasEatMoves() && CheckersGameStep.MoveType.CalculateMoveType(i_RequestedMove).TypeIndicator != eMoveTypes.EatMove && !i_RequestedMove.WantsToQuitIndicator)
            {
                validity = false;
            }

            if (validity)
            {
                result = CheckersGameStep.MoveType.CalculateMoveType(i_RequestedMove);

                if (result.TypeIndicator != eMoveTypes.Undefined)
                {
                    if (currentPositonSoldier.m_PossibleEatMovements.Count != 0 && result.TypeIndicator == eMoveTypes.EatMove)
                    {
                        arrayOfMovements = currentPositonSoldier.eatPossibleMovements;
                    }
                    else
                    {
                        arrayOfMovements = currentPositonSoldier.regularPossibleMovements;
                    }

                    foreach (CheckersGameStep step in arrayOfMovements)
                    {
                        if (step.Equals(i_RequestedMove))
                        {
                            exists = true;
                        }
                    }
                }
                else
                {
                    arrayOfMovements = null;
                }
            }

            if (!validity || !exists)
            {
                result.TypeIndicator = eMoveTypes.Undefined;
            }

            return(result);
        }
Пример #12
0
            internal void calculatePossibleMovements(ref GameBoard i_board)
            {
                m_PossibleEatMovements.Clear();
                m_PossibleRegularMovements.Clear();

                CheckersGameStep gameStep;
                List <Point>     inspectedPoints = bringPossibleNeigboursPositions(m_CoordinateInMatrix);

                foreach (Point p in inspectedPoints)
                {
                    Soldier s = i_board.GetSoldierFromMatrix(p);
                    if (s == null)
                    {
                        if (Rank == eSoldierRanks.King)
                        {
                            gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, p);
                            m_PossibleRegularMovements.Add(gameStep);
                        }
                        else
                        {
                            if (Team == ePlayerOptions.Player1)
                            {
                                if (p.YCooord - Position.YCooord < 0)
                                {
                                    gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, p);
                                    m_PossibleRegularMovements.Add(gameStep);
                                }
                            }
                            else
                            {
                                if (p.YCooord - Position.YCooord > 0)
                                {
                                    gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, p);
                                    m_PossibleRegularMovements.Add(gameStep);
                                }
                            }
                        }
                    }
                    else
                    {
                        Point PossibleEatingNextPosition       = new Point();
                        Point localPointDiffrenceBetweenPoints = new Point();
                        localPointDiffrenceBetweenPoints.XCoord  = p.XCoord - m_CoordinateInMatrix.XCoord;
                        localPointDiffrenceBetweenPoints.YCooord = p.YCooord - m_CoordinateInMatrix.YCooord;
                        if (Team != s.Team)
                        {
                            if (Rank == eSoldierRanks.King)
                            {
                                PossibleEatingNextPosition.XCoord  = p.XCoord + localPointDiffrenceBetweenPoints.XCoord;
                                PossibleEatingNextPosition.YCooord = p.YCooord + localPointDiffrenceBetweenPoints.YCooord;
                                if (PossibleEatingNextPosition.IsInsideBoard())
                                {
                                    if (i_board.GetSoldierFromMatrix(PossibleEatingNextPosition) == null)
                                    {
                                        gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, PossibleEatingNextPosition);
                                        m_PossibleEatMovements.Add(gameStep);
                                    }
                                }
                            }
                            else
                            {
                                if (Team == ePlayerOptions.Player1)
                                {
                                    if (p.YCooord - Position.YCooord < 0)
                                    {
                                        PossibleEatingNextPosition.XCoord  = p.XCoord + localPointDiffrenceBetweenPoints.XCoord;
                                        PossibleEatingNextPosition.YCooord = p.YCooord + localPointDiffrenceBetweenPoints.YCooord;
                                        if (PossibleEatingNextPosition.IsInsideBoard())
                                        {
                                            if (i_board.GetSoldierFromMatrix(PossibleEatingNextPosition) == null)
                                            {
                                                gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, PossibleEatingNextPosition);
                                                m_PossibleEatMovements.Add(gameStep);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    if (p.YCooord - Position.YCooord > 0)
                                    {
                                        PossibleEatingNextPosition.XCoord  = p.XCoord + localPointDiffrenceBetweenPoints.XCoord;
                                        PossibleEatingNextPosition.YCooord = p.YCooord + localPointDiffrenceBetweenPoints.YCooord;
                                        if (PossibleEatingNextPosition.IsInsideBoard())
                                        {
                                            if (i_board.GetSoldierFromMatrix(PossibleEatingNextPosition) == null)
                                            {
                                                gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, PossibleEatingNextPosition);
                                                m_PossibleEatMovements.Add(gameStep);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }