Al reproducir programación
#Definición N 200
# incluir ltgraphics.h gt
# incluir ltstdlib.h gt
# incluir ltdos.h gt
#Definir 0x4b00 izquierda
#Definir 0x4d00 derecha
#Definir 0x5000 hacia abajo
#Definir hasta 0x4800
#define ESC 0x011b
int i, key
int score = 0; /*score*/
int gamespeed = 50000/*Ajustar el juego usted mismo Velocidad*/
Estructura de la comida
{
int x;*Food abscissa*/
int y;/*Food La ordenada de Snake
{
int x[N];
int y[N];
int node;/* Nudo de la serpiente Número*/
int dirección /*La dirección de movimiento de la serpiente*/
int vida/*La vida de la serpiente, 0 está vivo, 1 está muerto* /
}Serpiente;
void Init(void); /*Controlador de gráficos*/
void Close(void); /*Fin del gráfico*/
void DrawK(void); /*Pantalla de inicio*/
void game over(void);/*Fin del juego*/
void gameplay(void) /* El proceso específico de jugar el juego*/
void PrScore(void);/*Resultados de salida*/
/*Función principal*/
Administrador de vacíos (void )
{
init(); /*Controlador de gráficos*/
DrawK() /*Pantalla de inicio*/ p>
Jugabilidad();/*Proceso detallado del juego*/
close();/*Fin del gráfico*/
}
/*Controlador de gráficos*/
inicialización de vacío (void)
{
int gd=DETECT, GM;
init gráfico( amp; gd, ampgm, "c:\\TC");
borrar dispositivo();
}
/*Pantalla de inicio, la las coordenadas de la esquina superior izquierda son (50, 40), las coordenadas de la esquina inferior derecha son (610, 460 */
void DrawK (inválido)
{
/*setbkcolor (verde claro); */
set color(11);
setlinestyle(SOLID_LINE, 0, THICK _ WIDTH); */
for(I = 50; ilt=600; i =10)/*Dibujar una valla*/
{
Rectángulo (I, 40 , i 10, 49); /* Mayor que */
Rectangle(I, 451, i 10, 460); /* menor que */
}
for(I = 40; i lt =450; i =10)
{
Rectángulo (50, I, 59, I 10 /*izquierda*/);
p>
Rectángulo (601, I, 610, I 10); /*derecha*/
}
}
/*jugando juegos Específico proceso*/
Juego no válido (nulo)
{
randomize(); /*Generador de números aleatorios*/
comida. yes = 1; /*1 significa que es necesario que aparezca nueva comida, 0 significa que la comida ya existe*/
snake life = 0; /*alive*/
snake . 1; /*dirección derecha*/
serpiente .x[0]= 100; serpiente .y[0]= 100; /*cabeza de serpiente*/
serpiente . 1]= 110; serpiente . y[1]= 100;
nodo serpiente = 2; /*Número de secciones*/
PrScore(); /
Y (1)/*Puedes jugar el juego repetidamente, presiona ESC para finalizar*/
{
Y (!Khit ())/ *Serpiente Muévete tú mismo sin presionar una tecla*/
{
If(food.yes==1)/*Se requiere nueva comida*/
{
comida . x = rand() 400 60;
comida . y = rand() 350
Y (comida. /*Después de que aparece la comida; aleatoriamente, la comida debe estar en toda la cuadrícula para que la serpiente la coma*/
comida x;
Y (food.y10!=0)
comida sí = 0;/*Hay comida en la pantalla*/
}
If(comida.yes== 0)/*Si hay comida en la pantalla, se mostrará*/
{
setcolor(green);
Rectangle(food.x , comida .y,comida.x 10,comida.y-10);
}
for(I = serpiente.nodo-1;igt0;I-)/*serpiente Cada enlace avanza, que es el algoritmo clave de serpiente*/
{
snake x[I]= serpiente . p>snake . y[I]= serpiente . y[I-1];
}
/*1, 2, 3, 4 significa derecha, izquierda, arriba, esto. el juicio puede mover la cabeza de la serpiente*/
Cambiar (dirección de la serpiente)
{
caso 1: serpiente x[0] = 10; /p>
Caso 2: serpiente .x[0]-= 10;
Caso 3: serpiente y[0]-= 10; Caso 4: serpiente . y[0] = 10; break;
}
for(I = 3; i ltsnake . node; I )/* de serpiente en el cuarto trimestre , juzga si te has golpeado a ti mismo, porque la cabeza de la serpiente tiene dos cuartos y es imposible darse la vuelta en el tercer cuarto*/
{
if(snake. x[ I ]= = serpiente .*/
vida de serpiente = 1;
>
Romper;
}
}
if(serpiente . x[0] lt; 55 | | serpiente . x[0] gt; 595 | | serpiente . y[0] lt; 55||
serpiente . y[0] gt; /p>
juego terminado(); /*Este juego ha terminado*/
vida de serpiente = 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*/
Romper;
if (serpiente . x[0]= = comida . (0); /*Eliminar comida de la imagen*/
Rectangle(comida.x, comida.y, comida.x 10, comida. y-10);
serpiente . La posición de un segmento */
snake . /*El cuerpo de la serpiente tiene un segmento largo*/
comida yes = 1; /*Es necesario que aparezca nueva comida en la pantalla */
Puntuación = 10;
PrScore() /*Producir nueva puntuación*/
}
set color(4 ); /*Dibuja una serpiente*/
for(I = 0; iltsnake. node; i)
Rectángulo (snake.x[i], Snake.y[i ], Snake.x[i] 10,
snake . y[I]-10);
Retraso (gamespeed);
set color(0 ); /*Eliminar la última sección de la serpiente con negro*/
Rectángulo (snake.x[snake.node-1], Snake.y[snake.node-1],
snake .If(snake.life==1)/*Si la serpiente muere, salta fuera del bucle*/
Break;
tecla = tecla BIOS(0);/*Botón Recibir* /
If(key==ESC)/*Presione ESC para salir*/
Descanso;
Otros
if(key = = UP amp; amp serpiente, dirección! =4)
/*Determinar si moverse en la dirección opuesta*/
dirección serpiente = 3;
Otros
. if( clave = = DERECHA amp; amp serpiente, dirección! =2)
dirección de la serpiente = 1;
Otro
if(clave = = IZQUIERDA. amp; amp serpiente, dirección! =1)
serpiente dirección = 2;
Otros
if(clave = = DOW
N&serpiente, dirección! =3)
dirección de la serpiente = 4;
}/*end while(1)*/
}
/*Juego Fin*/
Fin del juego no válido (no válido)
{
borrar dispositivo();
PrScore();
setcolor(rojo);
settextstyle(0, 0, 4);
outtextxy(200, 200, "Juego terminado");
getch();
}
/*Resultados de salida*/
PrScore no válido (no válido)
{
char str[10];
setfillstyle(SOLID_FILL, amarillo);
Bar(50, 15, 220, 35);
establecer color (6);
settextstyle(0, 0, 2);
sprintf(str, "puntuación: d", puntuación
outtextxy(55); , 20, str);
}
/*Fin del gráfico*/
Cierre no válido (no válido)
{ p >
getch();
closegraph();
}