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; } }
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); }