lectura de
Este es mas choro. Si encuentra un espacio donde la suma de las minas de alrededor sea 0, entonces recursivamente, revisa los alrededores hasta que encuentre un lugar donde la suma no sea cero.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 8 //el tamaño del tablero
#define top 7 //Top vienen a ser las minas
void alrr(int y,int x,int tablero[MAX+2][MAX+2]);
int main(int argc, char *argv[])
{
srand(time(NULL)); // Inicializar random
int tablero[MAX+2][MAX+2];
int i,j;
int x,y,a,b;
int suma=0,ganaste=0,again;
/* Crear el tablero */
for(i=0;i<MAX+2;i++){
for(j=0;j<MAX+2;j++){
tablero[i][j]=0;/* Llenamos la matriz con el valor 0*/
}
}
for(i=0;i<MAX+2;i++)
for(j=0;j<MAX+2;j++)
if(i==0||j==0||i==MAX+1||j==MAX+1)tablero[i][j]=-1;// Llenamos los bordes con el valor -1
do{
printf("Ingrese cuantas minas desea en el campo: ");
scanf("%d", &i);
}while(i<1||i>MAX*MAX-1);
for(j=1;j<=i;j++){
do{
a=rand()%MAX+1;
b=rand()%MAX+1;
if(tablero[a][b]!=top){
tablero[a][b]=top;
again=0;
}else{again=1;}
}while(again);
}
/* Fin crear el tablero */
/* Ciclo del Juego */
do{
/* Mostrar el Tablero */
system("cls");
printf(" ");
for(i=0;i<MAX;i++){ printf("%d ", i+1); }
printf("\n %c", 218);
for(i=1;i<MAX*3;i++){printf("%c", 196);}
printf("\n");
for(i=1;i<MAX+1;i++){
printf("%2d %c ", i,179);
for(j=1;j<MAX+1;j++){
if(tablero[i][j]==top||tablero[i][j]==0){
printf("- ");
}else{
printf("%d ", tablero[i][j]-10);
}
}
printf("\n");
}
/* Fin Mostrar Tablero */
/* Respuestas
printf("\n\n");
printf(" ");
for(i=0;i<MAX;i++){ printf("%d ", i+1); }
printf("\n %c", 218);
for(i=1;i<MAX*3;i++){printf("%c", 196);}
printf("\n");
for(i=1;i<MAX+1;i++){
printf("%2d | ", i);
for(j=1;j<MAX+1;j++){
if(tablero[i][j]==top){
printf("%c ", 233);
}
if(tablero[i][j]==0){
printf("- ");
}
if(tablero[i][j]!=0&&tablero[i][j]!=top){
printf("%d ", tablero[i][j]-10);
}
}
printf("\n");
}
Fin Respuestas */
/* Pedir coordenadas */
do{
printf("\nIngrese una coordenada: ");
scanf("%d %d", &x,&y);
}while(x<1||x>MAX||y<1||y>MAX);
/* Fin Pedir Coordenadas */
/* Perdiste =)*/
if(tablero[y][x]==top){
system("cls");
printf(" ");
for(i=0;i<MAX;i++){ printf("%d ", i+1); }
printf("\n %c", 218);
for(i=1;i<MAX*3;i++){printf("%c", 196);}
printf("\n");
for(i=1;i<MAX+1;i++){
printf("%2d | ", i);
for(j=1;j<MAX+1;j++){
if(tablero[i][j]==top){
printf("%c ", 233);
}else{
printf("- ");
}
}
printf("\n");
}
printf("Perdiste!!\n");
system("pause");
return 0;
}
/* Fin Perdiste */
// Sumar (alrr)ededores de (y,x)
alrr(y,x,tablero);
/* ¿Ganaste? */
for(i=1;i<MAX+1;i++){
for(j=1;j<MAX+1;j++){
if(tablero[i][j]!=0){
ganaste++;
}
}
}
if(ganaste==MAX*MAX){
printf("Ganaste!!!\n");
system("pause");
return 0;
}
/* Fin Ganaste */
suma=0;
ganaste=0;
}while(1);
/* Fin Ciclo del Juego */
}
void alrr(int y, int x, int tablero[MAX+2][MAX+2])
{
int i,j,suma=0;
if(tablero[y][x]!=top){
for(i=y-1;i<=y+1;i++){
for(j=x-1;j<=x+1;j++){
if(tablero[i][j]==top){suma++;}
}
}
tablero[y][x]=suma+10;
if(tablero[y][x]==10){
for(i=y-1;i<y+2;i++){
for(j=x-1;j<x+2;j++){
if(tablero[i][j]==0){alrr(i,j,tablero);}//recursivamente, revisar la vecindad si es que es 0.
}
}
}
}
}