elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
07 Octubre 2008, 15:31  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios (Moderador: soplo)
| | | |-+  Juego del buscaminas C++, error!!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Juego del buscaminas C++, error!!!!  (Leído 3004 veces)
mrwylli

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Juego del buscaminas C++, error!!!!
« en: 20 Marzo 2005, 05:48 »

Tengo el codigo fuente de un supuesto buscaminas, pero despues de darle miles de vueltas no consigo arreglar el fallo que me devuelve, a ver si alguien con práctica consigue que compile.

Perdonadme que el codigo sea tan largo pero es que llevo varios dias dandole vueltas y no tengo ni idea de por donde meterle mano.

Muchisimas gracias.

Código:




#include <iostream.h>     
#include <stdlib.h>   
#include <iomanip.h>   
#include <ctime>   





const int FILAS=10;
const int COLUMNAS=10;
const int PORC_MINIMO=20;
const int PORC_MAXIMO=30;
const int MIN_MINAS=PORC_MINIMO*(FILAS*COLUMNAS)/100;
const int MAX_MINAS=PORC_MAXIMO*(FILAS*COLUMNAS)/100;



enum Estado{DESCUBIERTA,INTERROGACION,MINA,CUBIERTA,POR_EXPANDIR};

struct Celda{
    char valor;
    Estado est;
};

typedef Celda Suelo[FILAS] [COLUMNAS];

struct Campo{
    Suelo s;
    int nminas;
    int ncubiertas;
};

int aleatorio(int max){
    return int(double(rand())*max/(RAND_MAX+1.0));
}

//definimos las funciones y procedimientos que utilizaremos

void vaciar(Campo &cmp){
    cmp.nminas=0;
    cmp.ncubiertas=FILAS*COLUMNAS;
    for (int i=0;i<FILAS;i++){
        for (int k=0;k<COLUMNAS;k++){
                cmp.s[i][k].valor=' ';
                cmp.s[i][k].est=CUBIERTA;
        }
    }
}

void generar_aleatorio(Campo &cmp,int nelm){
    int x,y;
    while (nelm>0){
        x=aleatorio(FILAS);
        y=aleatorio(COLUMNAS);
        if (cmp.s[x][y].valor!='M'){
            cmp.s[x][y].valor='M';
            nelm--;
        }
    }
    cmp.nminas=nelm;
}

bool CasillaCorrecta(int f,int c){
    return (f>=0)&&(f<FILAS)&&(c>=0)&&(c<COLUMNAS);
}

int contar_vecinos(const Campo &cmp,int f,int c){
    int cont=0,i,k;
    for(i=f-1;i<=f+1;i++){
        for(k=c-1;k<=c+1;k++){
                if (CasillaCorrecta(i,k)&&(cmp.s[i][k].valor=='M'))
{
                    cont++;
               }
        }           
    }
    return cont;
}

void generar_vecinos(Campo &cmp){
    int i,k,cont;
    for(i=0;i<FILAS;i++){
        for(k=0;k<COLUMNAS;k++){
                if(cmp.s[i][k].valor==' '){
                   cont=contar_vecinos(cmp,i,k);
                   if(cont>0){
                      cmp.s[i][k].valor=cont+'0';
                   }
                }
        }
    }
}

void dibujar(const Campo cmp){
    int i,k;
    cout<<endl<<"Cubiertas: "<<cmp.ncubiertas<<endl;
    cout<<endl<<" ";
    for (i=0;i=COLUMNAS;i++){
        cout<<i%10;
    }
    cout<<endl<<" ";
    for(i=0;i<COLUMNAS;i++){
        cout<<"-";
    }
    cout<<endl;
    for(i=0;i<FILAS;i++){
        cout<<i%10<<"|";
        for(k=0;k<COLUMNAS;k++){
                switch (cmp.s[i][k].est){
                                case DESCUBIERTA:cout<<cmp.s[i][k].valor;break;
                                case INTERROGACION:cout<<"?";break;
                                case MINA:cout<<"M";break;
                                default:cout<<".";
                }
        }
        cout<<endl;
    }
}
void dibujar_solucion(const Campo cmp){
    int i,k;
    cout<<endl<<" ";
    for(i=0;i<COLUMNAS;i++){
        cout<<i%10;
    }
    cout<<endl<<" ";
    for(i=0;i<COLUMNAS;i++){
        cout<<"-";
    }
    cout<<endl;
    for(i=0;i<FILAS;i++){
        cout<<i%10<<"|";
        for(k=0;k<COLUMNAS;k++){
                cout<<cmp.s[i][k].valor;
        }
        cout<<endl;
    }
}

