예제 #1
0
        public bool LegalMove(Player i_player, Point i_point, eOnlyCheck i_mode)
        {
            bool       moveResult = m_GameRules.LegalMove(i_player, i_point, i_mode);
            List <int> scores     = m_GameRules.GameScore;

            m_FirstPlayer.PlayerScore  = scores[0];
            m_SecondPlayer.PlayerScore = scores[1];
            return(moveResult);
        }
예제 #2
0
        public bool LegalMove(Player i_Player, Point i_Point, eOnlyCheck i_Mode)
        {
            bool moveResult = false;

            if (m_Board.GetCellOnBoard(i_Point).SignValue == (char)eGameSigns.None)
            {
                if (i_Point > m_StartRange && i_Point < m_EndRange)
                {
                    moveResult = SummaryCallsCheckLegalMoveNotInBorders(i_Player, i_Point, i_Mode);
                }
            }

            return(moveResult);
        }
예제 #3
0
        private bool UpdateBoard(Player i_Player, Point i_Point, eDirections i_Rule, eOnlyCheck i_Mode)
        {
            Point copyPoint            = new Point(i_Point.AxisXValue, i_Point.AxisYValue);
            char  washerAgainstPlayer  = GetAgainstCurrentPlayerSign(i_Player);
            int   amountOppositeWasher = 0;
            bool  moveResult           = false;

            while (copyPoint > m_StartRange && copyPoint < m_EndRange)
            {
                copyPoint = CalculateCellsToChange(copyPoint, i_Rule);
                if (m_Board.GetCellOnBoard(copyPoint).SignValue == washerAgainstPlayer)
                {
                    amountOppositeWasher++;
                }
                else if (amountOppositeWasher > 0 && m_Board.GetCellOnBoard(copyPoint).SignValue == i_Player.PlayerWasher)
                {
                    amountOppositeWasher++;
                    moveResult = true;
                    break;
                }
                else
                {
                    break;
                }
            }

            if (moveResult && i_Mode == eOnlyCheck.No)
            {
                for (int i = 0; i < amountOppositeWasher; i++)
                {
                    copyPoint = RecoverPreviousPointValue(copyPoint, i_Rule);
                    m_Board.UpdateSignCellOnBoardByPoint(i_Player.PlayerWasher, copyPoint);
                    onUpdateCellSignValue(i_Player.PlayerWasher, copyPoint);
                }
            }
            else if (moveResult && i_Mode == eOnlyCheck.Yes)
            {
                for (int i = 0; i < amountOppositeWasher; i++)
                {
                    copyPoint = RecoverPreviousPointValue(copyPoint, i_Rule);
                }

                onUpdateLegalCell(copyPoint);
            }

            return(moveResult);
        }
예제 #4
0
        private bool SummaryCallsCheckLegalMoveNotInBorders(Player i_Player, Point i_Point, eOnlyCheck i_Mode)
        {
            bool[] legalMoves = new bool[8];
            int    indexLegalMove;

            indexLegalMove = 0;
            legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.UpperLeftDiagonal, i_Mode);
            legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.UpperRow, i_Mode);
            legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.UpperRightDiagonal, i_Mode);
            legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.RightColoum, i_Mode);
            legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.DownRightDiagonal, i_Mode);
            legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.DownRow, i_Mode);
            legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.DownLeftDiagonal, i_Mode);
            legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.LeftColoumn, i_Mode);
            return(IndicateForLegalMoves(legalMoves));
        }