Ejemplo n.º 1
0
 protected virtual void OnGameMove(Location i_DestnationCell, eCheckerType i_Checker)
 {
     if (GameMove != null)
     {
         GameMove.Invoke(i_DestnationCell, i_Checker);
     }
 }
Ejemplo n.º 2
0
        private void GameMove_CheckerWasMoved(Location i_LocateThatChange, eCheckerType i_ChangeToThisType)
        {
            Image newImageToButton;

            switch (i_ChangeToThisType)
            {
            default:
            case eCheckerType.EmptyCell:
                newImageToButton = null;
                break;

            case eCheckerType.X:
                newImageToButton = RedPawnImage;
                break;

            case eCheckerType.O:
                newImageToButton = BlackPawnImage;
                break;

            case eCheckerType.U:
                newImageToButton = BlackKingImage;
                break;

            case eCheckerType.K:
                newImageToButton = RedKingImage;
                break;
            }
            m_GameBoard.ChangeCheckerTypeOnButton(i_LocateThatChange, newImageToButton);
        }
Ejemplo n.º 3
0
 public Checker(ePlayerColor i_Color, SquarePosition i_Position, eCheckerType i_Type = eCheckerType.Soldier)
 {
     m_Type          = i_Type;
     m_Color         = i_Color;
     m_Position      = i_Position;
     m_PossibleMoves = new List <Move>(4);        // maximum possible moves for one checker (when king)
 }
        public void FillBoard(int i_StartRow, int i_EndRow, eCheckerType i_Value)
        {
            int j;

            for (int i = i_StartRow; i < i_EndRow; i++)
            {
                if (i % 2 == 0)
                {
                    j = 1;
                }
                else
                {
                    j = 0;
                }

                for (; j < m_Size; j += 2)
                {
                    m_Matrix[i, j] = i_Value;
                }
            }
        }
        private static List <Position> getPosibleMoves(int row, int col, eUserTurn i_CurrentTurn, eCheckerType?[,] i_Board)
        {
            List <Position> posibleMoves = new List <Position>();

            eCheckerType currentChecker = (eCheckerType)i_Board[row, col];

            if (currentChecker == eCheckerType.Team1_Man || currentChecker == eCheckerType.Team1_King ||
                currentChecker == eCheckerType.Team2_King)
            {
                diagonallyUpLeft(row, col, i_Board, ref posibleMoves);
                diagonallyUpRight(row, col, i_Board, ref posibleMoves);
            }
            if (currentChecker == eCheckerType.Team2_Man || currentChecker == eCheckerType.Team2_King ||
                currentChecker == eCheckerType.Team1_King)
            {
                diagonallyDownLeft(row, col, i_Board, ref posibleMoves);
                diagonallyDownRight(row, col, i_Board, ref posibleMoves);
            }

            return(posibleMoves);
        }
Ejemplo n.º 6
0
 internal Checker(Player i_CurrentPlayer, eCheckerType i_CheckerType)
 {
     m_Player      = i_CurrentPlayer;
     m_CheckerType = i_CheckerType;
 }
Ejemplo n.º 7
0
 internal Checker(eCheckerType i_CheckerType, Player i_Player)
 {
     m_CheckerType = i_CheckerType;
     m_Player      = i_Player;
 }
