Buscando código Snake C con ciertos requisitos funcionales
#define IZQUIERDA 0x4b00
#define DERECHA 0x4d00
#define ABAJO 0x5000
#define ARRIBA 0x4800
#define ESC 0x011b
int i,key;
int puntuación = 0;/* puntuación**/
int gamespeed = 100000;/ * La velocidad del juego se puede ajustar sola**
struct Food
{
?int x /* La abscisa de la comida**; p>
? int y; /* La coordenada vertical de la comida*/
?int yes /* Variable que determina si la comida aparece
}comida; estructura de los alimentos** p>
struct Snake
{
? int x[N]
?
? int node;/* El número de nodos de la serpiente**
? int direction;/* La dirección de movimiento de la serpiente*/
?int vida;/* vida de serpiente, 0 viva, 1 muerta*/
}serpiente;
void Init(void);/* controlador gráfico*/
void Close(void);/* fin gráfico */
void DrawK(void);/* pantalla de inicio*/ }
for(i = 40; i lt; = 450 ; i = 10)
{
?rectangle(50, i, 59, i 10); /*lado izquierdo*/
?rectangle(601); , i, 610, i 10);/ *lado derecho*/
}<
}
/*Jugando el juego**
void GamePlay(void) p>
{
randomize(); /*generador de números aleatorios**
food.yes = 1 /*1; significa que es necesario que aparezcan nuevos alimentos, 0 significa que los alimentos ya existen***
Snake.yes = 1;/*1 significa que es necesario que aparezcan nuevos alimentos, 0 significa que los alimentos ya existen***
snake.yes = 1;/*1 Indica que es necesario que aparezca nuevo alimento, 0 significa que el alimento ya existe***
Snake.
node = 2; /* Número de nodos*/
PrScore(); /* Puntuación de salida*/
while(1)/* Puedes repetir el juego y presionar ESC para finalizar el juego* /
{
? while(!kbhit())/* Sin el botón kbhit())/*, la serpiente moverá su cuerpo por sí sola*/
?{
? if(food.yes == 1)/* Es necesario que aparezcan nuevos alimentos**
?{
comida.x = rand() 400 60
comida.y = rand() 350 60
mientras(comida.x 10 ! = 0; )/* comida Debe ser aleatoria para que la comida quepa dentro de todo el marco para que la serpiente pueda comer *
comida.x;
while(comida.y 10 ! = 0 )
food.y;
food.yes = 0; /* Ahora hay comida en la pantalla*/
?}
?
? if(food.yes == 0)/* Muestra si hay comida en la pantalla*/
?{
setcolor( VERDE);
rectángulo(comida.x, comida.y, comida.x 10, comida.y - 10);
?}
?
? for (i = serpiente.nodo - 1; i gt; 0; i--)/* Cada enlace de la serpiente avanza. Este es el algoritmo clave de "Snake"*
?{
serpiente.x[i] = serpiente.x[i-1]
serpiente.y[i] = serpiente.y[i-1];
?}
?
?/*1, 2, 3, 4 representan las cuatro direcciones: derecha, izquierda, arriba y abajo, para determinar. el movimiento de la cabeza de serpiente*/
? switch(snake.direction)
?{
caso 1: serpiente.x[0] = 10; romper;
caso 2: serpiente.x[0] -= 10; romper
caso 3: serpiente.y[0] -= 10;
caso 4: serpiente. y[0] = 10 descanso;
?}
?
? Snake.node; i )/* Comience desde el cuarto nodo de la serpiente para determinar si se golpeó a sí misma, porque la cabeza de la serpiente está en dos nodos y el tercer nodo no se puede girar*
?{
if(snake.x[i] == serpiente.x[0] amp; amp; serpiente.y[i] == serpiente.y[0])
{
GameOver(); /* Error de visualización**
serpiente.life = 1
descanso
}
?}
?
? if(snake.x[0]lt; 55||snake.x[0]gt; 595||snake.y[ 0]lt; 5
5|
? Snake.y[0]gt; 455)/* ¿La serpiente chocó contra la pared*/
?{
GameOver(); / * Juego terminado*/
serpiente.life=1; /* La serpiente muere*/
?}
?
? if (snake.life == 1)/* Después de los dos juicios anteriores, si la serpiente muere, salta del bucle interno y comienza de nuevo*
break
p>
? ?{
setcolor(0); /* Eliminar comida en la pantalla*/
rectángulo(food.x, food.y, food.x 10, food.y - 10 );
Snake.x[snake.node] =- 20; Snake.y[snake.node] =- 20
/* Coloque la nueva pieza fuera de la vista primero; , el siguiente bucle usa la posición de la parte anterior*/
Snake.x[0] == food.x amp; >
?node; /* El cuerpo de la serpiente ha crecido una sección*/
food.yes = 1; /* Es necesario que aparezca nueva comida en la pantalla*/
puntuación = 10;
PrScore();/* Generar nueva puntuación*/
?}
?
setcolor(4) ) ;/* Dibujar una serpiente*/
?
? for(i = 0; i lt; Snake.node; i )
rectángulo(serpiente) .x[i], serpiente.y[i], serpiente.x[i] 10,
serpiente.y[i] - 10);
* delay(gamespeed);
* setcolor(0); /* Eliminar la última serpiente negra*/ ?
? .x[snake.node-1], serpiente.y[snake.node-1],
? serpiente.x[snake.node-1] 10, serpiente.y[snake.node - 1 ] - 10);
?}?/*end while(!kbhit)*/
?
?if(snake.life == 1)/ * Si la serpiente muere, sal del bucle*/
? break;
?
?key = bioskey(0); **
?
?if(key == ESC)/* Presione la tecla ESC para salir*/
? p> ? else
? if(key == UPamp;amp; Snake.direction!=4)
/* Determinar si se debe mover en la dirección opuesta*/
serpiente.dirección =3;
?d
irection=3;
? else
? /p>
? else
? if(clave == IZQUIERDA amp; serpiente.dirección ! = 1)
serpiente.dirección=2;
p>? else
?if (tecla == ABAJO amp; serpiente.dirección ! = 3)
serpiente.dirección = 4;
?dirección = 4;
}/*end while(1)*/
}
/*juego terminado**
void GameOver( vacío)
{
cleardevice();
PrScore()
setcolor(ROJO);
p>
settextstyle(0, 0, 4);
outtextxy(200, 200, "JUEGO TERMINADO");
getch(); p >}
/* Puntuación de salida*/
void PrScore(void)
{ ?
char str[10];
setfillstyle(SOLID_FILL, AMARILLO);
bar(50, 15, 220, 35);
setcolor(6); > settextstyle(0, 0, 2); <
sprintf(str, "puntuación: d", puntuación
outtextxy(55, 20, str); >
}
/* Fin del gráfico**
void Close(void)
{ ?
getch();
cerrar gráfico();
}