Здравствуйте, пишу игру тетрис, и возникла такая проблема, что получаются очень захламленные условия, хотелось бы узнать возможно ли это как упростить более простым способом. К примеру функция, которая обрабатывает нажатие на левую кнопку(передвижение фигуры влево), в ней проверяется выход за границы поля и не было ли пересечения с другими фигурами путем прохождения циклом по всему списку фигур кроме последней фигуры(которой я управляю), если все в порядке то происходит перемещение влево на 50, вот собственно код, и таких функция у меня уже 4-6(Вопрос очень актуальный для меня)
private void handleLeftKeyPressed(LinkedList<Figure> listFigure){
if(keyInputListener.isLeftPressed()){
boolean tmp = false;
if(listFigure.getLast().getPositionX() >= beginX) {
for (int i = 0; i < listFigure.size() - 1; i++){
if((listFigure.get(i).getPositionX() + listFigure.get(i).getWidth() == listFigure.getLast().getPositionX()) &&
((listFigure.getLast().getPositionY() + listFigure.getLast().getHeight() + 50 >= listFigure.get(i).getPositionY() + listFigure.get(i).getHeight() / 2) && (listFigure.getLast().getPositionY() <= listFigure.get(i).getPositionY() + listFigure.get(i).getHeight()))){
tmp = true;
break;
}
}
if(!tmp){
listFigure.getLast().move(-50, 0);
}
}
}
}
private void handleLeftKeyPressed(LinkedList<Figure> listFigure){
Figure last = listFigure.getLast();
if(!keyInputListener.isLeftPressed() || last.getPositionX() < beginX) return;
for (int i = 0; i < listFigure.size() - 1; i++){
Figure current = listFigure.get(i);
if(current.getPositionX() + current.getWidth() == last.getPositionX()
&& last.getPositionY() + last.getHeight() + 50 >= current.getPositionY() + current.getHeight() / 2
&& last.getPositionY() <= current.getPositionY() + current.getHeight()
){
return;
}
}
last.move(-50, 0);
}
Переименуйте методы getPositionX
в getX
(и про y
тоже) - станет сильно читабельней.
В Figure добавьте методы getRightBount
и getBottomBound
возвращающие x + width
и y + height
Условие станет таким:
if(current.getRightBound() == last.getX()
&& last.getBottomBound() + 50 >= current.getY() + current.getHeight() / 2
&& last.getY() <= current.getBottomBound()
) { return; }
Теперь его хотя бы можно анализировать не боясь сломать глаза. Подозреваю, что у вас там вместо первого &&
должно быть ||
. Проверьте.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Необходимо создать папку именно в корнечтобы она была общедоступна
Мне нужно создать простое Rest-приложение, в котором у меня есть бд пользователейПроект пишется на Spring
У меня есть Activity в котором вопросы с вариантами, когда заканчиваются вопросы то появляется AlertDialog в котором находится только одна кнопка