void expandir_a_vecinos(Campo &cmp,int f,int c,bool &hay_expansion){
    int i,k;
    hay_expansion=false;
    for(i=f-1;i<=f+1;i++){
        for(k=c-1;k<=c+1;k++){
                if (CasillaCorrecta(i,k)&&cmp.s[i][k].est!=DESCUBIERTA){
                                hay_expansion=true;
                                if (cmp.s[i][k].valor==' '){
                                    cmp.s[i][k].est=POR_EXPANDIR;
                                }else{
                                    cmp.s[i][k].est=DESCUBIERTA;
                                    cmp.ncubiertas--;
                                }
                }
        }
    }
}

void descubrir_vecinos_sin_minas (Campo &cmp,int ff,int cc){
    int i,k;
    bool hay_expansion,exp;
    expandir_a_vecinos (cmp,ff,cc,hay_expansion);
    while (hay_expansion){
        hay_expansion=false;
        for (i=0;i<FILAS,i++){
                for (k=0;k<COLUMNAS,k++){
                                if(cmp.s[i][k].est==POR_EXPANDIR){
                                   cmp.s[i][k].est=DESCUBIERTA;
                                   cmp.ncubiertas--;
                                   expandir_a_vecinos(cmp,i,k,exp);
                                   hay_expansion=hay_expansion||exp;
                                }
                }
        }
    }
}

void descubrir(Campo &cmp,int f,int c,bool &explosion){
    cmp.s[f][c].est=DESCUBIERTA;
    cmp.ncubiertas--;
    if (cmp.s[f][c].valor=='M'){
        explosion=true;
    }else if(cmp.s[f][c].valor==' '){
        descubrir_vecinos_sin_minas(cmp,f,c);
        explosion=false;
    }else{
        explosion=false;
    }
}

void marcar(Campo &cmp,int f,int c,const Estado e){
    cmp.s[f][c].est=e;
}

void leer_operacion(char &cod,int &f,int &c){
    do{
        cout<<endl<<"Introduce codigo[d,m,?,s]: ";
        cin>>cod;
    }while((cod!='d')&&(cod!='m')&&(cod!='?')&&(cod!='s'));
   
    if(cod!='s'){
        do{
                cout<<"Introduce fila: ";
                cin>>f;
        }while((f<0)||(f>=FILAS));
        do{
                cout<<"Introduce columna: ";
                cin>>c;
        }while((c<0)||(c>=COLUMNAS));
    }
}

void jugar(){
    Campo cmp;
    char op,nivel;
    int f,c,minas=3;
    bool explosion=false,ganar=false,salir=false;
   
    do{
        cout<<endl<<"Introduce nivel juego[f=facil,d=dificil,m=leer minas]; ";
                cin>>nivel;
        }while ((nivel!='f')&&(nivel!='d')&&(nivel!='m'));
        switch (nivel){
                case 'f':minas=MIN_MINAS;break;
                case 'd':minas=MAX_MINAS;break;
                case 'm':cout<<"Introduce minas: ";
                         cin>>minas;
        }
        vaciar(cmp);
        generar_aleatorio(cmp,minas);
        generar_vecinos(cmp);
        do{
                dibujar(cmp);
                leer_operacion(op,f,c);
                switch (op){
                                case 'd':descubrir(cmp,f,c,explosion);break;
                                case 'm':marcar(cmp,f,c,MINA);break;
                                case '?':marcar(cmp,f,c,INTERROGACION);break;
                                case 's':salir=true;
                }
                if (cmp.ncubiertas==minas){
                                ganar=true;
                }
        }while ((!explosion)&&(!ganar)&&(!salir));
        if (explosion){
            cout<<endl<<"BOOOOMM!!!! HAS PERDIDO"<<endl;
        }else if(ganar){
                cout<<endl<<"BIEN HAS GANADO"<<endl;
        }else{
                cout<<endl<<"TE HAS RENDIDO"<<endl;
        }
        dibujar_solucion(cmp);
    }

   


int main (){


    srand(time(0));
    cout<<endl<<"Juego: BUSCAMINAS"<<endl<<endl;
    jugar();
    system("PAUSE");
    return 0;
}

 




Y el resultado del compilador (utilizo Dev-C++) es:




Código:

Compilador: Default compiler
Building Makefile: "C:\Dev-Cpp\Buscaminas\Makefile.win"
Ejecutando  make...
make.exe -f "C:\Dev-Cpp\Buscaminas\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/include/c++"  -I"C:/Dev-Cpp/include/c++/mingw32"  -I"C:/Dev-Cpp/include/c++/backward"  -I"C:/Dev-Cpp/include" 

