public bool IsValidMove(CheckerCoords newCoords) { if (_board.OutsideBoard(newCoords) || _board.isWhiteMove != IsWhite) { return(false); } int yRemainder = newCoords.Y % 2, xRemainder = newCoords.X % 2; if (yRemainder != xRemainder) { return(false); } var deltaY = newCoords.Y - _coords.Y; var deltaX = newCoords.X - _coords.X; var absoluteDeltaX = Mathf.Abs(deltaX); var absoluteDeltaY = Mathf.Abs(deltaY); if (IsQueen) { if (absoluteDeltaY == absoluteDeltaX) { return(IsQueenMoveValid(newCoords, !isDummy)); } } else { if (absoluteDeltaY == 1 && absoluteDeltaX == 1) { return(IsSimpleMoveValid(newCoords)); } if (absoluteDeltaY == 2 && absoluteDeltaX == 2) { return(IsKillMoveValid(newCoords, deltaY, deltaX)); } } return(false); }