#include <stdio.h>
#include <time.h>
#include <math.h>
#include <windows.h>
#define roz 8
void pusta(int t[][roz]);//wypelnia tablice kropkami
void druk(int t[][roz]);//drukuje tablice
void zapisz(int t[][roz],int r[][roz],int m, int n);//zapisuje wczytana komorke liczba min wokol
void wczytaj(int t[][roz],int w[],char m, int n);//pobiera od gracza wsp i sprawdza ich poprawnosc
void zera(int t[][roz],int r[][roz],int m, int n);//zeruje 5 zerowych komorek wokol
void wylicz(int r[][roz]);//uruchamia licz dla komorek roznych od miny w tablicy zakrytej
int spr(int t[][roz],int m, int n);//sprawdza czy komorka mn jest mina
int spr2(int t[][roz],int r[][roz]);//przelicza tablice w poszukiwaniu poprawnie oznaczonych min przez gracza
int spro(int t[][roz],int r[][roz]);//podaje ile min zostalo graczowy
int licz(int t[][roz],int m, int n);//liczy ilosc min wokol komorki mn
void los(int t[][roz]);//losuje miny na planszy
void zero(int x, int y, int tab1[][roz], int tab2[][roz]);
void main()
{
int miny[roz][roz],tab[roz][roz],t[1],wsp[2];
int i,m,n,u,w,x=0,q;
pusta(miny);pusta(tab);
los(miny);
wylicz(miny);q=1;
while(q)
{
printf("Pozostalo min: %d",spro
(tab
,miny
));
druk(tab);
wczytaj(tab,wsp,m,n);
u=wsp[0];w=wsp[1];
if(licz(miny,u,w)==32)
{zero(u,w,tab,miny);}
zapisz(tab,miny,u+65,w+1);
if(spr2(tab,miny)==10 && spro(tab,miny)==0)
{goto wygrana;}
q=spr(miny,u,w);
}
druk(miny);
printf("Trafiles mine w polu %c%d!\n",u
+65,w
+1);
if(x==1){wygrana: druk(tab);
}
void zero(int x, int y, int tab1[][roz], int tab2[][roz])
{
int i,j;
if(tab1[x][y]!=46)
return 0;
if(x<0 || x>roz-1)
return 0;
if(y<0 || y>roz-1)
return 0;
if(tab2[x][y]>48 && tab2[x][y]<57)
tab1[x][y]=tab2[x][y];
if(tab2[x][y]!=32)
return 0;
tab1[x][y]=tab2[x][y];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{zero(x-1+i,y-1+j,tab1,tab2);}
}
}
void zera(int t[][roz],int r[][roz],int m, int n)
{
int i,j,u,w;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(r[u][w]==32 && w<roz)
{
t[u][w]=licz(r,m,n);
}
}
}
}
void wylicz(int r[][roz])
{
int i,j;
for(i=0;i<roz;i++)
{
for(j=0;j<roz;j++)
{
if(r[i][j]!='$'){
r[i][j]=licz(r,i,j);}
}
}
}
int spro(int t[][roz],int r[][roz])
{
int i,j,k=0;
for(i=0;i<roz;i++)
{
for(j=0;j<roz;j++)
{
if(t[i][j]=='o')
{k++;}
}
}
return 10-k;
}
int spr2(int t[][roz],int r[][roz])
{
int i,j,k=0;
for(i=0;i<roz;i++)
{
for(j=0;j<roz;j++)
{
if(t[i][j]=='o' && r[i][j]=='$')
{k++;}
}
}
return k;
}
int licz(int t[][roz],int m, int n)
{
int k=0,i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if((n==0 && j==0)|| (n==roz-1 && j==2))
{continue;}
else{
if(t[m-1+i][n-1+j]=='$')
{k++;}}
}
}
if(k==0){return k+32;}
else{return k+48;}
}
int spr(int t[][roz],int m, int n)
{
int k=1;
if(t[m][n]=='$')
{k=0;}
return k;
}
void los(int t[][roz])
{
int i,j,k,l,m=0;
for(i=0;i<10;i++){
while(t[k][l]!=46)
{
}
t[k][l]='$';}
}
void wczytaj(int t[][roz],int w[],char m, int n)
{
int x,q=0;
char k;
scanf("%c%d%c",&m
,&n
,&k
);
x=t[m-65][n-1];
if(x!=46){if(x!=111){q=1;}}
while(q || n>=roz+1)
{
printf("Zla komorka! Podaj ponownie: ");
scanf("%c%d%c",&m
,&n
,&k
);
x=t[m-65][n-1];q=0;
if(x!=46){if(x!=111){q=1;}}
}
if(k==111)
{
w[0]=7;w[1]=9;
t[m-65][n-1]='o';}
else{
w[0]=m-65;w[1]=n-1;}
}
void pusta(int t[][roz])
{
int i,j;
for(i=0;i<roz;i++)
{
for(j=0;j<roz;j++)
{t[i][j]=46;}
}
}
void druk(int t[][roz])
{
int i,j;
for(i=0;i<roz;i++){
for(i=0;i<roz;i++){
for(j=0;j<roz;j++)
{
}
}
void zapisz(int t[][roz],int r[][roz],int m, int n)
{
int i,p=licz(r,m-65,n-1);
for(i=0;i<roz;i++)
{
if(65+i==m)
{
t[i][n-1]=p;
}
}
}