https://pastein.ru/t/eT

  скопируйте уникальную ссылку для отправки



public class Logic {
	//массив для игрового поля игрока
	public int[][] arrayPlay;
	public int[][] arrayComp;
	//признак хода компьютера (если он false - то ходит игрок) 
	public boolean compTurn;
	//признак конца игры
	//(0- игра идет, 1-победил игрок, 2-победил компьютер)
	public int gameEnd;
	
	//конструктор класса
	public Logic() {
		arrayPlay = new int[10][10];
		arrayComp = new int[10][10];
	}
	
	public void start() {
		//Очищаем игровое поле игрока
		for(int i = 0; i< 10; i++) {
			for(int j=0; j<10; j++) {
				arrayPlay[i][j]= 0;
				arrayComp[i][j]=0;
			}
		}
	
		//обнуляем победу
		gameEnd = 0;
		//передаем первый ход игроку
		compTurn = false;
		//расставляем корабли игрока
		createPlayerShips(arrayPlay);
		createPlayerShips(arrayComp);
	}
	
	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);
	    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;
	         surroundCreating(array,i,j,-2);
	         if (direction==0) {
	             for (int k = number-1;k>=1;k--) {
	                 array[i-k][j]=number;
	                 surroundCreating(array,i-k,j,-2);
	             }
	         }
	         else if (direction==1) {
	             for (int k = number-1;k>=1;k--) {
	                 array[i][j+k]=number;
	                 surroundCreating(array,i,j+k,-2);
	             }
	         }
	         else if (direction==2) {
	             for (int k = number-1;k>=1;k--) {
	                 array[i+k][j]=number;
	                 surroundCreating(array,i+k,j,-2);
	             }
	         }
	         else if (direction==3) {
	             for (int k = number-1;k>=1;k--) {
	                 array[i][j-k]=number;
	                 surroundCreating(array,i,j-k,-2);
	             }
	         }
	         break;
	         }
	     }
	         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); //слева
	}
	
	public void playerShoot(int i, int j) { //vistrelPlay
		
	}
}