Ho modificato il programma affinchè il giocatore può inserire una nave da tre caselle, una nave da due caselle e una nave da una casella.
inoltre il programma adesso una volta inserite le navi cancella dallo schermo di gioco le coordinate delle navi inserite precedentemente.
#include <stdio.h>
#include <stdlib.h>
void stampaPosizione (int, int);
int stampaAffondata (char);
void inseriscinave(int,int,int);
void inseriscinavedue(int,int,int);
void inseriscinaveuno(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 per la nave da tre caselle");
scanf("%d", &riga);
printf("inserisci colonna per la nave da tre caselle");
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);
inseriscinave(riga,col,verso) ;
printf("inserisci riga per la nave da due caselle");
scanf("%d", &riga);
printf("inserisci colonna per la nave da due caselle");
scanf("%d", &col);
for(i = 0; i < 4; i++)
pos[i]=0;
if((riga-1)>=0)
{
pos[0]=1;
printf("0: inserisci verso l'alto\n");}
if((riga+1)<=5)
{ pos[1]=1;
printf("1: inserisci verso il basso\n");
}
if((col-1)>=0)
{
pos[2]=1;
printf("2: inserisci verso sinistra\n");
}
if((col+1)<=5)
{
pos[3]=1;
printf("3: inserisci verso destra\n");
}
scanf("%d",&verso);
inseriscinavedue(riga,col,verso) ;
printf("inserisci riga per la nave da una casella");
scanf("%d", &riga);
printf("inserisci colonna per la nave da una casella");
scanf("%d", &col);
inseriscinaveuno(riga,col) ;
//inserisci le navi
//inseriscinave(riga,col,verso) ;
system("cls");
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;
}
void inseriscinavedue(int riga,int colonna,int verso)
{ campo[riga][colonna]='b';
switch(verso)
{
case 0:
campo[riga-1][colonna] ='b';
break;
case 1:
campo[riga+1][colonna] ='b';
break;
case 2:
campo[riga][colonna-1] ='b';
break;
case 3:
campo[riga][colonna+1] ='b';
break;
}
}
void inseriscinaveuno(int riga,int colonna)
{ campo[riga][colonna]='c';
}