Wikipedia para siempre
ShareCode
Permalink: http://www.treeweb.es/u/974/ 01/02/2011

ShareCode

1 #include <windows.h> 2 #include <iostream> 3 #include <stdlib.h> 4 #include <conio.h> 5  6 //son los valores que arroja la funcion getchar(), para las teclas flecha 7 #define ARRIBA 72 8 #define IZQUIERDA 75 9 #define DERECHA 77 10 #define ABAJO 80 11 #define ESC 27 12  13  14  15  //Variables predefinidas para el estado inicial 16 int cuerpo[200][2]; 17 int n = 1, tam = 10, dir = 3; 18 int x = 10, y = 12; 19 int xc = 30, yc = 15; 20 int velocidad = 60; 21 char tecla; 22  23 void gotoxy(int x, int y) //se encarga de colocar el cursor en la columna y renglon deseado de la ventana 24 { 25  HANDLE hCon; 26  COORD dwPos; 27  28  dwPos.X = x; //guarda el valor del columna haciendo una referencia a una estructura 29  dwPos.Y = y; //guarda el valor del renglon haciendo una referencia a una estructura 30  hCon = GetStdHandle(STD_OUTPUT_HANDLE); // 31  SetConsoleCursorPosition(hCon,dwPos); // 32 } 33 void OcultaCursor() { //Oculta el cursor al inicio del juego 34  CONSOLE_CURSOR_INFO cci = {100, FALSE}; 35  36  SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci); 37 } 38 void pintar(){ //crea lo que veremos en la 39  for(int i=2; i < 78; i++){ 40  gotoxy (i, 3); printf ("%c", 205); 41  gotoxy(i, 23); printf ("%c", 205); 42  } 43  for(int v=4; v < 23; v++){ 44  gotoxy (2,v); printf ("%c", 186); 45  gotoxy(77,v); printf ("%c", 186); 46  } 47  gotoxy (2,3); printf ("%c", 201); 48  gotoxy (2,23); printf ("%c", 200); 49  gotoxy (77,3); printf ("%c", 187); 50  gotoxy(77,23); printf ("%c", 188); 51  } 52 void guardar_posicion(){ //Guarda el estado anterior de lo que se muestra en pantalla 53  cuerpo[n][0] = x; 54  cuerpo[n][1] = y; 55  n++; 56  if(n == tam) n = 1; 57 } 58 void dibujar_cuerpo(){ //dibuja el cuerpo del "snake" 59  for(int i = 1; i < tam; i++){ 60  gotoxy(cuerpo[i][0] , cuerpo[i][1]); printf("*"); 61  } 62 } 63 void borrar_cuerpo(){ //borra el cuerpo para proceder al siguiente estado de la pantalla y 64  gotoxy(cuerpo[n][0] , cuerpo[n][1]); printf(" "); 65  } 66 void teclear(){ //guarda la dirrecion en la que deseamos ir 67  if(kbhit()){ 68  tecla = getch(); //funcion que asigna un valor a la tecla que oprimimos 69  switch(tecla){ 70  case ARRIBA : if(dir != 2) dir = 1; break; 71  case ABAJO : if(dir != 1) dir = 2; break; 72  case DERECHA : if(dir != 4) dir = 3; break; 73  case IZQUIERDA : if(dir != 3) dir = 4; break; 74  } 75  } 76 } 77 void comida() // genera alatoriamente la comida a seguir 78 { 79  if(x == xc && y == yc) 80  { 81  xc = (rand() % 73) + 4; 82  yc = (rand() % 19) + 4; 83  84  tam++; 85  gotoxy(xc, yc); printf("%c", 4); 86  } 87 } 88 bool game_over() //establece las condiciones en las que perdemos 89 { 90  if(y == 3 || y == 23 || x == 2 || x == 77) return false; //cuando chocamos con la limitrofe 91  for(int j = tam - 1; j > 0; j--){ //cuando chocamos contra nosotros mismos (creo) 92  if(cuerpo[j][0] == x && cuerpo[j][1] == y) 93  return false; 94  } 95  return true; 96 } 97 int main() 98 { 99  OcultaCursor(); //oculta el cursosr 100  101  pintar(); //crea lo que ve el usuario 102  gotoxy(xc, yc); printf("%c", 4); //coloca el estado inicial 103  104  while(tecla != ESC && game_over()) //generador de los estados con las condiciones que permiten que el juego continue 105  { 106  borrar_cuerpo(); 107  guardar_posicion(); 108  dibujar_cuerpo(); 109  comida(); 110  teclear(); 111  teclear(); 112  113  if(dir == 1) y--; //cambia la variable que controla la posicion de la cabeza de la serpiente 114  if(dir == 2) y++; 115  if(dir == 3) x++; 116  if(dir == 4) x--; 117  118  Sleep(velocidad); //marca la tasa de refresco del juego (rapides "del juego") 119  } 120  pintar(); 121  return 0; //indica que el programa a acabado satisfactoriamente (sin errores) (al S.O.) 122 } 123 
Enlace
El enlace para compartir es: