#include <iostream>#include <vector>#include <stdlib.h>#include <time.h>using namespace std;bool comprobare(int filas,int columnas,int bombas,vector<vector<int> > tablero){int comprobado=0; int x=0,y=0; while(x<=filas) { while(y<=columnas) { if (tablero[x][y]>=9 || tablero[x][y]<=19) ++comprobado; ++y; } y=0; ++x; } if (comprobado==(filas*columnas)-bombas) return true; else return false;}bool marcador_term(int filas,int columnas,int bombas,vector<vector<int> > tablero){ int minas_marcadas=0; int x=0,y=0; while(x<filas) { while(y<columnas) { if (tablero[x][y]>=20 || tablero[x][y]<=29) ++minas_marcadas; ++y; } y=0; ++x; } if (minas_marcadas==bombas) return true; else return false;}void observar_ceros(int x, int y,int filas,int columnas,vector<vector<int> > &tablero){ if( tablero[x][y] == 10){//Cero bombas alrededor for(int i = x-1; i < x+2; i++){ for(int j = y-1; j < y+2 ; j++){ if( i >= 0 && i < filas && j >= 0 && j < columnas ){ if (tablero[i][j]==0) //Existe bomba tablero[i][j] = tablero[i][j]+10; } } } }}void mensaje_despedida(){ cout<<"\n-------------------------------------------------------------"<<endl; cout<<"/*/*/Espero que les gustara y que se lo pasaran bien :)/*/*/"<<endl; cout<<"-------------------------------------------------------------"<<endl; cout<<"-------------------------------------------------------------"<<endl; cout<<"\n\t\t**********FIN**********"<<endl; cout<<"-------------------------------------------------------------"<<endl; unsigned adios; cin>>adios;}bool comprobar_bombas(int x,int y,vector<vector<int> > &tablero){ if (tablero[x][y]==19) return true; else return false;}void introducir_accion(int &y,int &x,int filas,int columnas,vector<vector<int> > &tablero,bool &comprobante){ char accion; cout<<"Ejemplo de uso: a 10 4 || m 10 4"<<endl; do{ cout<<"\nIntroduce que deseas hacer(a=abrir casilla,m=marcar casilla,d=desmarcar casilla) "; cin>>accion>>x>>y; }while (x>=filas || y>=columnas && (accion!='a'||accion!='m'||accion!='d')); if (accion=='a') { if (tablero[x][y]<=9 ) tablero[x][y]=tablero[x][y]+10; } if (accion=='m') { if (tablero[x][y]<=19 ) tablero[x][y]=tablero[x][y]+20; } if (accion=='d') { if (tablero[x][y]>=19 ) tablero[x][y]=tablero[x][y]-20; } if (comprobar_bombas(x,y,tablero)==true) comprobante=true; else comprobante=false;}void generar_tablero(int filas,int columnas,vector<vector<int> > &tablero){ system("cls");//BORRA TODO LO QUE HAY EN LA PANTALLA int x=0,y=0; cout<<"\n\n\t\t*****TABLERO DE JUEGO*****\n\t\t\t"; for(int i=1;i<=(filas*columnas);++i) { if (tablero[x][y]>9 && tablero[x][y]<=19) tablero[x][y]=tablero[x][y]-10; if (tablero[x][y]>19) tablero[x][y]=tablero[x][y]-20; if(tablero[x][y]==9) cout <<"B"<<"|"; else cout <<tablero[x][y]<<"|"; ++y; if(y==filas) { ++x; y=0; cout<<"\n\t\t\t"; } }}void generar_bombas(int filas,int columnas,int bombas,vector<vector<int> > &tablero){ cout<<"Estoy generando las bombas... ¿Por que te impacientas tanto?!..."<<endl; int i,x,y;// contador de bombas i = 1; while( i <= bombas){ x = rand()%filas; y = rand()%columnas; tablero[x][y] = 9; i++; }}int observar_bombas(int x, int y,int filas,int columnas,vector<vector<int> > &tablero){ int n_bombas = 0; for(int i = x-1; i < x+2; i++){ for(int j = y-1; j < y+2; j++){ if( i >= 0 && i < filas && j >= 0 && j < columnas ){ if( tablero[i][j] == 9){ //Existe bomba n_bombas++; } } } } return n_bombas;}void generar_numeros(int filas,int columnas,int bombas,vector<vector<int> > &tablero){//Procedemos a buscar las bombas int i,j, numero; for( i = 0; i < filas; i++){ for(j = 0; j < columnas; j++){ if( tablero[i][j] != 9){ //no tiene bomba numero = observar_bombas(i,j,filas,columnas,tablero); tablero[i][j] = numero; } } }}void generar_tablero_visual(int filas,int columnas,vector<vector<int> > &tablero){ system("cls");//BORRA TODO LO QUE HAY EN LA PANTALLA int x=0,y=0; cout<<"\n\n\t\t\t*****TABLERO DE JUEGO*****\n\t\t\t"; for(int i=1;i<=(filas*columnas);++i) { if(tablero[x][y]<=9) cout <<"*"<<"|"; if(tablero[x][y]<19 && tablero[x][y]>9) cout <<tablero[x][y]-10<<"|"; if(tablero[x][y]<=29 && tablero[x][y]>19) if(tablero[x][y]!=29) cout <<"M"<<"|"; if(tablero[x][y]==19) cout <<"B"<<"|"; ++y; if(y==filas) { ++x; y=0; cout<<"\n\t\t\t"; } } cout<<""<<endl;}bool generar_matriz(int filas,int columnas,int bombas){ cout<<"Generando el tablero..."<<endl; vector<vector<int> > tablero ( filas , vector<int>(columnas,0) ); //AHORA GENERAREMOS LAS BOMBAS srand(time(NULL)); generar_bombas(filas,columnas,bombas,tablero); generar_numeros(filas,columnas,bombas,tablero); bool comprobante=false; do { generar_tablero_visual(filas,columnas,tablero); int x,y; introducir_accion(x,y,filas,columnas,tablero,comprobante); observar_ceros(x,y,filas,columnas,tablero); if (marcador_term(filas,columnas,bombas,tablero)==true && comprobare(filas,columnas,bombas,tablero)==true) comprobante=true; } while (comprobante==false); generar_tablero(filas,columnas,tablero); mensaje_despedida();}void dificultad(){ system("cls");//BORRA TODO LO QUE HAY EN LA PANTALLA cout<<"\n\t\t-+-+-+MODO DE DIFICULTAD BUSCAMINAS-+-+-+"<<endl; cout<<"\t\t-+-+-+1.)FACIL(9x9 && 10minas)"<<endl; cout<<"\t\t-+-+-+2.)DIFICIL(16x16 && 40minas)"<<endl; cout<<"\t\t-+-+-+3.)LIBRE(Elegir las dimensiones del tablero y bombas)"<<endl; cout<<"\t\tElija entre las cuatro([|-4]): "; int dificultad; cin>>dificultad; switch(dificultad) { case 1: cout<<"\n\n\t\tTe creia mas valiente... ADELANTE!"<<endl; cout<<"\t\t\tMODO FACIL ACTIVADO"<<endl; generar_matriz(9,9,10); break; case 2: cout<<"\n\n\t\tTe atreves con esto?...Me impresionas.... ADELANTE!"<<endl; cout<<"\t\t\tMODO MEDIO ACTIVADO"<<endl; generar_matriz(16,16,40); break; case 3: cout<<"\n\n\t\tModo libre!!!! ADELANTE!"<<endl; cout<<"\t\tMODO LIBRE ACTIVADO"<<endl; cout<<"\t\tIntroduzca numero filas,columnas y bombas: "; int filas,columnas,bombas; cin>>filas>>columnas>>bombas; while((filas*columnas<bombas || filas*columnas==bombas )) { cout<<"Datos incorrectos:No puede haber mas bombas que el tablero... "<<endl; cout<<"Datos incorrectos:No puede haber el mismo num. bombas que casillas... "<<endl; cout<<"introduzca de nuevo: "; cin>>filas>>columnas>>bombas; } generar_matriz(filas,columnas,bombas); break; default: cout<<"\n\n\t\tCreo que te has equivocado..."<<endl; mensaje_despedida(); cout<<"\t\tSALIENDO...."<<endl; return; }}void eleccion(){ cout<<"De acuerdo...."<<endl; cout<<"Nose si seras capaz de terminar la partida victorioso... ¿Lo intentamos?\t(S/N)"; char eleccion; cin >>eleccion; if (eleccion=='S' || eleccion=='N' || eleccion=='n' || eleccion=='s') { if (eleccion=='s' || eleccion=='S') { cout<<"Veo que te crees valiente... Veamos que dificultad coges..."<<endl; dificultad(); } if(eleccion=='n'||eleccion=='N') { cout<<"Bueno otra vez sera."<<endl; mensaje_despedida(); return; } }}void mensaje_bienvenida(){ cout<<"-------------------------------------------------------------"<<endl; cout<<"/*/*/Bienvenidos a la version final del mitico BUSCAMINAS!/*/*/"<<endl; cout<<"-------------------------------------------------------------"<<endl; cout<<"-------------------------------------------------------------"<<endl; cout<<"/*/*/Espero que sea de su agrado y.../*/*/"<<endl; cout<<"\n\t\t**********A JUGAR**********"<<endl; cout<<"-------------------------------------------------------------"<<endl;}int main(){ cout << "\t\tVersion final BUSCAMINAS" << endl; mensaje_bienvenida(); eleccion(); return 0;}