elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


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

Desconectado Desconectado

Mensajes: 2



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

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 pm »



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 Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error en juego Starwars el poder de la fuerza
Software
JoniVillegas 2 1,452 Último mensaje 24 Junio 2013, 02:13 am
por JoniVillegas
Juego de Buscaminas
Programación C/C++
lopez fer 1 2,666 Último mensaje 28 Enero 2021, 01:01 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines