Código de programación de juegos de Windows
h & gt
# include & ltstdlib.h & gt
# include & ltdos.h & gt
#define left 0x4b00
#definir derecha 0x4d00
#definir abajo 0x5000
#definir hasta 0x4800
#definir ESC 0x011b
int i, clave
int puntuación = 0;
int gamespeed = 32000
Estructura alimentaria/*Estructura alimentaria*/
{
int x;/*Coordenada en abscisa de la comida*/
int y;/*Coordenada vertical de la comida*/
int yes/*Variable para si aparece la comida*/
}Alimento;
Estructura serpiente/*estructura serpiente*/
{
int x[N];
int y[N];
int node; /*Número de nudos de la serpiente*/
int dirección;/*Dirección de la serpiente*/
int life/*La vida de la serpiente, 0 está vivo, 1 está muerto*/
}Serpiente;
void Init(void);/*Controlador de gráficos* /
void Close(invalid);/*Función cerrar el juego*/
void DrawK(invalid);/*Función de dibujo*/
void game over( void); /*Función de error de salida*/
void gameplay (); /*Programa principal de la función de control del juego*/
void PrScore(void); función* /
DELAY(char ch)/*Ajustar velocidad del juego*/
{
if(ch=='3 ')
{
Retraso (velocidad del juego); /*retraso es la función de retraso*/
}
else if(ch=='2 ')
{
Retraso (velocidad del juego);
}
}
Menú()/*Inicio del juego menu*/
{
char ch
printf("Seleccione la velocidad del juego:\ n ");
printf(" 1-rápido 2-Normal 3-Lento\n ");
printf(" \nPor favor presione el número..\n ");
Hacer
{ ch = getch();}
Y (ch! = ' 1 ' &&ch! = ' 2 ' &&ch! ='3');
clr SCR();
Retorno (ch);
}
/*Función principal* /
Administrador no válido (no válido)
{
int ch
ch = Menú();
init();
DrawK();
Juego (cap);
cerrar();
inicialización de vacío (void)
{
int gd=DETECT, GM;
init gráfico(& amp; gd, & ampgm, " c :\ \ TC ");
borrar dispositivo();
}
anular DrawK(no válido)
{ p >
establecer color(11);
setlinestyle(SOLID_LINE, 0, THICK _ WIDTH);
>for(I = 50;i<=600;i+=10)
{
Rectángulo (I, 40, i+10, 49) /*Dibuja el borde superior *; /
Rectangle(I, 451, i+10, 460); /*Dibujar el borde inferior*/
}
for(I = 40; i<=450;i+=10)
{
Rectangle(50,I,59,I+10);/*Dibujar borde izquierdo*/
Rectángulo(601, I, 610, I+10); /*Dibuja el cuadro derecho*/
}
}
Juego no válido (char ch)
{
randomize(); /*Generador de números aleatorios*/
comida sí = 1; /*1 representa la apariencia de la comida, 0 representa la presencia de comida*/
serpiente. vida = 0;
serpiente. dirección = 1;
serpiente. y[0]= 100;
serpiente . x[1]= 110; y[1]= 100;
nodo = 2;
PrScore();
Y (1) /*Puede repetir el juego*/
{
Y (!Khit ())/*Snake no El botón se mueve solo*/
{
If(food.yes==1) /*Necesita comida*/
{
comida . (comida.x%10!=0)
comida x++;
Y (comida.y%10!=0)
comida . y++; /*Determina si aparece comida en toda la celda*/
comida sí = 0 /*Ahora hay comida*/
}
If (food.yes==0) /*Mostrar comida disponible*/
{
setcolor(green);
Rectangle (comida.x, comida .y,comida.x+10,comida.y-10);
}
for(I = serpiente.nodo-1;i>0;I -)/* Algoritmo de movimiento de la serpiente*/
{
serpiente x[I]= serpiente . [I] = serpiente . y[I-1]; /* Algoritmo de movimiento del cuerpo de la serpiente */
}
Switch(snake.direction) /* Algoritmo de movimiento de la cabeza de la serpiente para controlar Movimiento*/
{
caso 1: serpiente x[0]+= 10;
Caso 2: serpiente x[0]-. = 10; romper;
Caso 3: serpiente y[0]-= 10; /p>
}
for(I = 3; I & ltsnake . node; I++) /*Determinar si la cabeza choca con el cuerpo*/
{ p >
if(serpiente. x[I]= = serpiente. x[0]& & ampsnake.y[i]==serpiente.y[0])
{
juego terminado();
serpiente.
vida = 1;
Romper;
}
}
/*Aquí se explica cómo juzgar si se ha topado con una pared* /
if(serpiente. x[0]<55 | | serpiente. x[0]>595 | | serpiente. y[0]<55 | ;455)
{
juego terminado();
vida de serpiente = 1;
}
If(snake.life== 1) /*Salir del ciclo si mueres*/
Romper;
if(snake . x[0]= = comida . x & amp ;& ampSnake.y[0 ]==food.y) /*Determinar si la serpiente ha comido comida*/
{
set color(0);
Rectangle (food. x, comida.y, comida.x+10, comida. y-10); /*Limpia la comida con negro después de comer*/
serpiente ]=-20; node]=-20; /*Ahora oculta la parte agregada*/
snake .++;
comida yes = 1;
Puntuación += 10. ;
PrScore();
}
establecer color(4);/*cada vez Limpie la parte posterior del cuerpo después del ejercicio */
for(I = 0; i<snake.node;i++)
Rectangle(snake.x[i], serpiente.y[i] , serpiente.x[i]+10, serpiente. y[I]-10);
Retraso (velocidad del juego);
Retraso (ch);
establecer color(0);
Rectángulo (snake.x[snake.nodo-1], serpiente.y[snake.nodo-1], serpiente.x[snake.nodo-1]+10, serpiente. y[serpiente. nodo-1]- 10);
}
if(snake.life==1)
Romper;
p>clave = clave BIOS( 0); /*Botón Aceptar*/
if(key==ESC)
Pausa;
Otros
if(key) == ¡ARRIBA&& serpiente, dirección! =4)/*Determinar si se debe cambiar de dirección*/
snake .direction = 3
Otros
if(key = = DERECHA & amp; & amp Serpiente, dirección =2)
serpiente dirección = 1;
Otros
if(key = = IZQUIERDA & & Serpiente, dirección! = 1)
dirección serpiente = 2;
Otro
if(clave = = ABAJO & amp; & amp serpiente, dirección! = 3)
p>dirección serpiente = 4;
}
}
Juego terminado no válido (no válido)
{< / p>
borrar dispositivo();
setcolor(rojo);
settextstyle(0, 0, 4);
outtextxy(200, 200); , "Se acabó el juego");
getch();
>}
PrScore no válido(no válido)
{
char str[10];
setfillstyle(SOLID_FILL, amarillo);
Barra(50, 15, 220, 35);
establecer color(6);
settextstyle(0, 0, 2);
sprintf(str, " scord:%d ", puntuación);
outtextxy(55, 20, str);
}
Cierre no válido; (No válido)
{
getch();
closegraph()
}