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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda en Código de Snake
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda en Código de Snake  (Leído 3,299 veces)
Firu

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda en Código de Snake
« en: 26 Marzo 2013, 20:33 pm »

Hola bueno soy nuevo en el foro, necesito una pequeña ayuda con mi código del juego Snake ya que tiene algunas fallas, como por ejemplo cuando el cuerpo pasa por encima de la comida la comida desaparece ya que la función borrar_cuerpo la elimina pero si vuelvo a pasar por la posición que tenia dicha comida me la toma y aparece en otro lugar, si alguien puede ayudarme arreglando esa parte del código y también que en el case 4 el juego se reinicie :| bueno si alguien puede ayudarme se lo agradsco.
Dejo el código para que lo vean y me ayuden.

#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <process.h>
#include <gotoxy.h>

#define ARRIBA     72
#define IZQUIERDA  75
#define DERECHA    77
#define ABAJO      80
#define ESC        27
#define ENTER      13

FILE *doc, *archi;
 
int Menu, b;
int cuerpo[200][2];
int n = 1, tam = 10, dir = 3, mat=20;
int x = 10, y = 12;
int xc = 30, yc = 15, pc = 5, oc = 35;
int velocidad = 130;
int score=0, r=0, h=1;
char tecla, nombres[20], cadena[20];

void pintar(){ 
     for(int i=2; i < 78; i++){
        gotoxy (i, 3); printf ("%c", 205);
        gotoxy(i, 23); printf ("%c", 205);
        }
     for(int v=4; v < 23; v++){
        gotoxy (2,v);  printf ("%c", 186);
        gotoxy(77,v);  printf ("%c", 186);
        }
     gotoxy (15,1);     printf ("***************** Snake By Firu *****************");
     gotoxy  (2,3);    printf ("%c", 201);
     gotoxy (2,23);    printf ("%c", 200);
     gotoxy (77,3);    printf ("%c", 187);
     gotoxy(77,23);    printf ("%c", 188);
     } 

void scores(){

     char cadena[80];
     archi=fopen("Score.txt","r"); //en modo lectura r
              if(archi == NULL) printf("Archivo no encontrado");
                       fgets(cadena,80,archi);
                       do{
                          printf("%s\n",cadena);
                          }while(fgets(cadena,80,archi)!=NULL);

     fclose(archi);
     getch();
     system("cls");
}
void bienvenida(){
     
     gotoxy(3,5);
     printf("    * *        ***********  **          *  *********  *     *   *********");
     gotoxy(3,6);
     printf("     *         *            *  *        *  *       *  *  *      *");
     gotoxy(3,7);
     printf("     *         *            *    *      *  *       *  **        *");
     gotoxy(3,8);
     printf("   *****       ***********  *      *    *  *********  **        *******");
     gotoxy(3,9);
     printf("  * *** *                *  *        *  *  *       *  *  *      *");
     gotoxy(3,10);
     printf(" *********               *  *          **  *       *  *    *    *");
     gotoxy(3,11);
     printf(" *********     ***********  *          **  *       *  *      *  *********");
     gotoxy(3,12);
     printf("  *******           ************            ***********");
     gotoxy(3,13);
     printf("  *******          **************          *************");
     gotoxy(3,14);
     printf("   *******        ****************        ***************");
     gotoxy(3,15);
     printf("    *******      *******    *******      *******    *******");
     gotoxy(3,16);
     printf("     *******    *******      *******    *******      *******");
     gotoxy(3,17);
     printf("      ***************         ***************         ***************");
     gotoxy(3,18);
     printf("       *************           *************           *************");
     gotoxy(3,19);
     printf("        ***********             ***********             ***********");

     gotoxy(20,22);
     printf("Ingrese su nombre de Usuario: ");
     gets(nombres);
     system("cls");
}

void OcultaCursor() {
    CONSOLE_CURSOR_INFO cci = {100, FALSE};
 
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
}


