Juego snake en c++

Iniciado por Blaster, 5 Octubre 2012, 02:20 AM

0 Miembros y 1 Visitante están viendo este tema.

Blaster

El codigo ya esta corregido, la libreria (conio2.h) es la que provocaba
el fallo; este es el code funcional pa quien lo quiera compilar
y ejecutar gracias a todos ;)

 
Código (cpp) [Seleccionar]
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <conio.h>

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

int cuerpo[200][2];
int n = 1, tam = 10, dir = 3;
int x = 10, y = 12;
int xc = 30, yc = 15;
int velocidad = 60;
char tecla;

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 OcultaCursor() {
   CONSOLE_CURSOR_INFO cci = {100, FALSE};

   SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
}
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  (2,3);    printf ("%c", 201);
    gotoxy (2,23);    printf ("%c", 200);
    gotoxy (77,3);    printf ("%c", 187);
    gotoxy(77,23);    printf ("%c", 188);
    }  
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[i][0] , cuerpo[i][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;
          }
    }
}
void comida()
{
    if(x == xc && y == yc)
    {
         xc = (rand() % 73) + 4;
         yc = (rand() % 19) + 4;
         
         tam++;
         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;
}
int main()
{
   OcultaCursor();
   
   pintar();
  gotoxy(xc, yc); printf("%c", 4);
   
   while(tecla != ESC && game_over())
   {
        borrar_cuerpo();
        guardar_posicion();
        dibujar_cuerpo();
        comida();
        teclear();
        teclear();
       
        if(dir == 1) y--;
        if(dir == 2) y++;
        if(dir == 3) x++;
        if(dir == 4) x--;
       
        Sleep(velocidad);
        }
   pintar();
   return 0;
}

Blaster

#1
Editado

X3R4CK3R

Cita de: Neo_System en  5 Octubre 2012, 21:12 PM
hola por que nadie me ayuda quiero corregir este code :-(
les agradeceria mucho.

Quizás porque nadie usa conio2.h, te aconsejaría que usases librerías estándares.

Saludos

Blaster

#3
ahh ya veo tomare tu consejo
gracias ;)

flony

#4
supongo que porque cada librería tiene funciones propias que no hacen otras, y se debería conocer el funcionamiento de esa librería para saber si to code esta bien o no....eso si soluciones a tu codigo es muy alto el nivel para mi, soy iniciado en esto
si un problema no tiene solucion entonces no es un problema...es algo inevitable

Blaster

#5
Cita de: flony en  6 Octubre 2012, 23:24 PM
supongo que porque cada librería tiene funciones propias que no hacen otras, y se debería conocer el funcionamiento de esa librería para saber si to code esta bien o no....eso si soluciones a tu codigo es muy alto el nivel para mi, soy iniciado en esto

gracias x la aclaracion amigo
un saludo ;)

fary

Este tipo de juegos me parece que se hacen con un  array multidimensional del mapa, lo que facilita muchisimo las cosas... de la forma que lo haces no sería correcta.

un saludo.
Un byte a la izquierda.