In file included from C:/Dev-Cpp/include/c++/backward/iostream.h:31,
                 from main.cpp:11:
C:/Dev-Cpp/include/c++/backward/backward_warning.h:32:2: warning: #warning This file includes at least one
 deprecated or antiquated header. Please consider using one of
 the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting
 the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>.
To disable this warning use -Wno-deprecated.

main.cpp: In function `void descubrir_vecinos_sin_minas(Campo&, int, int)':
main.cpp:174: parse error before `)' token

main.cpp: At global scope:
main.cpp:185: parse error before `}' token

make.exe: *** [main.o] Error 1

Ejecución Terminada
En línea

AMD xp-m 2500@2370 (225*10.5,core1.65)
[MSI  9800pro@XT]  ---  Jetram ddr400
ABIT AN7  ---   TT 480W twv
Gigabyte 3D Rocket Cooler
Antec Lanboy
victeter

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Juego del buscaminas C++, error!!!!
« Respuesta #1 en: 26 Abril 2005, 15:36 »



hola:
yo he compilado el programa y me daba dos errores, faltaban ; en dos comandos for. ahora el programa se queda asi

#include <iostream.h>     
#include <stdlib.h>   
#include <iomanip.h>   
#include <ctime>   





const int FILAS=10;
const int COLUMNAS=10;
const int PORC_MINIMO=20;
const int PORC_MAXIMO=30;
const int MIN_MINAS=PORC_MINIMO*(FILAS*COLUMNAS)/100;
const int MAX_MINAS=PORC_MAXIMO*(FILAS*COLUMNAS)/100;



enum Estado{DESCUBIERTA,INTERROGACION,MINA,CUBIERTA,POR_EXPANDIR};

struct Celda{
    char valor;
    Estado est;
};

typedef Celda Suelo[FILAS] [COLUMNAS];

struct Campo{
    Suelo s;
    int nminas;
    int ncubiertas;
};

int aleatorio(int max){
    return int(double(rand())*max/(RAND_MAX+1.0));
}

//definimos las funciones y procedimientos que utilizaremos

void vaciar(Campo &cmp){
    cmp.nminas=0;
    cmp.ncubiertas=FILAS*COLUMNAS;
    for (int i=0;i<FILAS;i++){
        for (int k=0;k<COLUMNAS;k++){
                cmp.s[k].valor=' ';
                cmp.s[k].est=CUBIERTA;
        }
    }
}

void generar_aleatorio(Campo &cmp,int nelm){
    int x,y;
    while (nelm>0){
        x=aleatorio(FILAS);
        y=aleatorio(COLUMNAS);
        if (cmp.s
  • [y].valor!='M'){
            cmp.s
  • [y].valor='M';
            nelm--;
        }
    }
    cmp.nminas=nelm;
}

bool CasillaCorrecta(int f,int c){
    return (f>=0)&&(f<FILAS)&&(c>=0)&&(c<COLUMNAS);
}

int contar_vecinos(const Campo &cmp,int f,int c){
    int cont=0,i,k;
    for(i=f-1;i<=f+1;i++){
        for(k=c-1;k<=c+1;k++){
                if (CasillaCorrecta(i,k)&&(cmp.s[k].valor=='M'))
{
                    cont++;
               }
        }           
    }
    return cont;
}

void generar_vecinos(Campo &cmp){
    int i,k,cont;
    for(i=0;i<FILAS;i++){
        for(k=0;k<COLUMNAS;k++){
                if(cmp.s[k].valor==' '){
                   cont=contar_vecinos(cmp,i,k);
                   if(cont>0){
                      cmp.s[k].valor=cont+'0';
                   }
                }
        }
    }
}

void dibujar(const Campo cmp){
    int i,k;
    cout<<endl<<"Cubiertas: "<<cmp.ncubiertas<<endl;
    cout<<endl<<" ";
    for (i=0;i=COLUMNAS;i++){
        cout<<i%10;
    }
    cout<<endl<<" ";
    for(i=0;i<COLUMNAS;i++){
        cout<<"-";
    }
    cout<<endl;
    for(i=0;i<FILAS;i++){
        cout<<i%10<<"|";
        for(k=0;k<COLUMNAS;k++){
                switch (cmp.s[k].est){
                                case DESCUBIERTA:cout<<cmp.s[k].valor;break;
                                case INTERROGACION:cout<<"?";break;
                                case MINA:cout<<"M";break;
                                default:cout<<".";
                }
        }
        cout<<endl;
    }
}
void dibujar_solucion(const Campo cmp){
    int i,k;
    cout<<endl<<" ";
    for(i=0;i<COLUMNAS;i++){
        cout<<i%10;
    }
    cout<<endl<<" ";
    for(i=0;i<COLUMNAS;i++){
        cout<<"-";
    }
    cout<<endl;
    for(i=0;i<FILAS;i++){
        cout<<i%10<<"|";
        for(k=0;k<COLUMNAS;k++){
                cout<<cmp.s[k].valor;
        }
        cout<<endl;
    }
}

void expandir_a_vecinos(Campo &cmp,int f,int c,bool &hay_expansion){
    int i,k;
    hay_expansion=false;
    for(i=f-1;i<=f+1;i++){
        for(k=c-1;k<=c+1;k++){
                if (CasillaCorrecta(i,k)&&cmp.s[k].est!=DESCUBIERTA){
                                hay_expansion=true;
                                if (cmp.s[k].valor==' '){
                                    cmp.s[k].est=POR_EXPANDIR;
                                }else{
                                    cmp.s[k].est=DESCUBIERTA;
                                    cmp.ncubiertas--;
                                }
                }
        }
    }
}

void descubrir_vecinos_sin_minas (Campo &cmp,int ff,int cc){
    int i,k;
    bool hay_expansion,exp;
    expandir_a_vecinos (cmp,ff,cc,hay_expansion);
    while (hay_expansion){
        hay_expansion=false;
        for (i=0;i<FILAS;i++){
                for (k=0;k<COLUMNAS;k++){
                                if(cmp.s[k].est==POR_EXPANDIR){
                                   cmp.s[k].est=DESCUBIERTA;
                                   cmp.ncubiertas--;
                                   expandir_a_vecinos(cmp,i,k,exp);
                                   hay_expansion=hay_expansion||exp;
                                }
                }
        }
    }
}

void descubrir(Campo &cmp,int f,int c,bool &explosion){
    cmp.s[f][c].est=DESCUBIERTA;
    cmp.ncubiertas--;
    if (cmp.s[f][c].valor=='M'){
        explosion=true;
    }else if(cmp.s[f][c].valor==' '){
        descubrir_vecinos_sin_minas(cmp,f,c);
        explosion=false;
    }else{
        explosion=false;
    }
}

void marcar(Campo &cmp,int f,int c,const Estado e){
    cmp.s[f][c].est=e;
}

void leer_operacion(char &cod,int &f,int &c){
    do{
        cout<<endl<<"Introduce codigo[d,m,?,s]: ";
        cin>>cod;
    }while((cod!='d')&&(cod!='m')&&(cod!='?')&&(cod!='s'));
   
    if(cod!='s'){
        do{
                cout<<"Introduce fila: ";
                cin>>f;
        }while((f<0)||(f>=FILAS));
        do{
                cout<<"Introduce columna: ";
                cin>>c;
        }while((c<0)||(c>=COLUMNAS));
    }
}

void jugar(){
    Campo cmp;
    char op,nivel;
    int f,c,minas=3;
    bool explosion=false,ganar=false,salir=false;
   
    do{
        cout<<endl<<"Introduce nivel juego[f=facil,d=dificil,m=leer minas]; ";
                cin>>nivel;
        }while ((nivel!='f')&&(nivel!='d')&&(nivel!='m'));
        switch (nivel){
                case 'f':minas=MIN_MINAS;break;
                case 'd':minas=MAX_MINAS;break;
                case 'm':cout<<"Introduce minas: ";
                         cin>>minas;
        }
        vaciar(cmp);
        generar_aleatorio(cmp,minas);
        generar_vecinos(cmp);
        do{
                dibujar(cmp);
                leer_operacion(op,f,c);
                switch (op){
                                case 'd':descubrir(cmp,f,c,explosion);break;
                                case 'm':marcar(cmp,f,c,MINA);break;
                                case '?':marcar(cmp,f,c,INTERROGACION);break;
                                case 's':salir=true;
                }
                if (cmp.ncubiertas==minas){
                                ganar=true;
                }
        }while ((!explosion)&&(!ganar)&&(!salir));
        if (explosion){
            cout<<endl<<"BOOOOMM!!!! HAS PERDIDO"<<endl;
        }else if(ganar){
                cout<<endl<<"BIEN HAS GANADO"<<endl;
        }else{
                cout<<endl<<"TE HAS RENDIDO"<<endl;
        }
        dibujar_solucion(cmp);
    }

   


int main (){


    srand(time(0));
    cout<<endl<<"Juego: BUSCAMINAS"<<endl<<endl;
    jugar();
    system("PAUSE");
    return 0;
}

espero que te funcione
victeter
En línea
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats