/* * Questo programma realizza una versione semplificata del gioco della battaglia navale * L'utente puo' scegliere dimensioni della griglia e numero di navi. * Le navi sono grandi una sola casella della griglia e sono posizionate in maniera random sia per utente che cpu * Una griglia e rappresentata come una matrice di caratteri * - il carattere o rappresenta una nave * - il carattere n rappresenta una casella vuota * - il carattere y rappresenta una nave colpita * - il carattere x rappresenta una casella vuota colpita * * Se l'utente chiede di colpire una casella al di fuori della griglia il programma salva lo stato della partita e termina. * Se alla partenza il programma trova una partita salvata carica le matrici e continua la partita precedente, * altrimenti chiede all'utente le dimensioni e il numero di navi per iniziare una nuova partita. */ #include #include #include #define NMAX 50 void inzializza(char m[NMAX][NMAX], int r,int c, int navi ); void stampa(char mu[NMAX][NMAX], char cpu[NMAX][NMAX], int r, int c); void salvapartita(char mu[NMAX][NMAX], char cpu[NMAX][NMAX], int r, int c); int caricapartita(char mu[NMAX][NMAX], char cpu[NMAX][NMAX], int *r, int *c); int playutente(char m[NMAX][NMAX], int r, int c); void playcpu(char m[NMAX][NMAX], int r, int c); //controlla il numero di navi non affondate int check(char m[NMAX][NMAX], int r, int c); int main(int argc, char **argv) { int r,c, navi; char mu[NMAX][NMAX], cpu[NMAX][NMAX]; srand(time(NULL)); if(!caricapartita(mu,cpu,&r,&c)) { printf("inserisci le dimenstione delle matrici:\n"); scanf("%d %d",&r,&c); printf("inserisci il numero di navi:\n"); scanf("%d",&navi); inzializza(mu,r,c,navi); inzializza(cpu,r,c,navi); } int continua =1; do{ if(playutente(cpu,r,c)){ //fa giocare l'utente //se playutente ritorna 1 (ovvero l'utente ha inserito una posizione valida) // controlla se ci sono navi da affondare per l'utente if(check(cpu,r,c)>0) { //se ci sono navi da affondare fa giocare la cpu playcpu(mu,r,c); stampa(mu,cpu,r,c); printf("\n"); //controlla che ci sono navi da affondare per la cpu if(check(mu,r,c)==0){ continua=0; printf("ha vinto la cpu\n"); } } else //non ci sono navi da affondare per l'utente { printf("hai vinto!!!\n"); continua=0; } } else{ //playutente ritorna 0 perchè l'utente non ha inserito una posiziona valida salvapartita(mu,cpu,r,c); continua=0; } }while(continua); } int check(char m[NMAX][NMAX], int r, int c) { int navi=0; for(int i=0;i