public virtual bool Move(int row, int column) { var destination = new Tuple <int, int>(row, column); var origin = new Tuple <int, int>(Row, Column); var moveSet = MoveStrategy.GetMoveSet(Row, Column, OpposingColor); var canMove = !destination.Equals(origin) && moveSet.Any(t => t.Equals(destination)) && !ChessBoard.IsCheckedState(this, destination); if (canMove) { BeforeMove(destination); ChessBoard.Remove(Row, Column); HandleCapture(destination); MoveCount++; AfterMove(); ChessBoard.AddReplace(this, destination.Item1, destination.Item2); } return(canMove); }