public static final int HERE_SHIP_2=2;//здесь есть 2 корабль
public static final int HERE_SHIP_3=3;//здесь есть 3 корабль
public static final int HERE_SHIP_4=4;//здесь есть 4 корабль
public static final int HERE_NO_CHOOSE=5;//здесь уже ничего быть не может
public static final int BOMB_HERE=6;//клетка атакована
public static final int SHIP_ON_FIRE=7;
private int ships_count=0;
public static int[][] field_gamer=new int[11][11];//поля игрока и оппонента
public static int[][] field_opp=new int[11][11];
public static boolean comm_attack=true;
public static final int IDM_GAMER_ROUND=100; //интент актив. мен.
public static final int IDM_OPP_ROUND=200;
int opp=GameStats.total_ships_opp_count;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Thread(new Runnable() {public void run() {autoPlacing(field_opp); autoPlacing(field_gamer);}}).start();
Intent intent=new Intent();
intent.setClass(getApplicationContext(), GamerRound.class);
Intent intent_opp=new Intent();
intent_opp.setClass(getApplicationContext(), OppRound.class);
Intent finIntent=new Intent();
finIntent.setClass(getApplicationContext(), FinishSplash.class);
startActivity(finIntent);
opp=4;
do {
startActivity(intent_opp);
startActivity(intent);
opp-=1;
}while(opp==0);}
@Override
protected void onResume() {
super.onResume();
opp=GameStats.total_ships_opp_count; }
@Override
protected void onSaveInstanceState(Bundle savedInstanseState) {
super.onSaveInstanceState(savedInstanseState);
//savedInstanseState.putInt(key, value); }
public static int attack(int selX, int selY,int field_gamer[][]) {
if(field_gamer[selX][selY]>HERE_NO_CHOOSE) return -1;//не важно
if(field_gamer[selX][selY]==0 || field_gamer[selX][selY]==HERE_NO_CHOOSE) {//если клетка пустая то записываем что её удже атаковали
field_gamer[selX][selY]=BOMB_HERE; return 0; }
if(field_gamer[selX][selY]<5) {//если не пустая то записываем что тут корабль взорван
if(field_gamer[selX][selY]==HERE_SHIP_1) {//если игрок нашёл однотрубник то и искать дальше нечего
field_gamer[selX][selY]=SHIP_ON_FIRE;
field_gamer[selX+1][selY-1]=BOMB_HERE;
field_gamer[selX+1][selY]=BOMB_HERE;
field_gamer[selX+1][selY-1]=BOMB_HERE;
field_gamer[selX][selY-1]=BOMB_HERE;
field_gamer[selX][selY+1]=BOMB_HERE;
field_gamer[selX-1][selY-1]=BOMB_HERE;
field_gamer[selX-1][selY]=BOMB_HERE;
field_gamer[selX-1][selY+1]=BOMB_HERE;
GameStats.total_ships_opp_count-=1; }//вычёркиваем корабль у противника
if(field_gamer[selX][selY]==HERE_SHIP_3) {//
field_gamer[selX][selY]=SHIP_ON_FIRE;
GameStats.ship_3_opp_heal-=1;
if(GameStats.ship_3_opp_heal==0) GameStats.total_ships_opp_count-=1;
}
if(field_gamer[selX][selY]==HERE_SHIP_4) {
field_gamer[selX][selY]=SHIP_ON_FIRE;
GameStats.ship_4_opp_heal-=1;
if(GameStats.ship_4_opp_heal==0) GameStats.total_ships_opp_count-=1;}
return 1; }//успешно
return 0; }//промах
private void autoPlacing(int field_gamer[][]) {//авто расстановка
Random generateRandom=new Random();
int gorizont=0;
int vertic=0;
int tmep_gorizont=0;
//расставляем 4х трубные
int choose=generateRandom.nextInt(2);
switch(choose) {
case 0: //ставимпогоризонтали
tmep_gorizont=gorizont=generateRandom.nextInt(6)+1;//конец не включая
vertic=generateRandom.nextInt(9)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10
for(int i=0;i<HERE_SHIP_4;i++) {
field_gamer[tmep_gorizont][vertic]=HERE_SHIP_4;
field_gamer[tmep_gorizont][vertic-1]=HERE_NO_CHOOSE;
field_gamer[tmep_gorizont][vertic+1]=HERE_NO_CHOOSE;
tmep_gorizont+=1; }//переходим на следующую клетку
field_gamer[gorizont-1][vertic]=HERE_NO_CHOOSE;//конец и начало
field_gamer[gorizont+4][vertic]=HERE_NO_CHOOSE;
field_gamer[gorizont-1][vertic+1]=HERE_NO_CHOOSE;//диагональные клетки
field_gamer[gorizont-1][vertic-1]=HERE_NO_CHOOSE;//диагональные клетки
field_gamer[gorizont+4][vertic+1]=HERE_NO_CHOOSE;
field_gamer[gorizont+4][vertic-1]=HERE_NO_CHOOSE;
break;
case 1://поехали по вертикали
gorizont=generateRandom.nextInt(9)+1;//конец не включая
int tmep_vertic=vertic=generateRandom.nextInt(6)+1;
for(int i=0;i<HERE_SHIP_4;i++) {
field_gamer[gorizont][tmep_vertic]=HERE_SHIP_4;
field_gamer[gorizont-1][tmep_vertic]=HERE_NO_CHOOSE;
field_gamer[gorizont+1][tmep_vertic]=HERE_NO_CHOOSE;
tmep_vertic+=1; }
field_gamer[gorizont][vertic-1]=HERE_NO_CHOOSE;
field_gamer[gorizont][vertic+4]=HERE_NO_CHOOSE;
field_gamer[gorizont-1][vertic-1]=HERE_NO_CHOOSE;
field_gamer[gorizont+1][vertic-1]=HERE_NO_CHOOSE;
field_gamer[gorizont-1][vertic+4]=HERE_NO_CHOOSE;
field_gamer[gorizont+1][vertic+4]=HERE_NO_CHOOSE;
break; }//закончили 4х трубный
do {//начинаем 3 трубные 2 штуки
gorizont=0;
vertic=0;
tmep_gorizont=0;
int choose1=generateRandom.nextInt(2);
switch(choose1) {
case 0: //ставим по горизонтали
//два корабля ставим
booleanenter=false; //надо ли ещё раз генерить новую точку отсчёта
int ship_place=tmep_gorizont=gorizont=generateRandom.nextInt(6)+1; //конец не включая
vertic=generateRandom.nextInt(9)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10
for(intk=0;k<HERE_SHIP_3;k++) { //еслиужезанятооднаклеткаif(field_gamer[ship_place][vertic]==0
&& (field_gamer[ship_place][vertic+1]>4||field_gamer[ship_place][vertic+1]==0)
&& (field_gamer[ship_place][vertic-1]>4|| field_gamer[ship_place][vertic-1]==0)
&& (field_gamer[gorizont-1][vertic]>4|| field_gamer[gorizont-1][vertic]==0)
&&(field_gamer[gorizont+HERE_SHIP_3][vertic]>4||field_gamer[gorizont+HERE_SHIP_3][vertic]==0) &&(field_gamer[gorizont-1][vertic+1]>4||field_gamer[gorizont-1][vertic+1]==0)
&&(field_gamer[gorizont-1][vertic-1]>4 || field_gamer[gorizont-1][vertic-1]==0)
&&(field_gamer[gorizont+HERE_SHIP_3][vertic+1]>4||field_gamer[gorizont+HERE_SHIP_3][vertic+1]==0)&&(field_gamer[gorizont+HERE_SHIP_3][vertic-1]>4|| field_gamer[gorizont+HERE_SHIP_3][vertic-1]==0)) {
enter=true; }
else{enter=false; break;}
ship_place=ship_place+1;}
if(enter) {//если занято то не выполнится цикл
for(int i=0;i<HERE_SHIP_3;i++) {
field_gamer[tmep_gorizont][vertic]=HERE_SHIP_3;
field_gamer[tmep_gorizont][vertic-1]=HERE_NO_CHOOSE;
field_gamer[tmep_gorizont][vertic+1]=HERE_NO_CHOOSE;
tmep_gorizont=tmep_gorizont+1; }//переходим на следующую клетку
field_gamer[gorizont-1][vertic]=HERE_NO_CHOOSE;
field_gamer[gorizont+3][vertic]=HERE_NO_CHOOSE;
field_gamer[gorizont-1][vertic+1]=HERE_NO_CHOOSE;//диагональные клетки
field_gamer[gorizont-1][vertic-1]=HERE_NO_CHOOSE;//диагональные клетки
field_gamer[gorizont+HERE_SHIP_3][vertic+1]=HERE_NO_CHOOSE;
field_gamer[gorizont+HERE_SHIP_3][vertic-1]=HERE_NO_CHOOSE;
ships_count=ships_count+1; }
break;
case 1: //повертикали
intt2_vertic=0;
booleanenter1=false; //надо ли ещё раз генерить новую точку отсчёта
ship_place=gorizont=generateRandom.nextInt(9)+1;//конец не включая
int t_vertic=t2_vertic=vertic=generateRandom.nextInt(6)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10
for(intk=0;k<HERE_SHIP_3;k++) {//если уже занято одна клетка
if(field_gamer[gorizont][t_vertic]==0&&(field_gamer[gorizont+1][t_vertic]>4|| field_gamer[gorizont+1][t_vertic]==0)&&(field_gamer[gorizont-1][t_vertic]>4|| field_gamer[gorizont-1][t_vertic]==0)&&(field_gamer[gorizont+1][vertic-1]>4|| field_gamer[gorizont+1][vertic-1]==0)&&(field_gamer[gorizont][vertic+HERE_SHIP_3]>4 ||field_gamer[gorizont][vertic+HERE_SHIP_3]==0)&&(field_gamer[gorizont-1][vertic-1]>4||field_gamer[gorizont-1][vertic-1]==0)&&(field_gamer[gorizont-1][vertic+HERE_SHIP_3]>4 || field_gamer[gorizont-1][vertic+HERE_SHIP_3]==0)&& (field_gamer[gorizont+1][vertic+HERE_SHIP_3]>4|| field_gamer[gorizont+1][vertic+HERE_SHIP_3]==0)) {
enter1=true; }
else { enter1=false; break;}
t_vertic=t_vertic+1; }
if(enter1) {//еслизанятотоещёразокциклвхиле
for(int i=0;i<HERE_SHIP_3;i++) {
field_gamer[gorizont][t2_vertic]=HERE_SHIP_3;
field_gamer[gorizont-1][t2_vertic]=HERE_NO_CHOOSE;
field_gamer[gorizont+1][t2_vertic]=HERE_NO_CHOOSE;
t2_vertic+=1; }//переходим на следующую клетку
field_gamer[gorizont][vertic-1]=HERE_NO_CHOOSE;
field_gamer[gorizont][vertic+3]=HERE_NO_CHOOSE;
field_gamer[gorizont-1][vertic-1]=HERE_NO_CHOOSE;
field_gamer[gorizont+1][vertic-1]=HERE_NO_CHOOSE;
field_gamer[gorizont-1][vertic+3]=HERE_NO_CHOOSE;
field_gamer[gorizont+1][vertic+3]=HERE_NO_CHOOSE;
ships_count=ships_count+1;
break; }//КОНЕЦ РАССТАНОВКИ
} while(ships_count<3);
/*//начинаемдвухтрубники 3 штуки
ships_count=0;
int ships_2_count=0;
do {//
gorizont=0;
vertic=0;
tmep_gorizont=0;
int choose2=generateRandom.nextInt(2);//choose=1;
switch(choose2) {
case 0: //ставим по горизонтали
//два корабля ставим
booleanenter3=false; //надо ли ещё раз генерить новую точку отсчёта
int ship_place=tmep_gorizont=gorizont=generateRandom.nextInt(6)+1;//конец не включая
vertic=generateRandom.nextInt(9)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10
for(intk=0;k<HERE_SHIP_2;k++) {//если уже занято одна клетка
if(field_gamer[ship_place][vertic]==0&&(field_gamer[ship_place][vertic+1]>4||field_gamer[ship_place][vertic+1]==0)&&(field_gamer[ship_place][vertic-1]>4||field_gamer[ship_place][vertic-1]==0)&&(field_gamer[gorizont-1][vertic]>4|| field_gamer[gorizont-1][vertic]==0)&&(field_gamer[gorizont+HERE_SHIP_2][vertic]>4 || field_gamer[gorizont+HERE_SHIP_2][vertic]==0)&&(field_gamer[gorizont-1][vertic+1]>4 ||field_gamer[gorizont-1][vertic+1]==0)&&(field_gamer[gorizont-1][vertic-1]>4|| field_gamer[gorizont-1][vertic-1]==0)
&&(field_gamer[gorizont+HERE_SHIP_2][vertic+1]>4||field_gamer[gorizont+HERE_SHIP_2][vertic+1]==0)&&(field_gamer[gorizont+HERE_SHIP_2][vertic-1]>4|| field_gamer[gorizont+HERE_SHIP_2][vertic-1]==0)) {
enter3=true; }
else {enter3=false;break;}
ship_place=ship_place+1; }
if(enter3) {//если занято то не выполнится цикл
for(int i=0;i<HERE_SHIP_2;i++) {
field_gamer[tmep_gorizont][vertic]=HERE_SHIP_2;
field_gamer[tmep_gorizont][vertic-1]=HERE_NO_CHOOSE; field_gamer[tmep_gorizont][vertic+1]=HERE_NO_CHOOSE;
tmep_gorizont+=1; }//переходим на следующую клетку
field_gamer[gorizont-1][vertic]=HERE_NO_CHOOSE;
field_gamer[gorizont+3][vertic]=HERE_NO_CHOOSE;
ships_2_count=ships_2_count+1;}
break;
case 1: //повертикали
booleanenter2=false;//надо ли ещё разгенерить новую точку отсчёта
ship_place=gorizont=generateRandom.nextInt(9)+1;//конец не включая
intt_vertic=vertic=generateRandom.nextInt(6)+1;//корабль нельзя начать на буферных полях 0,0 и 10,10
for(intk=0;k<HERE_SHIP_2;k++) {//если уже занято одна клетка
if(field_gamer[gorizont][t_vertic]==0&&(field_gamer[gorizont+1][t_vertic]>4|| field_gamer[gorizont+1][t_vertic]==0)&&(field_gamer[gorizont-1][t_vertic]>4|| field_gamer[gorizont-1][t_vertic]==0)&&(field_gamer[gorizont+1][vertic-1]>4|| field_gamer[gorizont+1][vertic-1]==0)&& field_gamer[gorizont][vertic+HERE_SHIP_2]>4||field_gamer[gorizont][vertic+HERE_SHIP_2]==0)&&(field_gamer[gorizont-1][vertic-1]>4||field_gamer[gorizont-1][vertic-1]==0)&&(field_gamer[gorizont-1][vertic+HERE_SHIP_2+1]>4||field_gamer[gorizont-1][vertic+HERE_SHIP_2+1]==0)&&(field_gamer[gorizont+1][vertic+HERE_SHIP_2+1]>4 || field_gamer[gorizont+1][vertic+HERE_SHIP_2+1]==0)) {
enter2=true; }
else {enter2=false;break;}
t_vertic=t_vertic+1; }
if(enter2) {//еслизанятотоещёразокциклвхиле
for(int i=0;i<HERE_SHIP_2;i++) {
field_gamer[gorizont][t_vertic]=HERE_SHIP_2;
field_gamer[gorizont-1][t_vertic]=HERE_NO_CHOOSE;
field_gamer[gorizont+1][t_vertic]=HERE_NO_CHOOSE;
t_vertic+=1; }//переходим на следующую клетку
field_gamer[gorizont-1][vertic]=HERE_NO_CHOOSE;
field_gamer[gorizont+3][vertic]=HERE_NO_CHOOSE;
ships_2_count=ships_2_count+1;}
break;}//КОНЕЦРАССТАНОВКИ
} while(ships_2_count<3);*/
//начинаем 1хтрубники
int ship_4_count=0;
do {
//boolean enter_4=false;
int gorizont_4=generateRandom.nextInt(9)+1;
int vertic_4=generateRandom.nextInt(9)+1;
if(field_gamer[gorizont_4][vertic_4]==0&&(field_gamer[gorizont_4+1][vertic_4-1]==0 ||field_gamer[gorizont_4+1][vertic_4-1]>4) && (field_gamer[gorizont_4+1][vertic_4]==0 || field_gamer[gorizont_4+1][vertic_4]>4) && (field_gamer[gorizont_4+1][vertic_4-1]==0 ||field_gamer[gorizont_4+1][vertic_4-1]>4) && (field_gamer[gorizont_4][vertic_4-1]==0 ||field_gamer[gorizont_4][vertic_4-1]>4) && (field_gamer[gorizont_4][vertic_4+1]==0 ||field_gamer[gorizont_4][vertic_4+1]>4) && (field_gamer[gorizont_4-1][vertic_4-1]==0 ||field_gamer[gorizont_4-1][vertic_4-1]>4) && (field_gamer[gorizont_4-1][vertic_4]==0 ||field_gamer[gorizont_4-1][vertic_4]>4) && (field_gamer[gorizont_4-1][vertic_4+1]==0 ||field_gamer[gorizont_4-1][vertic_4+1]>4)) {
field_gamer[gorizont_4][vertic_4]=HERE_SHIP_1; field_gamer[gorizont_4+1][vertic_4-1]=HERE_NO_CHOOSE;
field_gamer[gorizont_4+1][vertic_4]=HERE_NO_CHOOSE;
field_gamer[gorizont_4+1][vertic_4-1]=HERE_NO_CHOOSE;
field_gamer[gorizont_4][vertic_4-1]=HERE_NO_CHOOSE;
field_gamer[gorizont_4][vertic_4+1]=HERE_NO_CHOOSE;
field_gamer[gorizont_4-1][vertic_4-1]=HERE_NO_CHOOSE;
field_gamer[gorizont_4-1][vertic_4]=HERE_NO_CHOOSE;
field_gamer[gorizont_4-1][vertic_4+1]=HERE_NO_CHOOSE;
ship_4_count+=1;}
} while(ship_4_count<6);} //функция атаки корабля противником
static int[] autoAttack(int field_gamer[][]) {
int m_att_y=0,m_i=0;
int[] return_coord=new int[3];
Random attRand=new Random();
int att_x = 0;
int att_y = 0;
GameStats.bot_mem_full=false;
if(!GameStats.bot_mem_full) {//если память бота пуста
boolean att_ok=false;//успех атаки
while(!att_ok) {//это чтобы бот не ошибался и не кликал по уже атакованым клеткам и клеткам где физически не может быть корабля
att_x=attRand.nextInt(9)+1;
att_y=attRand.nextInt(9)+1;//выбор клетки для атаки
if(field_gamer[att_x][att_y]!=SHIP_ON_FIRE && field_gamer[att_x][att_y]!=BOMB_HERE)
att_ok=true; }
if(field_gamer[att_x][att_y]==0){ field_gamer[att_x][att_y]=BOMB_HERE;return_coord[0]=att_x;return_coord[1]=att_y;return_coord[2]=0; return return_coord; }//если клетка пуста то отметка об атаке
if(field_gamer[att_x][att_y]==HERE_SHIP_1) {//если бот нашёл однотрубник то и искать дальше нечего
field_gamer[att_x][att_y]=SHIP_ON_FIRE;
field_gamer[att_x+1][att_y-1]=BOMB_HERE;
field_gamer[att_x+1][att_y]=BOMB_HERE;
field_gamer[att_x+1][att_y-1]=BOMB_HERE;
field_gamer[att_x][att_y-1]=BOMB_HERE;