Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Firu

#1
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;
    }
    }