Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
private ArrayList<Point> pointForShootAuto = new ArrayList<Point>();
public void shootAuto(){
// Разбить поле на 9 клеток случайного размера
// Выбрать проверяем с диагонали (x = 0, y = 0) или (x = 1, y = 0) TODO: Выполнить
// Составить массив кординат который будем проверять, приоритет - нужная нам диагональ
// Если точка - не подходит - пропускаем
// Вызвали в первый раз - нужно заполнить координатами
if(pointForShootAuto.isEmpty()){
Random random = new Random();
int xLine1 = random.nextInt(10);
int xLine2 = random.nextInt(10);
int x1 = Math.min(xLine1,xLine2);
int x2 = Math.max(xLine1,xLine2);
System.out.println("Первый интервал 0 - " + x1 + "[включтельно]");
System.out.println("Второй интервал " + x1 + " - " + x2);
System.out.println("Третий интервал " + x2 + "[включтельно]" + " до конца");
ArrayList<Point> arrayPoint0 = new ArrayList<Point>();
ArrayList<Point> arrayPoint1 = new ArrayList<Point>();
ArrayList<Point> arrayPoint2 = new ArrayList<Point>();
for(int y = 0; y < 10; ++y) {
for(int x = 0; x < 10; ++x) {
Point newPoint = new Point(x,y);
if(x <= x1)
arrayPoint0.add(newPoint);
else if(x > x1 && x < x2)
arrayPoint1.add(newPoint);
else if(x >= x2)
arrayPoint2.add(newPoint);
}
}
// TODO: Адское и немасштабируемое дерьмо
// Определим в каком порядке склеим массивы
// Вместо 9 клеток сделаем пока 3
int numberFirstArray;
int numberSecondArray;
int numberThirdArray;
do {
numberFirstArray = random.nextInt(3);
numberSecondArray = random.nextInt(3);
numberThirdArray = random.nextInt(3);
}
while (numberFirstArray == numberSecondArray || numberSecondArray == numberThirdArray || numberThirdArray == numberFirstArray);
if(numberFirstArray == 0)
pointForShootAuto.addAll(arrayPoint0);
if(numberFirstArray == 1)
pointForShootAuto.addAll(arrayPoint1);
if(numberFirstArray == 2)
pointForShootAuto.addAll(arrayPoint2);
if(numberSecondArray == 0)
pointForShootAuto.addAll(arrayPoint0);
if(numberSecondArray == 1)
pointForShootAuto.addAll(arrayPoint1);
if(numberSecondArray == 2)
pointForShootAuto.addAll(arrayPoint2);
if(numberThirdArray == 0)
pointForShootAuto.addAll(arrayPoint0);
if(numberThirdArray == 1)
pointForShootAuto.addAll(arrayPoint1);
if(numberThirdArray == 2)
pointForShootAuto.addAll(arrayPoint2);
}
else {
// Вызвали во второй раз - массив точек есть, соотвественно
for(int i = 0 ; i < pointForShootAuto.size() ; i++){
// Если мы попали в точку в которую не стреляли - стрельнем и выйдем
if(board[pointForShootAuto.get(i).y][pointForShootAuto.get(i).x].isShootThisCell() == false){
board[pointForShootAuto.get(i).y][pointForShootAuto.get(i).x].setIsShootThisCell(true);
break;
}
}
}
}
Реализация функции для игры морской бой. Каждый раз при вызове должна выстрелить в новую точку карты. Для интереса решил разбить проверяемые участки карты на различные зоны. Написал вариант для 3-х зон и без диагоналей и понял что выходит полная фигня. Интересно - какой есть красивый вариант решение этой задачи.
If убрать можно сделав pointsForShootAuto как HashMap<Integer, List>, это как минимум, do while, меняешь на containsKey(random). Но я бы засунул эти данные в обьект.
Fixed