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
}
}