RangeCheck с положительными и отрицательными числами

Я работаю над небольшой игрой, в которой есть график. Идея в том, чтобы я выполнял действие, пока целевое местоположение (обозначенное верхней и нижней границами) не было выполнено (в пределах 0,5). Например, если я нацеливаюсь (7,7), цикл должен остановиться, когда x и y (оба в этом случае) находятся между 6,5 и 7,5.

Однако наличие чего-то вроде следующего условия поставило меня перед проблемой, когда представлено с отрицательными числами:

while ((X < tarX-0.5 || X > tarX+0.5) && (Y < tarY-0.5 || Y > tarY+0.5))

Например: если у меня есть цель (-7,-7), цикл остановится, когда ОДИН из значений x или y находится в диапазоне, а не оба.

По сути, у меня была идея иметь четыре разных цикла в зависимости от того, был ли x или y положительным. Но мне интересно, есть ли более простой способ? (Я пытался использовать Math.abs() для противодействия отрицательным числам, что сработало, но что-то, предназначенное для (-3,-3), все равно могло бы остановиться на (3,3))

1 ответ

Решение

цикл должен остановиться, когда x и y (оба в этом случае) находятся между 6,5 и 7,5.

while (!(x >= 6.5 && x <= 7.5 && y >= 6.5 && y <= 7.5)) {
   ...
}

Применяя закон де Моргана, вышесказанное эквивалентно

while (x < 6.5 || x > 7.5 || y < 6.5 || y > 7.5) {
   ...
}
Другие вопросы по тегам