Código fuente de optimización del proceso de juego
# include & ltgraphics.h & gt
# include & ltstdlib.h & gt
# include & ltdos.h & gt
#Definir 0x4b00 izquierdo
#Definir 0x4d00 derecho
#Definir 0x5000 hacia abajo
#Definir hasta 0x4800
#define ESC 0x011b
int i, key
int score = 0; /*score*/
int gamespeed = 50000/*Ajusta la velocidad del juego usted mismo */
Alimentos estructurados
{
int x; /*Abscisa de los alimentos */
int y;/*Vertical de los alimentos coordinar */
int yes/*Determinar si aparecerá la variable de alimento*/
}Alimento /*Estructura de alimento*/
Estructura de serpiente p>
{
int x[N];
int y[N];
int nodo /*Número de nudos de serpiente */
int direction; /*La dirección de movimiento de la serpiente*/
int life/*La vida de la serpiente, 0 está viva, 1 está muerta*/
}Serpiente;
void Init(void); /*Controlador de gráficos*/
void Close(void); >void DrawK(void);/*Pantalla de inicio*/
void game over(void);/*Fin del juego*/
void gameplay(void);/*Jugar The proceso específico del juego*/
void PrScore(void);/*Resultados de salida*/
/*Función principal*/
Administrador no válido (no válido )
{
init() /*Controlador de gráficos*/
DrawK() /*Pantalla de inicio*/
Jugabilidad();/*El proceso específico de jugar*/
close();/*Fin del gráfico*/
}
/* Programa del 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, 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);*/
establecer color(11);
setlinestyle(SOLID_LINE, 0, THICK _ WIDTH); /*Establecer estilo de línea* /
for( I = 50;i<=600;I+=10)/*Dibujar una valla*/
{
Rectángulo(I, 40, i+10, 49);/ *arriba*/
Rectangle(I, 451, i+10, 460); /*abajo*/
}
for(I = 40;i<=450;i+=10)
{
Rectángulo(50,I,59,I+10);/*izquierda*/
Rectángulo (601, I, 610, I+10) /*derecha*/
}
}
/*El proceso específico de juego */
Juego no válido (nulo)
{
aleatorizar
(); /*Generador de números aleatorios*/
comida yes = 1; /*1 significa que es necesario que aparezca nueva comida, 0 significa que la comida ya existe*/
serpiente. = 0; /*vivo*/
serpiente . ]= 100; /*cabeza de serpiente*/
serpiente x[1]= 110; Número de sección*/
PrScore();/*Puntuación de salida*/
Y (1)/*Puedes jugar el juego repetidamente y presionar ESC para finalizar*/
{
Y (!Khit ())/*La serpiente se mueve sola sin presionar una tecla*/
{
Si(comida .yes== 1)/*Necesita comida nueva*/
{
comida x = rand()% 4060 . = rand( )% 3560;
Y (food.x%10!=0)/*Después de que la comida aparece aleatoriamente, la comida debe estar en toda la cuadrícula para que la serpiente la coma*/
comida .Hay comida*/
}
If(food.yes==0)/*Si hay comida en la pantalla, será mostrado*/
{
setcolor(green);
Rectángulo (food.x, food.y, food.x+10, food. y- 10);
}
for(I = serpiente . nodo-1;I>0;I-)/*Cada eslabón de la serpiente avanza, que es el algoritmo clave del serpiente*/
{
serpiente x[I]= serpiente x[I-1];
serpiente y[I]= serpiente. y[I-1];
p>
}
/*1, 2, 3, 4 significa derecha, izquierda, arriba y abajo. Este juicio puede moverse. la cabeza de serpiente*/
Cambiar (dirección de la serpiente)
{
caso 1: serpiente x[0]+= 10; >
Caso 2: serpiente. x[0]-= 10;
Caso 3: serpiente y[0]-= 10; : serpiente . y[0]+= 10; Break;
}
for(I = 3; I & ltsnake. Node; I++)/*Juzga si te golpeaste la cuarta sección de la serpiente, debido a que la cabeza de la serpiente tiene dos secciones, la primera sección Es imposible girar en tres nudos*/
{
if(snake . x[ I]= = serpiente .x[0]& amp;& ampsnake.y[i] ==snake.y[0])
{
juego terminado(); *Fallo de visualización*/
vida de serpiente = 1;
p>Rotura;
}
}
if(snake . x[0]<55 | | serpiente . x[0] >595 | >
{
juego terminado();/*Este juego ha terminado*/
serpiente.
ife = 1; /*La serpiente muere*/
}
If(snake.life==1)/*Después de los dos juicios anteriores, si la serpiente muere, salta de el bucle interno Empezar de nuevo*/
Pausa;
if(snake . x[0]= = comida . *Después de comer comida*/
{
set color(0); /*Eliminar comida de la imagen*/
Rectangle(food.x, food.y, food.x+10, food.y-10) ;
snake.x[snake.node]=-20;snake.y[snake.node]=-20;
p>/*Primero saque el nuevo segmento vista y toma la posición del segmento anterior en el siguiente bucle*/
snake.node++;/*El cuerpo de la serpiente tiene un segmento largo */
food yes = 1. ; /*Es necesario que aparezca comida nueva en la pantalla*/
Puntuación += 10;
PrScore();/ *Producir nueva puntuación*/
}
set color(4); /*Dibuja una serpiente*/
for(I = 0; i<snake .node;i++)
Rectangle(serpiente) .x[i], serpiente.y[i], serpiente.x[i]+10,
snake .y[I] -10);
Retraso (velocidad del juego) ;
set color(0); /*Eliminar la última sección de la serpiente con negro*/
Rectángulo (snake .x[snake.node-1], serpiente.y [snake.node-1],
snake.x[snake.node-1]+10, serpiente.y[snake.node-1 ]-10);
} /*end while(!kbhit)*/
If(snake.life==1)/*Si la serpiente muere, salta fuera del bucle*/
Romper; p>
tecla = tecla BIOS(0); /*Botón Recibir*/
If(key==ESC)/*Presione ESC para salir*/
Break;
Otro
if(key == ARRIBA & amp; & amp serpiente, dirección! = 4)
/ *Determina si moverse en la dirección opuesta */
serpiente . dirección = 3;
Otros
if(clave == DERECHA & amp; & amp serpiente, dirección!
serpiente . dirección = 2;
Otro
if(clave == ABAJO & & serpiente, dirección! = 3)
dirección de la serpiente = 4;
}/*end while(1)*/
}
/*Juego terminado*/
< p. >Juego no válido terminado (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 ",score);
outtextxy(55, 20, str);
}
/*Fin del gráfico*/
Cierre no válido (no válido)
{
getch();
closegraph();
}
Este es el código de Snake, con explicaciones detalladas, y puede ejecutarse exitosamente.