#include <stdio.h>
#include <stdlib.h>
#define DIMENSIONE_CAMPO 5
#define LUNGHEZZA_NAVE 2
#define GIOCATORI 2
struct STR_NAVE{
int Posizione[LUNGHEZZA_NAVE][2];
char Nome[80];
int PosColpite;
};
void DisegnaCampo(struct STR_NAVE struttura);
int TrovaPosizione(int Ind1,int Ind2,struct STR_NAVE struttura);
int VerificaPosizione(int Index,struct STR_NAVE struttura);
int main()
{
int i,k,appo1,appo2;
struct STR_NAVE nave[GIOCATORI];
for(k=0;k<GIOCATORI;k++)
{
system("cls");
nave[k].PosColpite=0;
printf("Nome Giocatore %d: ",k+1);
scanf("%s",nave[k].Nome);
for(i=0;i<LUNGHEZZA_NAVE;i++)
{
DisegnaCampo(nave[k]);
do{
printf("%s\nScegli la %d^ coppia di coordinate dove sara inserita la nave(es. riga,colonna).\n",nave[k].Nome,i+1);
scanf("%d,%d",&nave[k].Posizione[i][0],&nave[k].Posizione[i][1]);
}while(VerificaPosizione(i,nave[k])==0);
DisegnaCampo(nave[k]);
if (i == (LUNGHEZZA_NAVE - 1))
{
printf("Nave inserita correttamente!\n");
system("pause");
}
}
}
system("cls");
printf("\t\tCOMINCIA LA BATTAGLIA!");
k=0;
while(1)
{
printf("\nE' il turno di %s.\n",nave[k].Nome);
printf("Scegli una coppia di coordinate(es. riga,colonna).\n");
scanf("%d,%d",&appo1,&appo2);
if(TrovaPosizione(appo1,appo2,nave[k])==0)
{
printf("Hai colpito una zona della nave!\n");
nave[k].PosColpite++;
}
else
{
printf("Niente da fare.\n");
}
if (nave[k].PosColpite == LUNGHEZZA_NAVE)
{
printf("%s ha vinto!!!\n\n",nave[k].Nome);
break;
}
if(k==0)
k=1;
else
k=0;
}
system("pause");
return 0;
}
void DisegnaCampo(struct STR_NAVE struttura){
int i,j;
system("cls");
for(i=0;i<DIMENSIONE_CAMPO;i++)
printf("%5d",i);
printf("\n\n");
for(i=0;i<DIMENSIONE_CAMPO;i++)
{
printf("%d ",i);
for(j=0;j<DIMENSIONE_CAMPO;j++)
{
if(TrovaPosizione(i,j,struttura)!=0)
printf("|__| ");
else
printf("|||| ");
}
printf("\n\n");
}
}
int TrovaPosizione(int Ind1,int Ind2,struct STR_NAVE struttura){
int i;
for(i=0;i<LUNGHEZZA_NAVE;i++)
if (Ind1 == struttura.Posizione[i][0] && Ind2 == struttura.Posizione[i][1])
return 0;
}
int VerificaPosizione(int Index,struct STR_NAVE struttura){
int i;
if ( (struttura.Posizione[Index][0] < 0 ) || ( struttura.Posizione[Index][0] >= DIMENSIONE_CAMPO ) ) return 0;
else if ( (struttura.Posizione[Index][1] < 0 ) || ( struttura.Posizione[Index][1] >= DIMENSIONE_CAMPO ) ) return 0;
else if ( Index==0 ) return 1;
else if ( ( (struttura.Posizione[Index][0] - struttura.Posizione[Index-1][0]) == 1) && ( ( struttura.Posizione[Index][1] - struttura.Posizione[Index-1][1] ) == 0 ) ) return 1;
else if ( ( (struttura.Posizione[Index][0] - struttura.Posizione[Index-1][0]) == -1) && ( ( struttura.Posizione[Index][1] - struttura.Posizione[Index-1][1] ) == 0 ) ) return 1;
else if ( ( (struttura.Posizione[Index][0] - struttura.Posizione[Index-1][0]) == 0) && ( ( struttura.Posizione[Index][1] - struttura.Posizione[Index-1][1] ) == 1 ) ) return 1;
else if ( ( (struttura.Posizione[Index][0] - struttura.Posizione[Index-1][0]) == 0) && ( ( struttura.Posizione[Index][1] - struttura.Posizione[Index-1][1] ) == -1 ) ) return 1;
else return 0;
}