Это можно упростить до следующего.
public void Rotate (int degrees) {
this.orientation = (this.orientation + degrees) % 360;
if (this.orientation < 0) this.orientation += 360;
}
C # следует тем же правилам, что и C и C ++, и i % 360
даст вам значение от -359
до 359
для любого целого числа, а вторая строка должна убедиться, что оно находится в диапазоне от 0 до 359 включительно.
Если вы хотите быть бегущим, вы можете поместить его в одну строку:
this.orientation = (this.orientation + (degrees % 360) + 360) % 360;
, который сохранит положительный результат при любых условиях, но это неприятный хак для сохранения одной строки кода, поэтому я бы не стал этого делать, но я объясню .
С degrees % 360
вы получите число от -359
до 359
. Добавление 360
изменит диапазон между 1
и 719
. Если orientation
уже положительно, добавление этого гарантирует, что оно все еще остается, и окончательное значение % 360
вернет его в диапазон от 0
до 359
.
При минимальном минимальном вы можете упростить свой код, поскольку if
s и while
s можно комбинировать. Например, результат условий в этих двух строках:
if (this.orientation < 0)
while (this.orientation < 0)
равно всегда одно и то же, следовательно, вам не нужно окружающее if
.
Итак, для этого вы можете сделать:
public void Rotate (int degrees) {
this.orientation += degrees;
while (this.orientation < 0) this.orientation += 360;
while (this.orientation > 359) this.orientation -= 360;
}
но я бы все же выбрал версию модуля, поскольку она избегает циклов. Это будет важно, когда пользователь вводит 360 000 000 000 для ротации (и они будут делать это, поверьте мне), а затем обнаруживает, что ему нужно рано пообедать, пока ваш код размалывает: -)