
05/01/2009, 15:21
|
| | Fecha de Ingreso: mayo-2007 Ubicación: Buenos aires
Mensajes: 19
Antigüedad: 17 años, 10 meses Puntos: 0 | |
dudas de poo en c++ hem en c++ es valido usar funciones comunes junto con las class,porque donde estudio el profesor programo y uso algunas funciones comunes para mostrar lista objetos?, me conviene acostumbrarme a usar solo class?
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++;
}
}
}
|