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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con el game en dev c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con el game en dev c++  (Leído 5,113 veces)
dmnt82

Desconectado Desconectado

Mensajes: 4


Ver Perfil
problema con el game en dev c++
« en: 20 Marzo 2014, 10:24 am »

tengo este programa  c++, pero a la hora de ejecutar la parte izquierda se queda atorado los "diamantes" ya busque en ciclo y modificando y no encuentro la solución..., tambien busque como usar la tecla spce en ascci para quitar  opción de arriba y abajo, seria de gran ayuda si me pudieran ayudar a resolver y decir cual es mi error... !!  :-( :-\ :(




#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define ARR 72
#define ABA 80
#define IZQ 75
#define DER 77


char ave_l1[]={' ','*','*', '*',' ',' ',' ',0};  // dibujo de la nave      
char ave_l2[]={' ','*','*', ' ','*',' ',' ',0};
char ave_l3[]={' ','*','*', '*',' ',' ',' ',0};

char explocion_l1[]={' ',' ','*','*',' ',' ',' ',0};      
char explocion_l2[]={' ','*','*','*','*',' ',' ',0};   //explocion de la nave
char explocion_l3[]={' ',' ','*','*',' ',' ',' ',0};

char explocion_r1[]={'*',' ','*','*',' ','*',' ',0};      
char explocion_r2[]={' ','*','*','*','*',' ',' ',0};  //la segunda explocion
char explocion_r3[]={'*',' ','*','*',' ','*',' ',0};

char borrar_ave[]={' ',' ',' ',' ',' ',' ',' ',0}; // cuando se borra

int Num_vidas = 3;
int Corazones = 3;
int ix = 1;
int iy = 19;

int y = 8, x = 12;
int yy = 70 , xx = 1;
int x1 = 58 , y1 = 6;
int x2 = 17, y2 = 9;

int i,v;

/*para cambiar de nivel*/
int repeticion = 0, nivel =1;
bool condicion = false;

void gotoxy(int x, int y)
{
     HANDLE hCon;
     COORD dwPos;
    
     dwPos.X = x;
     dwPos.Y = y;
    
     hCon = GetStdHandle(STD_OUTPUT_HANDLE);
     SetConsoleCursorPosition(hCon,dwPos);
    
}    


void vidas(int vi)
{
     gotoxy(2,1); printf("VIDAS %d",vi);
}

void Barra_salud(int n)
{
     gotoxy(72,1);printf(" ");
     gotoxy(73,1);printf(" ");
     gotoxy(74,1);printf(" ");
    
     for(v = 0 ; v < n ; v++)
     {
       gotoxy(72+v,1);
       printf("%c",3);
      }    
}

void Explocion(void)
{
     gotoxy(ix,iy);   puts(explocion_l1);
     gotoxy(ix,iy+1); puts(explocion_l2);
     gotoxy(ix,iy+2); puts(explocion_l3);
    
     Sleep(380);
    
     gotoxy(ix,iy);   puts(explocion_r1);
     gotoxy(ix,iy+1); puts(explocion_r2);
     gotoxy(ix,iy+2); puts(explocion_r3);
    
     Sleep(380);
    
     gotoxy(ix,iy);   puts(ave_l1);
     gotoxy(ix,iy+1); puts(ave_l2);
     gotoxy(ix,iy+2); puts(ave_l3);
    
}    

void jugar(void)
{
     //rutina de los diamantes
    
      gotoxy(x,y);   printf("%c",4);
      gotoxy(xx,yy); printf("%c",4);
      gotoxy(x1,y1); printf("%c",4);
      gotoxy(x2,y2); printf("%c",4);
    
      Sleep(80);
      
      gotoxy(x,y);   printf(" ");
      gotoxy(xx,yy); printf(" ");
      gotoxy(x1,y1); printf(" ");
      gotoxy(x2,y2); printf(" ");
      
      if (x > 20)
      {
            x = 2;
            y = (rand() % 80) + 6;
            
            if( x== 2);
            condicion =false;
            
      }
      if(xx >20)
      {
            xx = 2;
            yy = (rand() % 90) + 6;
            
      }
      if(x1 >20)
      {
            x1 = 2;
            y1 = (rand() % 90) + 6;
            
      }
      if(x2 >20)
      {
            x2 = 2;
            y2 = (rand() % 90) + 6;
            
            }
      
      
      //rutina de mover la ave
      if (kbhit())
      {
                 unsigned char tecla = getch();
                
                 switch (tecla)
                 {        
                        case ARR:
                            
                             if(iy > 4)
                             {
                                  gotoxy(ix,iy);puts(borrar_ave);
                                  gotoxy(ix,iy+1);puts(borrar_ave);
                                  gotoxy(ix,iy+2);puts(borrar_ave);
                                  
                                  iy -=2;//iy = iy -2;
                                  
                                  gotoxy(ix,iy);puts(ave_l1);
                                  gotoxy(ix,iy+1);puts(ave_l2);
                                  gotoxy(ix,iy+2);puts(ave_l3);
                                  
                              }
                             break;
                            
                       case ABA:
                            
                            if( iy <70)
                            {
                                  gotoxy(ix,iy);puts(borrar_ave);
                                  gotoxy(ix,iy+1);puts(borrar_ave);
                                  gotoxy(ix,iy+2);puts(borrar_ave);
                                  
                                  iy +=2;//iy = iy +2;
                                  
                                  gotoxy(ix,iy);puts(ave_l1);
                                  gotoxy(ix,iy+1);puts(ave_l2);
                                  gotoxy(ix,iy+2);puts(ave_l3);
                                  
                            }
                            break;
                                
                         case IZQ:
                            
                             if(ix > 4)
                             {
                                  gotoxy(ix,iy);puts(borrar_ave);
                                  gotoxy(ix,iy+1);puts(borrar_ave);
                                  gotoxy(ix,iy+2);puts(borrar_ave);
                                  
                                  ix -=2;//iy = iy -2;
                                  
                                  gotoxy(ix,iy);puts(ave_l1);
                                  gotoxy(ix,iy+1);puts(ave_l2);
                                  gotoxy(ix,iy+2);puts(ave_l3);
                                  
                              }
                             break;
                          
                          case DER:
                            
                             if(ix <70)
                             {
                                  gotoxy(ix,iy);puts(borrar_ave);
                                  gotoxy(ix,iy+1);puts(borrar_ave);
                                  gotoxy(ix,iy+2);puts(borrar_ave);
                                  
                                  ix +=2;//iy = iy -2;
                                  
                                  gotoxy(ix,iy);puts(ave_l1);
                                  gotoxy(ix,iy+1);puts(ave_l2);
                                  gotoxy(ix,iy+2);puts(ave_l3);
                                  
                              }
                             break;          
                 } //fin del switch
                
      }// Fin if
      
      //rutina para golpes de metoritos
      
      if(( x > ix && x<ix - 6 && y == iy-1)|| (x > ix && xx<ix - 6 && yy == iy-1)
          || (x1 > ix && xx<ix - 6 && y1 == iy-1)|| (x2 > ix && x2<ix - 6 && y2 == iy-1))
          {
                 Corazones --;
                 Barra_salud(Corazones);
                 printf("\a");
          }
          
      gotoxy(ix,iy);puts(ave_l1);      
      gotoxy(ix,iy+1);puts(ave_l2);
      gotoxy(ix,iy+2);puts(ave_l3);
      
      
      if(!Corazones)
      {
                     Num_vidas--;
                     vidas(Num_vidas);
                     Explocion();
                     Corazones =3;
                    
                     Barra_salud(Corazones);
                    
      }
      
      /*rutina para cambio de nivel*/
      
      if(!condicion)
      {
        repeticion ++;
        //condicionc = true;
      }
      if(repeticion == 10)
      {
          nivel++;
          gotoxy(35,1); printf("NIVEL %i",nivel);                
      
          gotoxy(ix,iy); puts(borrar_ave);      
          gotoxy(ix,iy); puts(borrar_ave);  
          gotoxy(ix,iy); puts(borrar_ave);  
          
          iy -= 2; //iy = iy - 2;
          
          gotoxy(ix,iy); puts(ave_l1);      
          gotoxy(ix,iy); puts(ave_l2);  
          gotoxy(ix,iy); puts(ave_l3);
          
          repeticion = 0;
          
                
      }
      x--;
      xx--;
      x1--;
      x2--;
      
      

        
}

int main ()
{
    vidas(Num_vidas);
    Barra_salud(Corazones);
    gotoxy(35,1); printf("NIVEL %i",nivel);  
    
    gotoxy(ix,iy);puts(ave_l1);
    gotoxy(ix,iy+1);puts(ave_l2);
    gotoxy(ix,iy+2);puts(ave_l3);
    
    
    
    while(Num_vidas > 0 && nivel <= 5 )
         jugar();
    
        
     gotoxy(22,16); printf("Game Over");
     Sleep(120);  
    getch();
    return 0;
  
}


« Última modificación: 21 Marzo 2014, 02:13 am por dmnt82 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problema con el game en dev c++
« Respuesta #1 en: 20 Marzo 2014, 11:44 am »

Varias cosas:

1. No escribas en negrita, no se te va a entender mejor ( más bien todo lo contrario ).

2. El código lo metes dentro de las etiquetas GeSHi correspondientes ( en tu caso C )

3. y1 es una función declarada en math.h... deberías plantearte cambiar los nombres o, mejor aún, agrupar esas variables en estructuras y, por supuesto, evitar el uso de variables globales.

4. Variables con nombres tan guays como x, xx, x1, ix no me dicen absolutamente nada... ¿tanto cuesta usar nombres que clarifiquen un poco el código? O al menos añade comentarios al código.

5. En la siguiente línea:

Código
  1. if( x== 2);
  2.  condicion =false;

te sobra el primer punto y coma ';'... ese if así como está, simplemente, no hace nada.

6. Tu código es un puñetero lío. Un ejemplo:

Código
  1. if (x > 20)
  2. {
  3.  x = 2;
  4.  y = (rand() % 80) + 6;
  5.  
  6.  if( x== 2);
  7.    condicion =false;
  8. }

Suponiendo corregido el tema del punto y coma... a ver si lo entiendo, hacemos x=2 y luego... si x=2 entonces condicion = false???? qué sentido tiene ese if ahí ??

7. Las coordenadas de generación de los asteroides están mal:

Código
  1. if (x > 20)
  2. {
  3.  x = 2;
  4.  y = (rand() % 80) + 6;
  5. }

La pantalla tiene 80 columnas ( X ) no 80 filas ( Y ).

Pondré más cosillas cuando tenga tiempo...


« Última modificación: 20 Marzo 2014, 12:03 pm por eferion » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: problema con el game en dev c++
« Respuesta #2 en: 20 Marzo 2014, 12:40 pm »

Veo un uso excesivo del gotoxy:
Código
  1. void Barra_salud(int n)
  2. {
  3.     gotoxy(72,1);printf(" ");
  4.     gotoxy(73,1);printf(" ");
  5.     gotoxy(74,1);printf(" ");
  6.  
  7.     for(v = 0 ; v < n ; v++)
  8.     {
  9.       gotoxy(72+v,1);
  10.       printf("%c",3);
  11.      }    
  12. }

Eso se puede hacer con un solo gotoxy:
Código
  1. void Barra_salud(int n)
  2. {
  3.     gotoxy(72,1);
  4.  
  5.     for(v = 0 ; v < n ; v++)
  6.     {
  7.       printf("%c",3);
  8.     }    
  9. }

Variables como _l1, _l2, _l3 podrían ser representadas con matrices:
Código
  1. char ave[][]=
  2.                   {
  3.                     {' ','*','*', '*',' ',' ',' ',0},  // dibujo de la nave      
  4.                     {' ','*','*', ' ','*',' ',' ',0},
  5.                     {' ','*','*', '*',' ',' ',' ',0}
  6.                   };
O incluso con comillas dobles:
Código
  1. char ave[][]=
  2.                   {
  3.                     {" ***   "},  // dibujo de la nave      
  4.                     {" **  * "},
  5.                     {"  ***  "}
  6.                   };

El error es díficil saberlo ya que el código no es claro y hay muchas variables.

Es mejor evitar el uso de variables globales, el código será más sencillo de depurar.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: problema con el game en dev c++
« Respuesta #3 en: 20 Marzo 2014, 15:13 pm »

Ah, .... y debe ser "explosion", no "explocion". Se que es una nimiedad, pero nunca está demás  ;)
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
dmnt82

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: problema con el game en dev c++
« Respuesta #4 en: 20 Marzo 2014, 21:39 pm »


//aqui segun es cuando muestra las vidas de la ave  en la parte de arriba

void vidas(int vi)
{
     gotoxy(2,1); printf("VIDAS %d",vi);
}

void Barra_salud(int n)
{
     gotoxy(72,1);printf(" ");
     gotoxy(73,1);printf(" ");
     gotoxy(74,1);printf(" ");
     
     for(v = 0 ; v < n ; v++)
     {
       gotoxy(72+v,1);
       printf("%c",3);
      }   
}



pero mi problema es cuando los asteroides o"diamantes toca la parte izquierda se queda ahí y la nave o ave se duplica 
:(no se como colocar una imagen para el ejemplo):
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problema con el game en dev c++
« Respuesta #5 en: 20 Marzo 2014, 22:23 pm »

Si no hacen falta capturas... cualquiera que pruebe tu código ve el resultado.

Lo que te estamos diciendo es que el diseño que has elegido es muy pobre y propenso a errores y prueba de ello es que no es fácil encontrar el error en un programa tan corto.

Te propongo que readaptes un poco el código... y como muestra de buena fe te pongo algunas propuestas:

1. Usa estructuras. Las variables estarán organizadas y será más sencillo evitar el uso de variables globales:

Código
  1. typedef struct
  2. {
  3.  int x;
  4.  int y;
  5. } Coordenada;
  6.  
  7. typedef struct
  8. {
  9.  // Coordenadas de la nave
  10.  Coordenada coord_nave;
  11.  
  12.  // Coordenadas de cada asteroide
  13.  Coordenada coord_asteroides[ MAX_ASTEROIDES ];
  14.  
  15.  // Numero de vidas restantes
  16.  int vidas;
  17.  
  18.  // Nivel de salud
  19.  int salud;
  20.  
  21.  // Nivel del juego
  22.  int nivel;
  23.  
  24.  // Progreso del juego. Para saber cuando subir de nivel
  25.  int progreso;
  26. } DatosJuego;

2. Usa defines. Vienen muy bien para evitar tener valores fijos en el código:

Código
  1. // Numero total de asteroides
  2. #define MAX_ASTEROIDES 4
  3.  
  4. // progreso necesario para pasar de nivel
  5. #define MAX_PROGRESO 1000
  6.  
  7. // desplazamiento de la nave
  8. #define MOV_NAVE    2
  9.  
  10. // Caracter para pintar los asteroides
  11. #define CHAR_ASTEROIDE 3
  12.  
  13. // Caracter para pintar la salud
  14. #define CHAR_SALUD     4
  15.  
  16. // Para limpiar la pantalla
  17. #define CHAR_BLANCO    ' '

3. Crea funciones para las tareas repetitivas. Por ejemplo pintar la nave:

Código
  1. void pintar_nave( Coordenadas coord )
  2. {
  3.  int i;
  4.  for ( i=0; i<3; i++ )
  5.  {
  6.    gotoxy( coord.x, coord.y + i );
  7.    puts( nave[ i ] );
  8.  }
  9. }

Ten en cuenta que para que el código anterior funcione es necesario redefinir la forma de describir la nave... algo así estaría bien (copiado de amchacon):

Código
  1. char nave[][]=
  2.                   {
  3.                     { " ***   " },  
  4.                     { " ** *  " },
  5.                     { " ***   " }
  6.                   };

Y lo mismo puedes hacer para borrar la nave....

Código
  1. void borrar_nave( Coordenadas coord )
  2. {
  3.  int i;
  4.  for ( i=0; i<3; i++ )
  5.  {
  6.    gotoxy( coord.x, coord.y + i );
  7.    puts( nave_vacia[ i ] );
  8.  }
  9. }

Puedes, de echo, juntar ambas funciones en una sola y pasarle como argumento la matriz para pintar la nave o borrarla... pero eso ya te lo dejo a ti.

4. Evita las variables globales. No son necesarias como norma general.

Código
  1.  
  2. int main( )
  3. {
  4.  DatosJuego datos_juego;
  5.  
  6.  // inicializamos la estructura
  7.  memset( &datos_juego, 0, sizeof( DatosJuego ) );
  8.  datos_juego.coord_nave.x = 1;
  9.  datos_juego.coord_nave.y = 19;
  10.  datos_juego.vidas = 3;
  11.  datos_juego.salud = 3;
  12.  datos_juego.nivel = 1;
  13.  
  14.  vidas( datos_juego.vidas );
  15.  Barra_salud( datos_juego.salud );
  16.  gotoxy(35,1); printf("NIVEL %d", datos_juego.nivel );  
  17.  
  18.  pintar_nave( datos_juego.coord_nave );  
  19.  
  20.  while( datos_juego.vidas > 0 )
  21.    jugar( &datos_juego);
  22.  
  23.  gotoxy(22,16); printf("Game Over");
  24.  Sleep(120);  
  25.  getch();
  26.  return 0;
  27. }

5. Evita instrucciones duplicadas:

Por ejemplo el código que controla la pulsación del teclado tiene código repetitivo hasta la saciedad.

Código
  1. switch (tecla)
  2. {        
  3.  case ARR:
  4.    if ( datos_juego->coord_nave.y > 4 )
  5.    {
  6.      borrar_nave( datos_juego->coord_nave );
  7.      datos_juego->coord_nave.y -= MOV_NAVE;
  8.    }                              
  9.    break;
  10.  
  11.  case ABA:
  12.    // Nota que ya no es 70 sino 20, la consola tiene unicamente 25 filas
  13.    if( datos_juego->coord_nave.y < 20 )
  14.    {
  15.      borrar_nave( datos_juego->coord_nave );
  16.      datos_juego->coord_nave.y += MOV_NAVE;
  17.    }                              
  18.    break;
  19.  
  20.  case IZQ:
  21.    if ( datos_juego->coord_nave.x > 4 )
  22.    {
  23.      borrar_nave( datos_juego->coord_nave );
  24.      datos_juego->coord_nave.x -= MOV_NAVE;
  25.    }                              
  26.    break;
  27.  
  28.  case DER:
  29.     if ( datos_juego->coord_nave.x < 70 )
  30.    {
  31.      borrar_nave( datos_juego->coord_nave );
  32.      datos_juego->coord_nave.x += MOV_NAVE;
  33.    }                              
  34.    break;
  35. } //fin del switch
  36.  
  37. pintar_nave( datos_juego->coord_nave );

Con estos dos pasos el código ya lucirá un aspecto bastante más saludable. Será más complicado confundirse al usar las variables y será más sencillo seguir el código que has escrito.

Dale un repaso al código siguiendo estas pautas... u otras similares a tu elección y si no consigues resolver tu problema pon tu nuevo código.

Ah sí, por segunda vez Usa las etiquetas GeSHi para que el codigo sea legible si no, voy a empezar a plantearme el no responderte.

PD.: por si te preguntabas sobre la variable "progreso"... la idea que pensé es que con cada refresco, progreso se incrementase en una unidad. Al llegar a MAX_PROGRESO, se pone el contador a 0 y se sube el nivel.

Cuando corrijas tu código te comento si quieres cómo puedes hacer que aumente la dificultad con cada nivel.
« Última modificación: 20 Marzo 2014, 22:26 pm por eferion » En línea

dmnt82

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: problema con el game en dev c++
« Respuesta #6 en: 21 Marzo 2014, 01:19 am »

intente modificar el programa me explicaban, pero no pude

Código
  1. char nave[][]=
  2.                   {
  3.                     { " ***   " },  
  4.                     { " ** *  " },
  5.                     { " ***   " }
  6.                   };

pero no me sale lo inicie todo de nuevo pero de ahi me marca error, para ser sincera, no se usar aun la matriz :s,  tal vez por eso no me sale...

yo se que el mio que hize es muy repetido o.ó y complicado, que hasta yo me en redo, pero de que funciona si, pero aqui les dejo esto:



aquí es cuando se termina el juego y se para ahi los anroides o.o esa es mi duda, como hacer para que no se quede ahí



eso me sale con mi programa que tengo yo

Código
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6.  
  7. #define ARR 72
  8. #define ABA 80
  9. #define IZQ 75
  10. #define DER 77
  11.  
  12.  
  13. char nave_l1[]={' ','*','*', ' ',' ',' ',' ',0};  // dibujo de la nave      
  14. char nave_l2[]={' ','*','*', '*',' ',' ',' ',0};
  15. char nave_l3[]={' ','*','*', ' ',' ',' ',' ',0};
  16.  
  17. char explosion_l1[]={' ',' ','*','*',' ',' ',' ',0};      
  18. char explosion_l2[]={' ','*','*','*','*',' ',' ',0};   //explosion de la nave
  19. char explosion_l3[]={' ',' ','*','*',' ',' ',' ',0};
  20.  
  21. char explosion_r1[]={'*',' ','*','*',' ','*',' ',0};      
  22. char explosion_r2[]={' ','*','*','*','*',' ',' ',0};  //la segunda explosion
  23. char explosion_r3[]={'*',' ','*','*',' ','*',' ',0};
  24.  
  25. char borrar_nave[]={' ',' ',' ',' ',' ',' ',' ',0}; // cuando se borra
  26.  
  27. //numero de vidas
  28. int Num_vidas = 3;
  29. int Corazones = 3;
  30. //cordenandas de la nave
  31. int ix = 1;
  32. int iy = 19;
  33.  
  34. //cordenandas de los asteroides o diamantes
  35. int y = 8, x = 45;
  36. int yy = 18 , xx = 71;
  37. int xl = 58 , yl = 6;
  38. int xr = 70, yr = 9;
  39.  
  40. int i,v;
  41.  
  42. //para cambiar de nivel del juego
  43. int repeticion = 0, nivel =1;
  44. bool condicion = false;
  45.  
  46. //aplicacion de libreria de windows
  47. void gotoxy(int x, int y)
  48. {
  49.     HANDLE hCon;
  50.     COORD dwPos;
  51.  
  52.     dwPos.X = x;
  53.     dwPos.Y = y;
  54.  
  55.     hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  56.     SetConsoleCursorPosition(hCon,dwPos);
  57.  
  58. }    
  59. //nombrar las vidas
  60. void vidas(int vi)
  61. {
  62.     gotoxy(2,1); printf("VIDAS %d",vi);
  63. }
  64.  
  65. void Barra_salud(int n)
  66. {
  67.     gotoxy(72,1);printf(" ");
  68.     gotoxy(73,1);printf(" ");
  69.     gotoxy(74,1);printf(" ");
  70.  
  71.     for(v = 0 ; v < n ; v++)
  72.     {
  73.       gotoxy(72+v,1);
  74.       printf("%c",3);
  75.      }    
  76. }
  77. //explosion de la nave al ser atacado por los asteroides...
  78. void Explosion(void)
  79. {
  80.     gotoxy(ix,iy);   puts(explosion_l1);
  81.     gotoxy(ix,iy+1); puts(explosion_l2);
  82.     gotoxy(ix,iy+2); puts(explosion_l3);
  83.  
  84.     Sleep(380);
  85.  
  86.     gotoxy(ix,iy);   puts(explosion_r1);
  87.     gotoxy(ix,iy+1); puts(explosion_r2);
  88.     gotoxy(ix,iy+2); puts(explosion_r3);
  89.  
  90.     Sleep(380);
  91.  
  92.     gotoxy(ix,iy);   puts(nave_l1);
  93.     gotoxy(ix,iy+1); puts(nave_l2);
  94.     gotoxy(ix,iy+2); puts(nave_l3);
  95.  
  96. }    
  97. //el inicio del juego con los asteroides
  98. void jugar(void)
  99. {
  100.     //rutina de los diamantes
  101.  
  102.      gotoxy(x,y);   printf("%c",4);
  103.      gotoxy(xx,yy); printf("%c",4);
  104.      gotoxy(xl,yl); printf("%c",4);
  105.      gotoxy(xr,yr); printf("%c",4);
  106.  
  107.      Sleep(90);
  108.  
  109.      gotoxy(x,y);   printf(" ");
  110.      gotoxy(xx,yy); printf(" ");
  111.      gotoxy(x1,yl); printf(" ");
  112.      gotoxy(xr,yr); printf(" ");
  113.  
  114.      //%90 es el tiempo que se usa...
  115.      if (y > 20)
  116.      {
  117.            y = 6;
  118.            x = (rand() % 90) + 6;
  119.  
  120.            //la condicion de "cambio de nivel de game"            
  121.            if( x== 6)
  122.            condicion =false;
  123.  
  124.      }
  125.      if(yy >20)
  126.      {
  127.            yy = 6;
  128.            xx = (rand() % 90) + 6;
  129.  
  130.      }
  131.      if(y1 >20)
  132.      {
  133.            yl = 6;
  134.            xl = (rand() % 90) + 6;
  135.  
  136.      }
  137.      if(yr >20)
  138.      {
  139.            yr = 6;
  140.            xr = (rand() % 90) + 6;
  141.  
  142.            }
  143.  
  144.  
  145.      //rutina de mover la nave
  146.      if (kbhit())
  147.      {
  148.                 unsigned char tecla = getch();
  149.  
  150.                 switch (tecla)
  151.                 {        
  152.                        case ARR:
  153.  
  154.                             if(iy > 4)
  155.                             {
  156.                                  gotoxy(ix,iy);puts(borrar_nave);
  157.                                  gotoxy(ix,iy+1);puts(borrar_nave);
  158.                                  gotoxy(ix,iy+2);puts(borrar_nave);
  159.  
  160.                                  iy -=2;//iy = iy -2;
  161.  
  162.                                  gotoxy(ix,iy);puts(nave_l1);
  163.                                  gotoxy(ix,iy+1);puts(nave_l2);
  164.                                  gotoxy(ix,iy+2);puts(nave_l3);
  165.  
  166.                              }
  167.                             break;
  168.  
  169.                       case ABA:
  170.  
  171.                            if( iy <20)
  172.                            {
  173.                                  gotoxy(ix,iy);puts(borrar_nave);
  174.                                  gotoxy(ix,iy+1);puts(borrar_nave);
  175.                                  gotoxy(ix,iy+2);puts(borrar_nave);
  176.  
  177.                                  iy +=2;//iy = iy +2;
  178.  
  179.                                  gotoxy(ix,iy);puts(nave_l1);
  180.                                  gotoxy(ix,iy+1);puts(nave_l2);
  181.                                  gotoxy(ix,iy+2);puts(nave_l3);
  182.  
  183.                            }
  184.                            break;
  185.  
  186.                         case IZQ:
  187.  
  188.                             if(ix > 4)
  189.                             {
  190.                                  gotoxy(ix,iy);puts(borrar_nave);
  191.                                  gotoxy(ix,iy+1);puts(borrar_nave);
  192.                                  gotoxy(ix,iy+2);puts(borrar_nave);
  193.  
  194.                                  ix -=2;//ix = ix -2;
  195.  
  196.                                  gotoxy(ix,iy);puts(nave_l1);
  197.                                  gotoxy(ix,iy+1);puts(nave_l2);
  198.                                  gotoxy(ix,iy+2);puts(nave_l3);
  199.  
  200.                              }
  201.                             break;
  202.  
  203.                          case DER:
  204.  
  205.                             if(ix <20)
  206.                             {
  207.                                  gotoxy(ix,iy);puts(borrar_nave);
  208.                                  gotoxy(ix,iy+1);puts(borrar_nave);
  209.                                  gotoxy(ix,iy+2);puts(borrar_nave);
  210.  
  211.                                  ix +=2;//ix = ix +2;
  212.  
  213.                                  gotoxy(ix,iy);puts(nave_l1);
  214.                                  gotoxy(ix,iy+1);puts(nave_l2);
  215.                                  gotoxy(ix,iy+2);puts(nave_l3);
  216.  
  217.                              }
  218.                             break;          
  219.                 } //fin del switch
  220.  
  221.      }// Fin if
  222.  
  223.      //rutina para golpes de asteroides  
  224.      if(( x > ix && x<ix + 6 && y == iy-1)|| (x > ix && xx<ix + 6 && yy == iy-1)
  225.          || (xl > ix && xx < ix + 6 && yl == iy-1)|| (xr > ix && xr<ix  + 6 && yr == iy-1))
  226.          {
  227.                 //donde se va disminuyendo las vidas
  228.                 Corazones --;
  229.                 Barra_salud(Corazones);
  230.  
  231.          }
  232.  
  233.  
  234.      gotoxy(ix,iy);puts(nave_l1);      
  235.      gotoxy(ix,iy+1);puts(nave_l2);
  236.      gotoxy(ix,iy+2);puts(nave_l3);
  237.  
  238.      //numero de vidas restantes
  239.      if(!Corazones)
  240.      {
  241.                     Num_vidas--;
  242.                     vidas(Num_vidas);
  243.                     Explosion();
  244.                     Corazones =3;
  245.  
  246.                     Barra_salud(Corazones);
  247.  
  248.      }
  249.  
  250.      //rutina para cambio de nivel
  251.  
  252.      if(!condicion)
  253.      {
  254.        repeticion --;
  255.        //condicionc = true;
  256.      }
  257.      if(repeticion == 4)
  258.      {
  259.          nivel++;
  260.          gotoxy(35,1); printf("NIVEL %i",nivel);                
  261.  
  262.          gotoxy(ix,iy); puts(borrar_nave);      
  263.          gotoxy(ix,iy); puts(borrar_nave);  
  264.          gotoxy(ix,iy); puts(borrar_nave);  
  265.  
  266.          iy -= 2; //iy = iy - 2;
  267.  
  268.          gotoxy(ix,iy); puts(nave_l1);      
  269.          gotoxy(ix,iy); puts(nave_l2);  
  270.          gotoxy(ix,iy); puts(nave_l3);
  271.  
  272.          repeticion = 0;
  273.  
  274.  
  275.      }
  276.      //inicio de los asteroides de derecha a izquieda
  277.      x--;
  278.      xx--;
  279.      xl--;
  280.      xr--;
  281.  
  282. }
  283.  
  284. int main ()
  285. {
  286.    vidas(Num_vidas);
  287.    Barra_salud(Corazones);
  288.    //cambio de nivel
  289.    gotoxy(35,1); printf("NIVEL %i",nivel);  
  290.  
  291.    gotoxy(ix,iy);puts(nave_l1);
  292.    gotoxy(ix,iy+1);puts(nave_l2);
  293.    gotoxy(ix,iy+2);puts(nave_l3);
  294.  
  295.  
  296.    //ciclo donde al llegar al 6 se termina el juego
  297.    while(Num_vidas > 0 && nivel <= 5 )
  298.         jugar();
  299.  
  300.  
  301.     gotoxy(22,16); printf("Game Over");
  302.     //tiempo lo que dura el juego
  303.     Sleep(120);  
  304.  
  305.    getch();
  306.    return 0;
  307.  
  308. }

solucione el problema de la nave que se duplicaba, pero ahora no cambia de nivel como muestra la imagen 2 y esos son mis unicos problemas que no llego a solucionar... 
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problema con el game en dev c++
« Respuesta #7 en: 21 Marzo 2014, 08:18 am »

Código
  1.      if(!condicion)
  2.      {
  3.        repeticion --;
  4.        //condicionc = true;
  5.      }
  6.      if(repeticion == 4)
  7.      {
  8.          nivel++;
  9.          gotoxy(35,1); printf("NIVEL %i",nivel);                
  10.  
  11.          gotoxy(ix,iy); puts(borrar_nave);      
  12.          gotoxy(ix,iy); puts(borrar_nave);  
  13.          gotoxy(ix,iy); puts(borrar_nave);  
  14.  
  15.          iy -= 2; //iy = iy - 2;
  16.  
  17.          gotoxy(ix,iy); puts(nave_l1);      
  18.          gotoxy(ix,iy); puts(nave_l2);  
  19.          gotoxy(ix,iy); puts(nave_l3);
  20.  
  21.          repeticion = 0;
  22.  
  23.  
  24.      }

Partiendo de ese código... si lo resumimos para quedarnos con lo importante tenemos:

Código
  1.      if(!condicion)
  2.      {
  3.        repeticion --;
  4.      }
  5.      if(repeticion == 4)
  6.      {
  7.          nivel++;
  8.          repeticion = 0;
  9.      }

Dicho de otra forma... coges un int ( 2^32 combinaciones = 4.294.967.296 combinaciones ) y lo vas decrementando empezando por cero... es decir, de 0 a 4 pasando primero por negativos... tendrías que jugar unos 4.300 millones de turnos para que te cambie de nivel.

En serio, renombra esas variables... no es tan complicado y queda un código más sencillo de seguir:

Código
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6.  
  7. #define ARR 72
  8. #define ABA 80
  9. #define IZQ 75
  10. #define DER 77
  11.  
  12. #define CHAR_SALUD    3
  13. #define CHAR_DIAMANTE 4
  14. #define CHAR_BLANCO   ' '
  15.  
  16. #define MAX_CORAZONES 3
  17. #define MAX_DIAMANTES 25
  18. #define MAX_PROGRESO  1000
  19. #define MAX_VIDAS     3
  20.  
  21. #define AVANCE        2
  22.  
  23. typedef struct
  24. {
  25.  int x;
  26.  int y;
  27. } Coordenadas;
  28.  
  29. typedef struct
  30. {
  31.  Coordenadas coord_nave;
  32.  Coordenadas coord_diamantes[ MAX_DIAMANTES ];
  33.  
  34.  int num_vidas;
  35.  int corazones;
  36.  int nivel;
  37.  int progreso;
  38. } DatosJuego;
  39.  
  40. // Dibujo de la nave
  41. char *nave[]        = { " ***  ", " ** * ", " ***  " };
  42. char *nave_vacia[]  = { "      ", "      ", "      " };
  43. char *explosion1[]  = { "  **  ", " **** ", "  **  " };
  44. char *explosion2[]  = { "* ** *", " **** ", "* ** *" };
  45.  
  46. void inicializar( DatosJuego* datos_juego )
  47. {
  48.  memset( datos_juego, 0, sizeof( DatosJuego ) );
  49.  
  50.  datos_juego->coord_nave.x = 1;
  51.  datos_juego->coord_nave.y = 19;
  52.  
  53.  datos_juego->num_vidas = MAX_VIDAS;
  54.  datos_juego->corazones = MAX_CORAZONES;
  55.  datos_juego->nivel = 1;
  56. }
  57.  
  58. void gotoxy(int x, int y)
  59. {
  60.  HANDLE hCon;
  61.  COORD dwPos;
  62.  
  63.  dwPos.X = x;
  64.  dwPos.Y = y;
  65.  
  66.  hCon = GetStdHandle( STD_OUTPUT_HANDLE );
  67.  SetConsoleCursorPosition( hCon, dwPos );
  68. }
  69.  
  70. void pintar_nave( Coordenadas coord, char* patron[] )
  71. {
  72.  int i;
  73.  for ( i=0; i<3; i++ )
  74.  {
  75.    gotoxy( coord.x, coord.y + i );
  76.    puts( patron[ i ] );
  77.  }
  78. }
  79.  
  80. void pintar_nivel( int nivel )
  81. {
  82.  gotoxy( 35, 1 );
  83.  printf( "NIVEL: %d", nivel );
  84. }
  85.  
  86. void pintar_vidas( int vidas )
  87. {
  88.   gotoxy( 2, 1 );
  89.   printf( "VIDAS %d", vidas );
  90. }
  91.  
  92. void pintar_salud( int salud )
  93. {
  94.  int i;
  95.  
  96.  gotoxy( 72, 1 );
  97.  
  98.  for( i = 0; i < salud; i++ )
  99.    putchar( CHAR_SALUD );
  100.  
  101.  for ( ; i < 3; i++ )
  102.    putchar( CHAR_BLANCO );
  103. }
  104.  
  105. void pintar_explosion( Coordenadas coord )
  106. {
  107.  int i;
  108.  
  109.  for ( i = 0; i < 3; i++ )
  110.  {
  111.    gotoxy( coord.x, coord.y + i );
  112.    puts( explosion1[ i ] );
  113.  }
  114.  
  115.  Sleep( 380 );
  116.  
  117.  for ( i = 0; i < 3; i++ )
  118.  {
  119.    gotoxy( coord.x, coord.y + i );
  120.    puts( explosion2[ i ] );
  121.  }
  122.  
  123.  Sleep(380);
  124.  
  125.  pintar_nave( coord, nave );
  126. }
  127.  
  128. void reiniciar_diamante( Coordenadas* coord )
  129. {
  130.  gotoxy( coord->x, coord->y );
  131.  putchar( CHAR_BLANCO );
  132.  
  133.  if ( coord->x == 0 )
  134.  {
  135.    // Este codigo permite que los asteroides salgan repartidos
  136.    // por el escenario al inicio de la partida
  137.    coord->x = ( rand( ) % 50 ) + 29;
  138.  }
  139.  else
  140.    coord->x = 79;
  141.  
  142.  coord->y = (rand( ) % 20 ) + 5;
  143. }
  144.  
  145. void mover_diamante( Coordenadas* coord )
  146. {
  147.  gotoxy( coord->x, coord->y );
  148.  putchar( CHAR_BLANCO );
  149.  
  150.  if ( coord->x < 2 )
  151.    reiniciar_diamante( coord );
  152.  else
  153.    coord->x--;
  154.  
  155.  gotoxy( coord->x, coord->y );
  156.  putchar( CHAR_DIAMANTE );
  157. }
  158.  
  159. int colision( Coordenadas coord_nave, Coordenadas coord_diamante )
  160. {
  161.  int to_return = 0;
  162.  
  163.  // Comprobamos que el asteroide esta en la misma vertical que
  164.  // la nave
  165.  if ( ( coord_diamante.y >= coord_nave.y )
  166.    && ( coord_diamante.y <= coord_nave.y + 2 ) )
  167.  {
  168.    // Ahora se comprueba si esta en la misma horizontal
  169.    if ( ( coord_diamante.x <= coord_nave.x + 5 )
  170.      && ( coord_diamante.x > coord_nave.x ) )
  171.    {
  172.      to_return = 1;
  173.    }
  174.  }
  175.  
  176.  return to_return;
  177. }
  178.  
  179. void jugar( DatosJuego* datos_juego )
  180. {
  181.  //rutina de los diamantes
  182.  
  183.  int i;
  184.  for ( i = 0; i < MAX_DIAMANTES; i++ )
  185.    mover_diamante( &datos_juego->coord_diamantes[ i ] );
  186.  
  187.  //rutina de mover la ave
  188.  if( _kbhit( ) )
  189.  {
  190.    unsigned char tecla = _getch( );
  191.  
  192.    switch (tecla)
  193.    {
  194.      case ARR:
  195.        if ( datos_juego->coord_nave.y > 4 )
  196.        {
  197.          pintar_nave( datos_juego->coord_nave, nave_vacia );
  198.          datos_juego->coord_nave.y -= AVANCE;
  199.        }
  200.        break;
  201.  
  202.      case ABA:
  203.  
  204.        if (datos_juego->coord_nave.y < 20 )
  205.        {
  206.          pintar_nave( datos_juego->coord_nave, nave_vacia );
  207.          datos_juego->coord_nave.y += AVANCE;
  208.        }
  209.        break;
  210.  
  211.      case IZQ:
  212.        if( datos_juego->coord_nave.x > 4 )
  213.        {
  214.          pintar_nave( datos_juego->coord_nave, nave_vacia );
  215.          datos_juego->coord_nave.x -= AVANCE;
  216.        }
  217.        break;
  218.  
  219.      case DER:
  220.        if( datos_juego->coord_nave.x < 70 )
  221.        {
  222.          pintar_nave( datos_juego->coord_nave, nave_vacia );
  223.          datos_juego->coord_nave.x += AVANCE;
  224.        }
  225.        break;
  226.    } //fin del switch
  227.  }// Fin if
  228.  
  229.  pintar_nave( datos_juego->coord_nave, nave );
  230.  
  231.  //rutina para golpes de metoritos
  232.  for ( i = 0; i < MAX_DIAMANTES; i++ )
  233.  {
  234.    if ( colision( datos_juego->coord_nave, datos_juego->coord_diamantes[ i ] ) )
  235.    {
  236.      reiniciar_diamante( &datos_juego->coord_diamantes[ i ] );
  237.      pintar_nave( datos_juego->coord_nave, nave );
  238.  
  239.      datos_juego->corazones--;
  240.  
  241.      if( datos_juego->corazones == 0 )
  242.      {
  243.        datos_juego->num_vidas--;
  244.        datos_juego->corazones = MAX_CORAZONES;
  245.        pintar_vidas( datos_juego->num_vidas );
  246.        pintar_explosion( datos_juego->coord_nave );
  247.      }
  248.  
  249.      pintar_salud( datos_juego->corazones );
  250.      break;
  251.    }
  252.  }
  253.  
  254.  /*rutina para cambio de nivel*/
  255.  if ( datos_juego->progreso == MAX_PROGRESO )
  256.  {
  257.    datos_juego->nivel++;
  258.    pintar_nivel( datos_juego->nivel );
  259.    datos_juego->progreso = 0;
  260.  }
  261.  else
  262.    datos_juego->progreso++;
  263. }
  264.  
  265. int main ()
  266. {
  267.  DatosJuego datos_juego;
  268.  
  269.  inicializar( &datos_juego );
  270.  
  271.  pintar_vidas( datos_juego.num_vidas );
  272.  pintar_salud( datos_juego.corazones );
  273.  
  274.  pintar_nivel(datos_juego.nivel );
  275.  pintar_nave( datos_juego.coord_nave, nave );
  276.  
  277.  while( datos_juego.num_vidas > 0 )
  278.  {
  279.    jugar( &datos_juego );
  280.  
  281.    int sleep = 80 - datos_juego.nivel * 10;
  282.    if ( sleep < 10 )
  283.      sleep = 10;
  284.    Sleep( sleep );
  285.  }
  286.  
  287.  
  288.  gotoxy( 30, 11 );
  289.  puts( "*******************" );
  290.  gotoxy( 30, 12 );
  291.  puts( "*    Game Over    *" );
  292.  gotoxy( 30, 13 );
  293.  puts( "*******************" );
  294.  
  295.  gotoxy( 0, 24 );
  296.  _getch( );
  297.  return EXIT_SUCCESS;
  298. }
En línea

nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: problema con el game en dev c++
« Respuesta #8 en: 21 Marzo 2014, 08:34 am »

Muy bueno  :D ma~nana lo veo con mas tiempo el codigo. Gracias.

En línea

Lo que se puede imaginar... se puede programar.
dmnt82

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: problema con el game en dev c++
« Respuesta #9 en: 21 Marzo 2014, 09:00 am »

 :o :o Muchas gracias!! has salvado mi alma de satanás >_<'
muchas gracias y perdona las molestias.... >-<' :-[


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Game boy pasó de moda...GAME MAN !
Juegos y Consolas
skapunky 3 2,761 Último mensaje 28 Junio 2007, 13:57 pm
por peib0l
[Batch Game] Adventure Game - by SmartGenius
Scripting
SmartGenius 0 3,198 Último mensaje 17 Julio 2009, 06:15 am
por SmartGenius
[Batch Game] The Pair Game - by SmartGenius
Scripting
SmartGenius 5 5,619 Último mensaje 10 Agosto 2010, 23:36 pm
por DA KILLER
Problema capturadora Avermedia Game Capture Portable
Multimedia
RabyzHacks 0 5,107 Último mensaje 25 Diciembre 2013, 10:28 am
por RabyzHacks
MOVIDO: Problema capturadora Avermedia Game Capture Portable
Dudas Generales
Songoku 0 1,284 Último mensaje 25 Diciembre 2013, 13:58 pm
por Songoku
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines