Red de conocimiento informático - Conocimiento sistemático - Código fuente de optimización del proceso de juego

Código fuente de optimización del proceso de juego

#Definición N 200

# 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

{

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;

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.