Пример #1
0
        private void handleEndOfMove(Button i_ButtonStartOfMove, Button i_ButtonClicked)
        {
            int  colOfStartButton   = (i_ButtonStartOfMove.Left - m_Board[0, 0].Location.X) / k_ButtonSize;
            int  rowOfStartButton   = (i_ButtonStartOfMove.Location.Y - m_Board[0, 0].Location.Y) / k_ButtonSize;
            int  colOfButtonClicked = (i_ButtonClicked.Left - m_Board[0, 0].Location.X) / k_ButtonSize;
            int  rowOfButtonClicked = (i_ButtonClicked.Location.Y - m_Board[0, 0].Location.Y) / k_ButtonSize;
            bool theClickedButtonIsTheSameAsStartButtom = i_ButtonStartOfMove.Equals(i_ButtonClicked);

            if (theClickedButtonIsTheSameAsStartButtom)
            {
                i_ButtonStartOfMove.BackColor = Color.White;
                m_MouseDown = false;
            }
            else
            {
                CheckersMove move = new CheckersMove(
                    rowOfStartButton,
                    colOfStartButton,
                    rowOfButtonClicked,
                    colOfButtonClicked);
                eMoveStatusCode moveStatusCode =
                    m_CheckersData.CheckIfMoveIsValid(move);

                switch (moveStatusCode)
                {
                case eMoveStatusCode.InvalidPosition:
                    showTryAgainMessage("Invalid move");
                    break;

                case eMoveStatusCode.MustEat:
                    showTryAgainMessage("Eating Move is available");
                    break;

                case eMoveStatusCode.Successful:
                    m_CheckersData.DoMakeMove(move);
                    break;

                default: break;
                }

                i_ButtonStartOfMove.BackColor = Color.White;
                m_MouseDown = false;
            }
        }
Пример #2
0
        public eMoveStatusCode CheckIfMoveIsValid(CheckersMove i_Move)
        {
            Player playerThatPlaysNow          = getPlayerThatPlaysNow();
            List <CheckersMove> listOfMoves    = GetLegalMoves(playerThatPlaysNow);
            eMoveStatusCode     moveStatusCode = eMoveStatusCode.Successful;

            if (i_Move.FromRow < 0 || i_Move.FromRow >= r_BoardSize || i_Move.FromCol < 0 || i_Move.FromCol >= r_BoardSize)
            {
                moveStatusCode = eMoveStatusCode.InvalidPosition;
            }
            else if (r_Board[i_Move.FromRow, i_Move.FromCol] != playerThatPlaysNow.PieceSymbol && r_Board[i_Move.FromRow, i_Move.FromCol] != playerThatPlaysNow.KingSymbol)
            {
                moveStatusCode = eMoveStatusCode.InvalidPosition;
            }
            else if (isEatMove(listOfMoves[0]) && !isEatMove(i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol))
            {
                moveStatusCode = eMoveStatusCode.MustEat;
            }
            else if (isEatMove(i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol))
            {
                int r2 = (i_Move.FromRow + i_Move.ToRow) / 2;
                int c2 = (i_Move.FromCol + i_Move.ToCol) / 2;

                if (!canEat(playerThatPlaysNow, i_Move.FromRow, i_Move.FromCol, r2, c2, i_Move.ToRow, i_Move.ToCol))
                {
                    moveStatusCode = eMoveStatusCode.InvalidPosition;
                }
            }
            else
            {
                if (!checkRegularMove(playerThatPlaysNow, i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol))
                {
                    moveStatusCode = eMoveStatusCode.InvalidPosition;
                }
            }

            return(moveStatusCode);
        }