Ejemplo n.º 8
0
        public bool DoMove(string i_Move, Board i_Board, bool i_IsFirstMoveForChecker)
        {
            bool aMoveWasMade       = false;
            bool aDoubleMoveWasMade = false;

            Board.BoardCell sourceCell, destinationCell;

            int sourceCellX, sourceCellY, destinationCellX, destinationCellY;

            sourceCellX      = Convert.ToInt32(i_Move[0]) - 65;
            sourceCellY      = Convert.ToInt32(i_Move[1]) - 97;
            destinationCellX = Convert.ToInt32(i_Move[3]) - 65;
            destinationCellY = Convert.ToInt32(i_Move[4]) - 97;

            eCheckerType checker = eCheckerType.EmptyCell;

            if (ValidationProcess.IsLegalMoveFormat(i_Move, i_Board.BoardSize))
            {
                sourceCell = i_Board.BoardArray[sourceCellY, sourceCellX];

                destinationCell = i_Board.BoardArray[destinationCellY, destinationCellX];

                if (ValidationProcess.IsLegalMove(sourceCell, destinationCell, i_Board, Player1.MyTurn ? Player2.Name : Player1.Name))
                {
                    aMoveWasMade                        = true;
                    destinationCell.Checker             = sourceCell.Checker;
                    destinationCell.Checker.Player.Name = sourceCell.Checker.Player.Name;
                    checker            = sourceCell.Checker.CheckerType;
                    sourceCell.Checker = null;

                    if (Math.Abs(destinationCellY - sourceCellY) == 2)
                    {
                        //eating down
                        if (destinationCellY - sourceCellY == 2)
                        {
                            //eating down & right
                            if (destinationCellX - sourceCellX == 2)
                            {
                                i_Board.BoardArray[sourceCellY + 1, sourceCellX + 1].Checker.Player.NumOfCheckersAlive--;
                                i_Board.BoardArray[sourceCellY + 1, sourceCellX + 1].Checker = null;
                                OnEatChecker(new Location(sourceCellY + 1, sourceCellX + 1));
                            }
                            //eating down & left
                            else
                            {
                                i_Board.BoardArray[sourceCellY + 1, sourceCellX - 1].Checker.Player.NumOfCheckersAlive--;
                                i_Board.BoardArray[sourceCellY + 1, sourceCellX - 1].Checker = null;
                                OnEatChecker(new Location(sourceCellY + 1, sourceCellX - 1));
                            }
                            string nextMoveDownAndRight = "" + i_Move[3] + i_Move[4] + ">" +
                                                          char.ConvertFromUtf32(Convert.ToInt32(i_Move[3]) + 2) +
                                                          char.ConvertFromUtf32(Convert.ToInt32(i_Move[4]) + 2);
                            aDoubleMoveWasMade = DoMove(nextMoveDownAndRight, i_Board, false);
                            if (aDoubleMoveWasMade)
                            {
                                OnDoubleEat(nextMoveDownAndRight);
                            }

                            string nextMoveDownAndLeft = "" + i_Move[3] + i_Move[4] + ">" +
                                                         char.ConvertFromUtf32(Convert.ToInt32(i_Move[3]) - 2) +
                                                         char.ConvertFromUtf32(Convert.ToInt32(i_Move[4]) + 2);
                            aDoubleMoveWasMade = DoMove(nextMoveDownAndLeft, i_Board, false);
                            if (aDoubleMoveWasMade)
                            {
                                OnDoubleEat(nextMoveDownAndLeft);
                            }
                        }
                        //eating up
                        else
                        {
                            //eating up & right
                            if (destinationCellX - sourceCellX == 2)
                            {
                                i_Board.BoardArray[sourceCellY - 1, sourceCellX + 1].Checker.Player.NumOfCheckersAlive--;
                                i_Board.BoardArray[sourceCellY - 1, sourceCellX + 1].Checker = null;
                                OnEatChecker(new Location(sourceCellY - 1, sourceCellX + 1));
                            }
                            //eating up & left
                            else
                            {
                                i_Board.BoardArray[sourceCellY - 1, sourceCellX - 1].Checker.Player.NumOfCheckersAlive--;
                                i_Board.BoardArray[sourceCellY - 1, sourceCellX - 1].Checker = null;
                                OnEatChecker(new Location(sourceCellY - 1, sourceCellX - 1));
                            }

                            string nextMoveUpAndRight = "" + i_Move[3] + i_Move[4] + ">" +
                                                        char.ConvertFromUtf32(Convert.ToInt32(i_Move[3]) + 2) +
                                                        char.ConvertFromUtf32(Convert.ToInt32(i_Move[4]) - 2);

                            aDoubleMoveWasMade = DoMove(nextMoveUpAndRight, i_Board, false);
                            if (aDoubleMoveWasMade)
                            {
                                OnDoubleEat(nextMoveUpAndRight);
                            }

                            string nextMoveUpAndLeft = "" + i_Move[3] + i_Move[4] + ">" +
                                                       char.ConvertFromUtf32(Convert.ToInt32(i_Move[3]) - 2) +
                                                       char.ConvertFromUtf32(Convert.ToInt32(i_Move[4]) - 2);

                            aDoubleMoveWasMade = DoMove(nextMoveUpAndLeft, i_Board, false);
                            if (aDoubleMoveWasMade)
                            {
                                OnDoubleEat(nextMoveUpAndLeft);
                            }
                        }
                    }
                }
            }

            Location destnationLocation = new Location(destinationCellY, destinationCellX);

            if (aMoveWasMade)
            {
                OnGameMove(destnationLocation, checker);
            }

            return(aMoveWasMade);
        }