#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
//Codigo ascci para teclas
#define ARRIBA 72
#define IZQUIERDA 75
#define DERECHA 77
#define ABAJO 80
#define ESC 27
int cuerpo[200][2];
char cadena[100];
int n = 1, tam = 10, dir = 3;
int x = 10, y = 12;
int xc = 30, yc = 15;
int velocidad = 60;
char tecla;
int puntaje=0;
//Va a un lugar de la pantalla y la dibuja
void gotoxy(int x, int y) { //definicion coordenadas de la vivorita
HANDLE hCon;
COORD dwPos;
dwPos.X = x;
dwPos.Y = y;
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hCon,dwPos);
}
void OcultaCursor() { //borra ultimos elementos inecesarios
CONSOLE_CURSOR_INFO cci = {100, FALSE};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
}
void pintar() { //dibujo de pantalla de presentacion y juego
gotoxy(27,1);
printf("Gracias");
gotoxy(26,2);
printf("Por ayudar");
//Linea horizontal
for(int i=2; i < 78; i++) {
gotoxy (i, 3);
printf ("%c", 205);
gotoxy(i, 23);
printf ("%c", 205);
}
//Linea vertical
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);
gotoxy(77,23);
printf ("%c", 188);
gotoxy(2,24);
printf ("Puntaje:%d\n",puntaje);
}
void guardar_posicion() { //cordenadas de la bivorita
cuerpo[n][0] = x;
cuerpo[n][1] = y;
n++;
if(n == tam) n = 1;
}
void dibujar_cuerpo() { //movimiento de la bivorita
for(int i = 1; i < tam; i++) {
gotoxy(cuerpo[i][0], cuerpo[i][1]);
printf("*");
}
}
void borrar_cuerpo() { //borra el cuerpo cada ves que se mueve
gotoxy(cuerpo[n][0], cuerpo[n][1]);
printf(" ");
}
void teclear() { //movimiento segun las teclas
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() { //coordenadas de la comida
if(x == xc && y == yc) {
xc = (rand() % 73) + 4;
yc = (rand() % 19) + 4;
tam++;
puntaje=puntaje+10;
gotoxy(2,24);
printf ("Puntaje:%d\n",puntaje);
//Aumento la veocidad cada vez que come
velocidad=velocidad-20;
//Para que no valla muy veloz
if(velocidad<=30)velocidad=30;
gotoxy(xc, yc);
printf("%c", 4);
}
}
bool game_over() { //pantalla de perdido
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() {
//FILE *pf;
struct datos {
char nombre[150];
int puntos;
};
datos array[10];
int i=0;
char cadena[150];
FILE *paraleer;
FILE *paraGrabar;
paraleer = fopen("puntosSnake.txt","r");
if(paraleer==NULL) { //Si se encuentra el archivo??
printf("\nError en el archivo, falta archivo de puntos \n");
return 0;
}
//carga del array desde el archivo
while (fscanf (paraleer, "%s", cadena) != EOF) {
strcpy(array[i].nombre,cadena);
fscanf (paraleer, "%s", cadena);
array[i].puntos=atoi(cadena);
i++;
}
OcultaCursor();
pintar();
gotoxy(xc, yc);
printf("%c", 4);
while(tecla != ESC && game_over()) {
borrar_cuerpo();
guardar_posicion();
dibujar_cuerpo();
comida();
teclear();
if(dir == 1) y--;
if(dir == 2) y++;
if(dir == 3) x++;
if(dir == 4) x--;
//Se frena los milisegundos ingresados
Sleep(velocidad);
}
//Funcion pintar
pintar();
if (puntaje > array[9].puntos) {
array[9].puntos = puntaje;
gotoxy(2,25);
printf ("Ingrese su nombre: ");
gets(cadena);
strcpy(array[9].nombre,cadena);
int aux_elem=0;
for (int i = 9; i > 0; i--) {
if (array[i].puntos > array[i-1].puntos) {
// si el elemento anterior es mayor, hacemos el cambio
aux_elem = array[i-1].puntos;
strcpy(cadena,array[i-1].nombre);
array[i-1].puntos = array[i].puntos;
strcpy(array[i-1].nombre,array[i].nombre);
array[i].puntos = aux_elem;
strcpy(array[i].nombre,cadena);
}
}
}
fclose(paraleer);
paraGrabar=fopen("puntosSnake.txt","w");
for (i=0; i<10; i++) {
fprintf(paraGrabar,"%s",array[i].nombre);
fprintf(paraGrabar,"%d \n",array[i].puntos);
}
fclose(paraGrabar);
gotoxy (1, 1);
printf (" Puntaje: %d ",puntaje);
gotoxy (1, 2);
printf (" Puntajes Maximos ");
for ( i = 0; i < 10; i++) {
array[i].nombre;
array[i].puntos;
gotoxy (1, i+3);
printf (" %d %d %s ",i+1,array[i].puntos,array[i].nombre);
}
system("pause");
return 0;
}
Comentarios sobre la versión: 1 (0)
No hay comentarios