pezzo di battaglia navale in java
Inviato: martedì 5 giugno 2007, 16:54
sto creando un programma per la battaglia navale per la scuola e ho finito tutto il programma
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
lasciamo perdere gli errori di sintassi che non dovrebbero essercene(ho solo sostituito agli input manuali un numero casuale generato da Math.random)
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
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