piccolo problema
quando il pc deve inserire le navi casualmente il programma continua a calcolare ma non finisce mai di completare il suo campo di battaglia(quello del giocatore è manuale e funziona benissimo
ecco qui il pezzo di sorgente che mi aiuterebbe che voi guardaste
Codice: Seleziona tutto
/*1,2,3,4 navi m=mare c=colpito a=affondato n=nebbia b=bandiera(nessuna nave intorno)*/
int DIM=8;
int i=0,j=0,k=0;
char difesa_pc[][]=new char[DIM][DIM],attacco_giocatore[][]=new char[DIM][DIM],attacco_pc[][]=new char[DIM][DIM],difesa_giocatore[][]=new char[DIM][DIM]; //le varie matrici per il campo
int navi_inserite=0,l=0;
int nave[]=new int[5];//le 4 navi(ho messo il vettore lungo 5 così è più comodo usare l come indice facendo finta che non esista nave[0]
int ins_r,ins_c;//indici di inserimento di del primo blocco della nave
boolean casella_ok,fuori_indice;
char v_o=0;//nave verticale o orizzontale
for(i=0;i<DIM;i++)for(j=0;j<DIM;j++){difesa_pc[i][j]='m';attacco_giocatore[i][j]='n';}
for(i=0;i<DIM;i++)for(j=0;j<DIM;j++){difesa_giocatore[i][j]='m';attacco_pc[i][j]='n';}
nave[1]=1;nave[2]=1;nave[3]=1;nave[4]=1;
while(navi_inserite<4)
{
for(i=0;i<DIM;i++){System.out.print("\n");for(j=0;j<DIM;j++)System.out.print(" "+difesa_pc[i][j]);}System.out.print("\n");
do{l=(int)(Math.random()*4);}while(l<=0 || l>4);
if(l==1)v_o='v';
else do{k=(int)(Math.random()*1000);if(k%2==0)v_o='v';if(k%2==1)v_o='o';}while(v_o!='v' && v_o!='o');
do{
do{ins_r=(int)(Math.random()*DIM);}while(ins_r<0 || ins_r>=DIM);
do{ins_c=(int)(Math.random()*DIM);}while(ins_c<0 || ins_c>=DIM);
casella_ok=true;
if(v_o=='o')
for(k=ins_c;k<ins_c+l;k++)
for(i=ins_r-1;i<ins_r+2;i++)
for(j=k-1;j<k+2;j++)
if(i>=0 && i<DIM && j>=0 && j<DIM)
if(difesa_pc[i][j]!='m' && difesa_pc[i][j]!='b')
casella_ok=false;
if(v_o=='v')
for(k=ins_r;k<ins_r+l;k++)
for(i=k-1;i<k+2;i++)
for(j=ins_c-1;j<ins_c+2;j++)
if(i>=0 && i<DIM && j>=0 && j<DIM)
if(difesa_pc[i][j]!='m' && difesa_pc[i][j]!='b')
casella_ok=false;
}while(casella_ok==false);
fuori_indice=false;
if(v_o=='v')for(i=ins_r;i<l+ins_r;i++)if(i<0 || i>=DIM)fuori_indice=true;
if(v_o=='o')for(i=ins_c;i<l+ins_c;i++)if(i<0 || i>=DIM)fuori_indice=true;
if(nave[l]==1 && fuori_indice==false)
{
if(v_o=='v')
{
for(i=ins_r-1;i<ins_r+1+l;i++)for(j=ins_c-1;j<ins_c+2;j++)if(i>=0 && i<DIM && j>=0 && j<DIM)difesa_pc[i][j]='b';
for(i=ins_r;i<l+ins_r;i++)if(i>=0 && i<DIM)difesa_pc[i][ins_c]=(char)(48+l);
}
if(v_o=='o')
{
for(i=ins_r-1;i<ins_r+2;i++)for(j=ins_c-1;j<ins_c+l+1;j++)if(i>=0 && i<DIM && j>=0 && j<DIM)difesa_pc[i][j]='b';
for(i=ins_c;i<l+ins_c;i++)if(i>=0 && i<DIM)difesa_pc[ins_r][i]=(char)(48+l);
}
nave[l]=0;
navi_inserite++;
}
}
for(i=0;i<DIM;i++)for(j=0;j<DIM;j++)if(difesa_pc[i][j]=='b')difesa_pc[i][j]='m';
System.out.print("Difesa giocatore");
for(i=0;i<DIM;i++){System.out.print("\n");for(j=0;j<DIM;j++)System.out.print(" "+difesa_pc[i][j]);}System.out.print("\n");
come potrei avere un numero casuale ma che cambia ogni volta?tipo che ha a che fare con il tempo ad esempio...
lo so sono abbastanza incasinato con i pensieri ma dovrebbe essere giusto e non capisco perchè si inchioda e non genera il campo...
se servono delucidazioni sono qui
ps se è entro oggi meglio ancora :P



