Elenet.net
+2 voti
Vorrei creare un programma che simuli in linguaccio C il famoso gioco: la battaglia navale.

Qualcuno può darmi indicazioni?
chiuso con la nota: ho risolto il mio problema
quesito posto 6 Marzo 2013 in Classe terza da Emanuele Rizzo Esperto (238 punti)
chiuso 6 Marzo 2013 da Emanuele Rizzo
  

1 Risposta

+3 voti
Risposta migliore

Ciao Emanuele! Ecco qui il programma "parzialmente" completato, ovvero, il programma funziona correttamente ma il codice è stato scritto per far inserire all'utente una sola nave.

 

#include <stdio.h>

#include <stdlib.h>

void stampaPosizione (int, int);
int stampaAffondata (char);
void inseriscinave(int,int,int);
 
char campo [6] [6];
 
int a,b,verso,colpi;
int i;
int controlla;
int main ()
{
colpi=0; 
int i,j;
controlla=0;
for(i=0;i<6;i++)
for(j=0;j<6;j++)
campo [i][j]='0';
 
int riga,col;
int pos[4];//pos 0: = alto ok   pos 1 := basso ok   pos 2 := destra ok   pos 3 :=  sinistra ok
 
 printf("inserisci riga");
 scanf("%d", &riga);
 printf("inserisci colonna");
 scanf("%d", &col);
 
 for(i = 0; i < 4; i++)
 pos[i]=0;
 
 if((riga-2)>=0)
  {
  pos[0]=1;
  printf("0: inserisci verso l'alto\n");}
  
  if((riga+2)<=5)
 { pos[1]=1;
   printf("1: inserisci verso il basso\n");
}
 
 if((col-2)>=0)
{
  pos[2]=1;
   printf("2: inserisci verso sinistra\n");
}
 
 if((col+2)<=5)
 {
  pos[3]=1;
   printf("3: inserisci verso destra\n");
  }
  scanf("%d",&verso);
  //inserisci le navi 
  inseriscinave(riga,col,verso) ;
  printf("nave inserita\n chiama il tuo amico per fargliela indovinare\n");
  while(1)
  { if(controlla==1)
  break;
 printf("inserisci riga");
 scanf("%d", &riga);
 
 printf("inserisci colonna");
 scanf("%d", &col);
 colpi=colpi+1;
 printf("hai sparato il tuo %d colpo\n\n", colpi);
 stampaPosizione(riga,col);
 //stampaAffondata('a');
 }
                                       
 system("PAUSE");         } 
 
void inseriscinave(int riga,int colonna,int verso)
{ campo[riga][colonna]='a';
switch(verso)
{
case 0:
     campo[riga-1][colonna] ='a';
     campo[riga-2][colonna] ='a';
     break;
     case 1:
     campo[riga+1][colonna] ='a';
     campo[riga+2][colonna] ='a';
     break;
     case 2:
     campo[riga][colonna-1] ='a';
     campo[riga][colonna-2] ='a';
     break;
     case 3:
     campo[riga][colonna+1] ='a';
     campo[riga][colonna+2] ='a';
     break;
}
}
 
void stampaPosizione (int riga, int colonna)
{
int posizione;
char nave;
 
if (riga < 0 || riga > 5 ||
        colonna < 0 || colonna > 5)
{
printf ("le coordinate (%d, %d) non sono valide\n",
riga, colonna);
return;
}
 
if (campo [riga][colonna] == '0')
printf ("in (%d, %d) c'e' acqua\n", riga, colonna);
else if (campo [riga][colonna] == '*')
printf ("in (%d, %d) c'e' una nave gia' colpita\n",
riga, colonna);
else
{
nave = campo [riga][colonna];
printf ("in (%d, %d) c'e' la nave %c : COLPITA!!\n",
riga, colonna, nave);
campo [riga][colonna] = '*';
controlla=stampaAffondata (nave);
}
}
 
int stampaAffondata (char nave)
{
int a,b;
for (a = 0; a < 6; a ++)
       for (b = 0; b < 6; b ++)
if (campo [a][b] == nave)
{
printf ("nave %c non affondata\n", nave);
return 0;
}
 
            printf ("nave %c AFFONDATA !!!\n", nave);
        
for (a = 0; a < 6; a ++)
for (b = 0; b < 6; b ++)
 
if (campo [a][b]!= '0' && campo [a][b] != '*')
{
printf ("ci sono ancora altre navi\n");
return 0;
}
            printf ("PARTITA TERMINATA !!!\n");
            
  system("PAUSE");
  return 1;
                 }
risposta inviata 6 Marzo 2013 da Roberto De Rosalia Corsista (124 punti)
Selezionata 6 Marzo 2013 da Gianni Messina
Battaglia navale: Come fare per avere più navi?

Domande correlate

+3 voti
1 risposta
quesito posto 7 Marzo 2013 in Classe terza da Emanuele Rizzo Esperto (238 punti) | 540 visite
+2 voti
2 risposte
quesito posto 7 Marzo 2013 in Classe terza da Gianni Messina Esperto (736 punti) | 210 visite
+1 voto
2 risposte
quesito posto 13 Marzo 2013 in Classe terza da Emanuele Rizzo Esperto (238 punti) | 10,956 visite
778 domande
1,565 risposte
639 commenti
1,445 utenti