dejo un intento de buscaminas usando class no esta terminado, pero la idea es ver si aplico bien las class. o si tienen alguna idea mejor de como quedaria mas simplificado usando class.
Código:
#include <iostream> #include <conio.c> #include "random.h" using namespace std; class menu { public: void ingresa_cant_bomb(); int get_bombas(){return bombas;} private: int bombas; }; void menu::ingresa_cant_bomb() { cout<<"ingrese la cantidad de bombas: "; cin>>bombas; } class cuadricula { public: cuadricula(); void contar_bombas(); void mostrar_cadricula(); void set_bomba_casillero(int i,int j){m[i][j]='*';} void set_valor_casillero(cuadricula &c2,int i,int j){m[i][j]=c2.m[i][j];} bool verificar_casillero(int,int); void mostrar_bombas(); char get_valor_casillero(int i,int j){return m[i][j];} private: char m[8][8]; // }; void cuadricula::mostrar_bombas() { for(int i=1; i<=8; i++) { for(int j=1; j<=8; j++) { if(m[i][j]=='*') cout<<m[i][j]; } cout<<endl; } } bool cuadricula::verificar_casillero(int i, int j) { if(m[i][j]!='*') return true; return false; } void cuadricula::contar_bombas() { int ct=0; for(int i=1; i<=8; i++) { //1 < 21 for(int j=1; j<=8; j++) { ct=0; if(m[i][j]!='*') { if(m[i][j+1]=='*') //delante ++ct; if(m[i-1][j+1]=='*') ++ct; if(m[i+1][j+1]=='*') ++ct; if(m[i][j-1]=='*') //atras ++ct; if(m[i+1][j-1]=='*') ++ct; if(m[i-1][j-1]=='*') ++ct; if(m[i-1][j]=='*') //arriba ++ct; if(m[i+1][j]=='*') ++ct; //abajo m[i][j]=ct+48; } } } } cuadricula::cuadricula() { for(int i=1; i<=8; i++) for(int j=1; j<=8; j++) m[i][j]='-'; } void cuadricula::mostrar_cadricula() { for(int i=1; i<=8; i++) { for(int j=1; j<=8; j++) { cout<<m[i][j]; } cout<<endl; } } class bomba { public: void bomba_al_azar(); int get_posx(){return ejex;} int get_posy(){return ejey;} private: int ejex,ejey; }; void bomba::bomba_al_azar() { ejex=random(8)+1; ejey=random(8)+1; } class jugador : public menu { public: int get_posx_jug(){return posx;} int get_posy_jug(){return posy;} void ingresa_posjug_x_y(); private: int posx,posy; }; void jugador::ingresa_posjug_x_y() { cout<<"ingrese numero de posicion de la fila: "; cin>>posx; cout<<endl<<"ingrese numero de posicion de la columna: "; cin>>posy; } void colocarbombas(cuadricula &,jugador &); int main (int argc, char* argv[]) { cuadricula c1; cuadricula c2;//otro objeto jugador j1; c1.mostrar_cadricula();//en 0 j1.ingresa_cant_bomb(); colocarbombas(c2,j1); c2.contar_bombas(); while(1) { j1.ingresa_posjug_x_y(); clrscr(); if(c2.verificar_casillero(j1.get_posx_jug(),j1.get_posy_jug())) { c1.set_valor_casillero(c2,j1.get_posx_jug(),j1.get_posy_jug()); c1.mostrar_cadricula(); } else { c2.mostrar_bombas(); cout<<endl<<" Perdiste"<<endl; break; } } return 0; } void colocarbombas(cuadricula &c2,jugador &j1)//funcion exterior { randomize(); int ct=0; while(ct!=(j1.get_bombas())) { bomba b; b.bomba_al_azar(); if(c2.verificar_casillero(b.get_posx(),b.get_posy())) { c2.set_bomba_casillero(b.get_posx(),b.get_posy()); ct++; } } }