Java- if else… если что-то - это что-то или что-то еще?
-
21-12-2019 - |
Вопрос
Хорошо, я создаю эту новую игру на Java.Это может быть простой вопрос, но кто-нибудь, пожалуйста, может мне помочь с этим?
Итак, если "Парень" столкнется с платформами, он не сможет двигаться правильно (очевидно).
Это то, что у меня есть:
if(Guy.x + Guy.width == (platform2.x ^ platform3.x)) {} else{
goRight();
}
"^" должно быть "или".У меня есть пустота под названием goRight();
таким образом, это было бы похоже на "если x парня плюс ширина парня такая же, как у platform2 или platform3 x, тогда идите направо.Я не хочу, чтобы мне приходилось это делать:
if(Guy.x + Guy.width == platform2.x || Guy.x + Guy.width == platform3.x)) {} else{
goRight();
}
И плюс ко всему, у меня есть еще около 20 платформ, так что было бы проще использовать первый способ, если это возможно.И я тоже должен сделать обнаружение столкновения слева.
Решение
Если платформа - это класс, который имеет значение x, я бы предложил поместить все свои платформы в коллекцию некоторых видов и итерации по нему.Внутри петли делайте что-то вроде
for(Platform p: platforms){
if(Guy.getX() + Guy.getWidth() == p.getX()){
//whatever
}else{
goRight()
}
}
. Другие советы
Вам придется повторить эти условия.
Одним (лучшим) решением было бы создать коллекцию с вашим x
переменные и использование .contains()
метод на нем.Это сделало бы ваш код намного более читабельным.
В качестве альтернативы, объедините все ваши платформы в коллекцию, зациклите ее и проверьте соответствие каждого значения x
переменная.
Это так, как язык разработан ... Так бесполезно бороться с этим.
Все, что вы можете сделать, это использовать вспомогательные переменные для сокращения выражений.Но вам всегда придется правильно что-то вроде генеракодицетагкода.
Вам нужны более продвинутые структуры для хранения информации о ваших платформах.Подумайте о том, чтобы иметь генеракодицетагкод X-координат ваших платформ и выполнение операции «содержит»
Например:
Set<Integer> xcoords = new HashSet<Integer>();
xcoords.add(platform2.x);
xcoords.add(platform3.x);
if (xcoords.contains(Guy.x + Guy.width)){
} else {
goRight();
}
.