Ciao, ho fatto qualche correzione:
- srand va chiamato una volta sola
- nella funzione di inizializzazione non mettevi a 1000 anche le caselle di prato, ma solo quelle di pratov. Quindi l'if della funzione DisponiMine era sempre falso
- nella DisponiMine "sorteggiavi" r e c ma poi usavi i e j come indici della matrice. Invece devi usare proprio r e c.
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define dim 4 /* dimensione della griglia di gioco */
#define num_mine 4 /* numero di mine da piazzare */
/* matrice che memorizza le mine e le informazioni su dove sono */
int prato[dim][dim];
/* matrice visualizata */
int pratov[dim][dim];
/* variabili */
int r,c,i,j,gameover,non_mine,cont,fatto;
/* è quando si fa click su una casella per scoprirla */
void Click(int r, int c);
/* visualizza il prato momentaneamente scoperto */
void VisualizzaPrato();
/* disponi le mine */
void DisponiMine();
/* griglia da visualizzare tutta coperta */
void InizializzaGriglia();
int main()
{
srand(time(NULL));
/* azioni iniziali */
InizializzaGriglia();
DisponiMine();
non_mine = dim*dim-num_mine;
/* gioca */
gameover = 0;
cont = 0;
while (gameover==0)
{
/* visualizza prato fiorito */
system("cls");
VisualizzaPrato();
/* scegli casella da scoprire */
printf("\nquale casella vuoi scoprire?\n");
printf("riga: ");
scanf("%d", &i);
printf("colonna: ");
scanf("%d", &j);
/* scopri casella */
Click(i,j);
if (cont==non_mine) /* se le abbiamo scoperte tutte... */
{
printf("WOW! hai vinto\n");
gameover = 1;
}
}
system("pause");
return 0;
}
/* tutte le caselle sono coperte all'inizio */
void InizializzaGriglia()
{
for(i=0; i<dim; i++)
{
for(j=0; j<dim; j++)
{
pratov[i][j]=1000;
prato[i][j] = 1000;
}
}
}
/* scopri una casella */
void Click(int r, int c)
{
/* se mina... */
if (prato[r][c]==100)
{
printf("BUM! hai perso\n");
gameover = 1;
}
else /* altrimenti scopri la casella */
{
pratov[r][c]=prato[r][c];
cont++;
}
}
void VisualizzaPrato()
{
for(i=0; i<dim; i++)
{
for(j=0; j<dim; j++)
printf("%5d", pratov[i][j]); /* mette i numeri a distanza di 5 caratteri l'uno dall'altro */
printf("\n");
}
}
/* disponi le mine sulla griglia */
void DisponiMine()
{
cont = 0;
printf("sto posizionando le navi\n\n");
while(cont<num_mine)
{
printf("%d\n", cont);
r=rand()%dim;
c=rand()%dim;
if(prato[r][c]==1000)
{
prato[r][c]=100;
cont++;
}
}
}
Credo ci siano comunque altri errori: prova a proseguire tu.
PS. La prossima volta ricordati di postare il codice nei tag CODE.