https://pastein.ru/t/3T
скопируйте уникальную ссылку для отправки
public class Logic {
//массив для игрового поля игрока
public int[][] masPlay;
public int[][] masComp;
//признак хода компьютера (если он false - то ходит игрок)
public boolean compTurn;
//признак конца игры
//(0- игра идет, 1-победил игрок, 2-победил компьютер)
public int gameEnd;
//конструктор класса
public Logic() {
masPlay = new int[10][10];
masComp = new int[10][10];
}
public void start() {
//Очищаем игровое поле игрока
for(int i = 0; i< 10; i++) {
for(int j=0; j<10; j++) {
masPlay[i][j]= 0;
}
}
//обнуляем победу
gameEnd = 0;
//передаем первый ход игроку
compTurn = false;
//расставляем корабли игрока
createPlayerShips(masPlay);
createPlayerShips(masComp);
}
private void createPlayerShips(int [][] array) {
//Создаем один четырехпалубный корабль
createFour(array,4);
//два трехпалубных корабля
for(int i=1; i<=2; i++) {
createFour(array,3);
}
//три двухпалубных корабля
for(int i=1; i<=3; i++) {
createFour(array,2);
}
createOne(array);
}
//проверка выхода за границу массива
private boolean checkBounds(int i, int j) {
if (( (i>=0) && (i<=9) ) && ( (j >= 0) && (j<=9) ) )
return true;
else
return false;
}
//запись значения в массив
private void setValue(int[][] array, int i, int j, int value) {
if(checkBounds(i,j) == true) {
array[i][j] = value;
}
}
private void surroundFinal(int[][] array) { //okrEnd
for(int i =0; i< 10; i++) {
for(int j = 0; j < 10; j++) {
//Если значение элемента в массиве равно -2,то заменяем его на -1
if(array[i][j] == -2)
array[i][j] = -1;
}
}
}
private boolean shipCheckAvailable(int[][] array, int i, int j) {
//Если выход за границы массива
if(checkBounds(i,j) == false)
return false;
//Если в этой ячейки находится значение 0 или -2, то она нам подходит
if((array[i][j] == 0) || (array[i][j] == -2))
return true;
return false;
}
//создание 4х палубного корабля
private void createFour(int[][] array, int number) {
while(true) {
boolean flag = false;
//координаты головы корабля
int i = 0, j = 0;
//создаем первую палубу
i = (int)(Math.random() * 10);
j = (int)(Math.random() * 10);
//Помещаем в ячейку число 4
array[i][j] = 4;
//окружаем минус двойками
surroundCreating(array,i,j,-2);
//Выбираем случайное направление построения корабля
//0 -- вверх, 1 - вправо, 2 - вниз, 3 влево
int direction = (int)(Math.random()*4);
if(shipCheckAvailable(array,i,j) == true) {
if(direction == 0) {
if(shipCheckAvailable(array, i-(number-1), j) == true) {
flag = true;
}
}
else if(direction == 1) {//вправо
if(shipCheckAvailable(array, i, j+(number-1)) == true) {
flag=true;
}
}
else if (direction == 2) {
//вниз
if(shipCheckAvailable(array, i+(number-1), j) == true) {
flag = true;
}
}
else if(direction == 3) {
//Если выход за границу массива
if(shipCheckAvailable(array, i, j-(number-1)) == true) {
flag = true;
}
}
if(flag == true) {
//Помещаем в ячейку число палуб
array[i][j] = number;
//окружаем минус два
}
}
if(direction == 0) {
//помещаем в ячейку число четыре
array[i-3][j] = 4;
surroundCreating(array,i-3,j, -2); // окружение -2
//surroundShip меняем -2 на -1
array[i-2][j] = 4;
surroundCreating(array, i-2, j, -2);
array[i-1][j] = 4;
surroundCreating(array, i-1, j, -2);
}
if(direction == 1) {
array[i][j+3] = 4;
surroundCreating(array,i,j+3, -2);
array[i][j+2] = 4;
surroundCreating(array,i,j+2, -2);
array[i][j+1] = 4;
surroundCreating(array,i,j+1, -2);
}
if(direction == 2) {
array[i+3][j] = 4;
surroundCreating(array,i+3,j,-2);
array[i+2][j] = 4;
surroundCreating(array,i+2,j,-2);
array[i+1][j] = 4;
surroundCreating(array,i+1,j,-2);
}
if(direction == 3) {
array[i][j-3] = 4;
surroundCreating(array,i,j-3,-2);
array[i][j-2] = 4;
surroundCreating(array,i,j-2,-2);
array[i][j-1] = 4;
surroundCreating(array,i,j-1,-2);
}
surroundFinal(array);
}
}
private void createOne(int [][] array) {
for(int k = 0; k<=4; k++) {
while(true) {
int i = (int)(Math.random() * 10);
int j = (int)(Math.random() * 10);
//Проверяем что там ничего нет
if(array[i][j] == 0) {
//размещаем корабль
array[i][j] = 1;
surroundCreating(array, i, j, -1);
break;
}
}
}
}
private void setSurround(int [][] array, int i, int j, int value) { //setOkr
if((checkBounds(i,j))&&(array [i][j] == 0)){
setValue(array,i,j,value);
}
}
private void surroundCreating(int [][] array, int i, int j, int value) { //okrBegin
setSurround(array, i-1, j-1, value); //сверху слева
setSurround(array, i-1, j, value); //сверху
setSurround(array, i-1, j+1, value); //сверху справа
setSurround(array, i, j+1, value); //справа
setSurround(array, i+1, j+1, value); //снизу справа
setSurround(array, i+1, j, value); //снизу
setSurround(array, i+1, j-1, value); //снизу слева
setSurround(array, i, j-1, value); //слева
}
}