Visitantes:


Snake

El clásico juego de snake hecho en C++ siguiente un tutorial perdido de youtube.

Código:

#include
#include
#include
#include

#define ARRIBA  72 //Numeros asociados a las teclas
#define IZQ     75
#define DER     77
#define ABAJO   80
#define ESC     27

int cuerpo[200][2];
int n = 1;
int tam = 4;
int x = 10, y = 12;
int dir = 3;
int xc = 30, yc = 15;
int vel = 100, h = 1;
int score = 0;

char tecla;

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

void pintar(){
        //lineas h
        for(int i = 3 ; i < 77 ; i++){
                gotoxy(i,3); printf("%c",205);
                gotoxy(i,23); printf("%c",205);
        }
        //lineas v
        for(int i = 4; i < 23; i++){
                gotoxy(2,i); printf("%c",186);
                gotoxy(77,i); printf("%c",186);
        }
        //esquinas
        gotoxy(2,3); printf("%c",201);
        gotoxy(77,3); printf("%c",187);
        gotoxy(2,23); printf("%c",200);
        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("o");
        }
}

void borrar_cuerpo(){
        gotoxy(cuerpo[n][0],cuerpo[n][1]); printf(" ");
}

void cambiar_vel(){
        if(score==h*20){
                vel -= 10;
                h++;
        }
}

void comida(){
        if(x==xc && y==yc){
                xc = (rand()%73)+4;
                yc = (rand()%19)+4;
                tam++;
                gotoxy(xc,yc); printf("%c",4);
                score+=10;
        }
        cambiar_vel();
}

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 DER :
                                        if(dir != 4)
                                        dir=3;
                                break;
                        case IZQ :
                                if(dir != 3)
                                        dir=4;
                                break;
                }
        }
}

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(3,1); printf("score : %d",score);
}

int main(){
        system("mode 80, 25");
        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(vel);
        }
        system("pause>nul");
        return 0;
}