void guardar_posicion(){
     cuerpo[n][0] = x;
     cuerpo[n][1] = y;
     n++;
     if(n == tam) n = 1;
}
void dibujar_cuerpo(){
      for(int i = 1; i < tam; i++){
      gotoxy(cuerpo
  • , cuerpo[1]);
      printf("*");
     }
}
void borrar_cuerpo(){
     gotoxy(cuerpo[n][0] , cuerpo[n][1]); printf(" ");
    }

void teclear(){
     if(kbhit()){
            tecla = getch();
            switch(tecla){
                case ARRIBA : if(dir != 2) dir = 1; break;
                case ABAJO : if(dir != 1) dir = 2; break;
                case DERECHA : if(dir != 4) dir = 3; break;
                case IZQUIERDA : if(dir != 3) dir = 4; break;
                case ENTER:
                     gotoxy(35,10);
                     printf("Pause");
                     getch();
                     gotoxy(35,10);
                     printf("     ");
                     break;
           }
     }
}

void cambiar_velocidad(){
if(score == h*10){
         velocidad = velocidad - 10;
         h++;
}
}
   
void comida()
{
     if(x == xc && xc && y == yc)
     {
          xc = (rand() % 72) + 4;
          yc = (rand() % 18) + 4;
 
          tam++;
          score++;
         
          cambiar_velocidad();
         
          gotoxy(xc, yc); printf("%c", 4);
}
}

bool game_over()
{
     if(y == 3 || y == 23 || x == 2 || x == 77) return false;
     for(int j = tam - 1; j > 0; j--){
             if(cuerpo[j][0] == x &&  cuerpo[j][1] == y)
             return false;
     }
    return true;
}

void puntos(){
     gotoxy(34,3);
     printf(" Score:%d ", score);
     gotoxy(10, 3);
     printf(" Nivel: %d ",h);
}
int main()
{   
           
     pintar();
     bienvenida();
     system("cls");
     
     inicio:

     pintar();
     gotoxy(20,10);
     printf("1 - Jugar.");
     gotoxy(20,11);
     printf("2 - Puntajes.");
     gotoxy(20,12);
     printf("3 - Cambiar Usuario.");
     gotoxy(20,13);
     printf("4 - Juego Nuevo.");
     gotoxy(20,14);
     printf("5 - Salir.\n");
     gotoxy(20,16);
     printf("Digigite su Seleccion: ");
     scanf("%i",&Menu);
     system("cls");
     switch(Menu){
                  case 2:
                       scores();
                       goto inicio;
                       break;
                       
                  case 1:
    if(tecla == ENTER){
             getch();
             gotoxy(20,10);
             printf("Pause");
                  }
    OcultaCursor();
 
    pintar();
    gotoxy(xc, yc); printf("%c", 4);
 
    while(tecla != ESC && game_over())
    {   
         borrar_cuerpo();
         guardar_posicion();
         dibujar_cuerpo();
         comida();
         puntos();
         teclear();
         teclear();
 
         if(dir == 1) y--;
         if(dir == 2) y++;
         if(dir == 3) x++;
         if(dir == 4) x--;
 
         Sleep(velocidad);
         }
    pintar();
    system("cls");
    doc = fopen("Score.txt","a");
    gotoxy(30, 11);
    printf("Nombre: %s\n",nombres);
    gotoxy(30, 12);
    printf("Perdio en el nivel: %d",h);
    pintar();
    gotoxy(30, 13);
    printf("Su Score es: %d ",score);
    fprintf(doc,"\n");
    fprintf(doc,"               Nombre: %s          Nivel: %d          Score: %d \n",nombres,h,score);
    fclose(doc);
    getch();
    system("cls");
    goto inicio;
    break;
                         case 3:
                              pintar();
                              fflush(stdin);
                              bienvenida();
                              system("cls");
                              goto inicio;
                              break;                             
                         case 5:
                              return 5;
                              break;
                         case 4:
                             
                              fflush(stdin);
                             
                              OcultaCursor();
 
                              pintar();
                              gotoxy(xc, yc); printf("%c", 4);
 
                              while(tecla != ESC && game_over())
                              {       
                              borrar_cuerpo();
                              guardar_posicion();
                              dibujar_cuerpo();
                              comida();
                              puntos();
                              teclear();
                              teclear();
 
                              if(dir == 1) y--;
                              if(dir == 2) y++;
                              if(dir == 3) x++;
                              if(dir == 4) x--;
 
                              Sleep(velocidad);
                              }
                              pintar();
                              system("cls");
                              doc = fopen("Score.txt","a");
                              gotoxy(30, 11);
                              printf("Nombre: %s\n",nombres);
                              gotoxy(30, 12);
                              printf("Perdio en el nivel: %d",h);
                              pintar();
                              gotoxy(30, 13);
                              printf("Su Score es: %d ",score);
                              fprintf(doc,"\n");
                              fprintf(doc,"               Nombre: %s          Nivel: %d          Score: %d \n",nombres,h,score);
                              fclose(doc);
                              getch();
                              system("cls");
                              goto inicio;
                              break;
}
}
 


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda en Código de Snake
« Respuesta #1 en: 26 Marzo 2013, 21:17 pm »

