- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
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-х зон и без диагоналей и понял что выходит полная фигня. Интересно - какой есть красивый вариант решение этой задачи.
Steve_Brown 06.12.2016 12:44 # +1
guest 06.12.2016 13:47 # 0
quercus_mikhail 06.12.2016 14:53 # 0
someone 07.12.2016 10:11 # 0
Fixed
O____O 07.12.2016 13:35 # −1
sakkath 07.12.2016 22:22 # 0
AnalniyTerzatel 08.12.2016 14:10 # 0
O____O 08.12.2016 14:53 # 0