codice:
#include "Header.h" //Libreria
void main()
{
/*INIZIALIZZAZIONE*/
//inizializzazione campo da gioco griglia 10x10
char attRiga;
char lettere[10]={'A','B','C','D','E','F','G','H','I','L'}; //vettore di char per l'indice di riga della griglia
//int nave3[3]={3,3,3},nave4[4]={4,4,4,4},nave5[5]={5,5,5,5,5}; //vettori per le varie celle delle navi
int navi_distrutte=0,tentativi=0,attColonna;
//mosse *m[20];
int grid[LatoGriglia][LatoGriglia]={{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
};
srand((unsigned int)time(NULL)); //set del seed
printf("**********************************\n");
printf("*** BATTAGLIA NAVALE ***\n");
printf("** Created By **\n");
printf("** Davide Santoro **\n");
printf("**********************************\n\n\n\n");
_sleep(500);
printf("***** Game Started *****\n\n");
printf("*** Obiettivo: ***\n");
printf("** Distruggere le navi nemiche. **\n");
printf("** 20 Tentativi a disposizione. **\n\n");
spawn_navi(grid); //disporre casualmente le navi
printf(" ** Navi nemiche apparse. **\n");
do {
tentativi++;
printf("\t * Tentativo %d *\n * Navi distrutte: %d *\n\n",tentativi,navi_distrutte);
grid_printer(grid,lettere);
legge_attacco(&attRiga,&attColonna); //chiamata alla scanf per le coordinate di attacco
controllo_griglia(attRiga,attColonna,grid,&navi_distrutte); //controlla la griglia, e incrementa il contatore(navi_distrutte) se si è colpita una cella con una nave
grid_printer(grid,lettere);
system("Pause");
printf("\n\n\n\n\n\n\n");
stato_prec(attRiga,attColonna,grid);
} while (!(tentativi >= 20 || navi_distrutte >= 12));
if (navi_distrutte==12) printf("\n\n*** Complimenti: You Win. ***\n\n");
else if (tentativi==20) printf("\n\n* Game Over: Hai Perso. *\n\n");
else printf("\n\nErrore\n\n");
system("Pause");
}
codice:
#include "Header.h"
//Procedura per stampare la griglia
void grid_printer(int grid[][LatoGriglia],char lettere[])
{
int i,j;
for (i=0;i<LatoGriglia;i++)
printf("%3d",i+1);
for (i=0;i<=LatoGriglia;i++)
{
if (i<10)
{
printf("\n%-1c",lettere[i]);
}
for (j=0;j<LatoGriglia;j++)
{
if (grid[i][j]==0)
{
printf(" _ "); //vuoto
}
else if(grid[i][j]==1)
{
printf(" X "); //colpito nave A
}
else if(grid[i][j]==2)
{
printf(" O "); //acqua
}
else if(grid[i][j]==3)
{
printf(" A "); //nave 1
}
else if(grid[i][j]==4)
{
printf(" B "); //nave 2
}
else if(grid[i][j]==5)
{
printf(" C "); //nave 3
}
else break;
}
if (i<10)
printf("|");
}
printf("\n\n");
}
//Procedura per disporre le navi sulla griglia
void spawn_navi(int grid[][LatoGriglia])
{
int direzione=0,tmpRiga,tmpColonna,cella,i=0;
//Ciclo per 3 navi
for (i=navi3;i<=navi5;i++)
{
direzione=RandInt(0,1); //spawn della direzione
switch (direzione) //controllo direzione
{
case 0: //nave in verticale
tmpRiga=RandInt(0,LatoGriglia-1); //spawn riga normalmente
tmpColonna=RandInt(0,LatoGriglia-i-1); //spawn colonna meno celle grandezza della nave per non uscire fuori dalla griglia
for (cella=0;cella<i;cella++) //mettere le coordinate nella griglia
{
if (grid[tmpRiga][tmpColonna]==i) //se la cella è occupata da un'altra nave(identifacata dall'indice esterno del FOR(3,4,5)
{
grid[tmpRiga+1][tmpColonna]=i; //spostarsi di una colonna
tmpColonna++;
}
else
{
grid[tmpRiga][tmpColonna]=i;
tmpColonna++;
}
}
break;
case 1: //nave in orizzontale
tmpRiga=RandInt(0,LatoGriglia-i-1); //spawn righe meno celle della grandezza nave
tmpColonna=RandInt(0,LatoGriglia-1); //spawn colonne regolarmente
for (cella=0;cella<i;cella++) //mettere le coordinate nella griglia
{
if (grid[tmpRiga][tmpColonna]==i) //se la cella è occupata da un'altra nave(identifacata dall'indice esterno del FOR(3,4,5)
{
grid[tmpRiga][tmpColonna+1]=i; //spostarsi di una riga
tmpColonna++;
}
else
{
grid[tmpRiga][tmpColonna]=i;
tmpColonna++;
}
}
break;
}
}
}
//Numeri Random
int RandInt(int a,int b)
{
return a + rand() % (b - a + 1);
}
//Procedura per leggere le coordiante del punto di attacco
void legge_attacco(char *attRiga, int *attColonna)
{
fflush(stdin); //Pulisce immissione di tastiera
printf("Inserire le coordinate (Riga,A..L)(Colonna,1..10): ");
scanf("%c%d",attRiga,attColonna);
printf("\n");
}
void controllo_griglia(char attRiga,int attColonna,int grid[][LatoGriglia],int *navi_distrutte)
{
int ind = (int)attRiga - 65; //controlla l'ASCII di attRiga, e confrontalo con il l'ASCII di 'A' = 65
attColonna-=1;
switch (grid[ind][attColonna])
{
case 3:
grid[ind][attColonna]=1; //Colpito
printf("\n** Attacco in %c:%d **\n* Prima Nave distrutta *\n\n",attRiga,attColonna+1);
*navi_distrutte++;
break;
case 4:
grid[ind][attColonna]=1; //Colpito
printf("\n** Attacco in %c:%d **\n* Seconda Nave distrutta *\n\n",attRiga,attColonna+1);
*navi_distrutte++;
break;
case 5:
grid[ind][attColonna]=1; //Colpito
printf("\n** Attacco in %c:%d **\n* Terza Nave distrutta *\n\n",attRiga,attColonna+1);
*navi_distrutte++;
break;
case 0:
grid[ind][attColonna]=2; //Acqua
printf("\n** Attacco in %c:%d **\n*** Acqua ***\n\n",attRiga,attColonna+1);
break;
case 1:
grid[ind][attColonna]=1; //Colpito già
printf("\n** Attacco in %c:%d **\n*** Nave gia' distrutta ***\n\n",attRiga,attColonna+1);
break;
case 2:
grid[ind][attColonna]=2; //Acqua già
printf("\n** Attacco in %c:%d **\n*** Acqua: Punto gia' colpito ***\n\n",attRiga,attColonna+1);
break;
}
}
void stato_prec(char attRiga,int attColonna,int grid[][LatoGriglia])
{
int ind = (int)attRiga - 65;
attColonna-=1;
switch (grid[ind][attColonna])
{
case 1: //Colpo centrato: Nave distrutta
printf("\n** Mossa precedente: Attacco in %c:%d **\n*** Nave Distrutta ***\n\n",attRiga,attColonna+1);
break;
case 2: //Colpo precedente: Acqua
printf("\n** Mossa precedente: Attacco in %c:%d **\n*** In Acqua ***\n\n",attRiga,attColonna+1);
break;
default: //Già effettuato
printf("\n** Mossa precedente: Attacco in %c:%d **\n*** Attacco precedente gia' effettuato. ***\n\n",attRiga,attColonna+1);
}
}