Se nota que te has documentado. Pero tienes una gran falla en tu programa: NO se deben usar variables globales, son fuentes de errores:
https://www.youtube.com/watch?v=0QXkRD3fzVQ

Por cierto en la condición del if:
Código
  1. if(x == xc && xc && y == yc)

Porque pones xc a secas en medio?

Para el case 4 se puede usar un goto, pero es mucho más elegante poner todo en un while.


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
Firu

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda en Código de Snake
« Respuesta #2 en: 26 Marzo 2013, 21:25 pm »

xD ese xc no va xD es que habia probado con "xc != comida()" pero al ser función no se podia y se me olvido de quitar ese pedasito xD

pero en si aun me falta 1 poco en eso de que la comida no aparezca sobre el cuerpo o si aparece que no se borre al pasar "borrar_cuerpo();" por encima de el :|
En línea

85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Ayuda en Código de Snake
« Respuesta #3 en: 26 Marzo 2013, 21:30 pm »

XD a secas

eso significa que intenta comprobar si tiene un valor distinto de 0, una comprobación de estado booleano. Pero si nunca es 0 entonces no tiene sentido comprobarlo.

a veces es muy útil por ejemplo para comprobar si un puntero fue asignado con una dirección de memoria.

int* pun = 0;//Asignar

if(pun){
}



En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda en Código de Snake
« Respuesta #4 en: 26 Marzo 2013, 21:41 pm »

Esque tu código es muy propenso a errores no es por nada... Las variables que usas son globales y pueden modificarse desde cualquier función

Por eso es muy díficil detectar errores. Además los nombres son muy poco descriptivos y muy genéricos. Tienes que intentar corregir eso para tu próximo proyecto.
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
85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Ayuda en Código de Snake
« Respuesta #5 en: 26 Marzo 2013, 22:08 pm »

aparte para no ir en contra del concepto de 'modularidad' del programa
En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
juego SNAKE en C# « 1 2 »
.NET (C#, VB.NET, ASP)
lokot3 14 40,515 Último mensaje 2 Junio 2006, 19:39 pm
por SeniorX
Snake en Batch o_O - by Smart
Scripting
SmartGenius 3 3,118 Último mensaje 24 Septiembre 2008, 03:10 am
por SmartGenius
[Batch Game] Snake
Scripting
modubat 0 2,948 Último mensaje 26 Agosto 2010, 17:29 pm
por modubat
ACM 3300 .. Snake Pit .. requiero un empujon
Programación General
Hadess_inf 3 3,157 Último mensaje 13 Enero 2012, 16:19 pm
por Hadess_inf
[C] Juego snake
Programación C/C++
Dacan 4 4,631 Último mensaje 22 Marzo 2013, 05:32 am
por Dacan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines