Ciao di nuovo, sto realizzando un prato fiorito per svago, su windows, e praticamente è quasi finito ma mancano alcuni accorgimenti. adesso mi sto scervellando sulle caselle che non hanno nessuna bomba accanto, in pratica se si clicca su una casella con lo zero dovrebbero aprirsi tutte le caselle adiacenti fino a che non si incontra una casella con un numero diverso da zero (in tutte le direzioni), solo che non riesco a inventarmi un modo per farlo.. si potrebbe fare con una funzione ricorsiva ma nemmeno lì mi viene in mente qualche modo per realizzarla
Ecco qua il codice, (diviso in due parti per comodità personale), spero che sia abbastanza comprensibile,
codice:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio3.h>
#include"headersPF.h"
int printM(int M[16][16], int stato);
int move(int M[16][16]);
int a=0,b=0;
int P[16][16]={0};
int main(void)
{
srand(time(NULL));
int M[16][16]={0};
randomize(M);
complete(M);
printM(M,0);
while(move(M)!=1);
return 0;
}
int printM(int M[16][16], int stato)
{
clrscr();
int i,j,q=0;
for(i=0;i<16;i++){
for(j=0;j<16;j++){
if(i==a&&j==b){
if(stato==1){
/*if(M[i][j]==0){
???????
}*/
M[i][j]!=9 ? printf("%d ",M[i][j]) : printf("%c%c",254,254);
if(M[i][j]==9) q=1;
P[i][j]=1;
}
else printf("%c%c",219, 219);
}
else if(P[i][j]!=1) printf("%c%c",178,178);
else if(P[i][j]==1){
colors(M[i][j]);
printf("%d ",M[i][j]);
setcolor(WHITE,BLACK);
}
}
printf("\n");
}
if(q==1) return 1;
else return 0;
}
int move(int M[16][16])
{
int stato=0;
if (getch() == 32) stato=1;
else{
switch (getch()) {
case 72: a--;
break;
case 75: b--;
break;
case 77: b++;
break;
case 80: a++;
break;
}
}
if(printM(M, stato)==1){
addio();
return 1;
}
else return 0;
}
codice:
void randomize(int M[16][16])
{
int i,j,k;
for(k=0;k<40;k++){
i=rand()%16;
j=rand()%16;
M[i][j]!=9 ? M[i][j]=9 : k--;
}
}
void complete(int M[16][16])
{
int i,j;
for(i=0;i<16;i++){
for(j=0;j<16;j++){
if(M[i][j]!=9) M[i][j]=count(M,i,j);
}
}
}
int count(int M[16][16], int i, int j)
{
int c=0;
if(i!=0 && j!=0 && M[i-1][j-1]==9) c++;
if(i!=0 && M[i-1][j]==9) c++;
if(i!=0 && j!=15 && M[i-1][j+1]==9) c++;
if(j!=0 && M[i][j-1]==9) c++;
if(j!=15 && M[i][j+1]==9) c++;
if(i!=15 && j!=0 && M[i+1][j-1]==9) c++;
if(i!=15 && M[i+1][j]==9) c++;
if(i!=15 && j!=15 && M[i+1][j+1]==9) c++;
return c;
}
void colors(int i)
{
switch(i){
case 0: setcolor(BLACK,WHITE);
break;
case 1: setcolor(LIGHTBLUE,BLACK);
break;
case 2: setcolor(LIGHTGREEN,BLACK);
break;
case 3: setcolor(MAGENTA,BLACK);
break;
case 4: setcolor(YELLOW,BLACK);
break;
case 5: setcolor(PINK,BLACK);
break;
case 6: setcolor(PINK,BLACK);
break;
case 7: setcolor(PINK,BLACK);
break;
case 8: setcolor(PINK,BLACK);
break;
case 9: setcolor(LIGHTGREEN,LIGHTRED);
break;
default: setcolor(WHITE,BLACK);
break;
}
}
void addio()
{
printf("\n\nHAI PERSO!\n\n");
}
Grazie molte a chi mi da qualche consiglio 
P.S.: conio3.h è una libreria esterna a tutto, scaricata dal web e modificata un po per farla funzionare, se serve incollo anche quella