#include lt;stdio.hgt;
#include lt;graphics.hgt;
#include lt;stdlib.hgt;
#include lt; dos.hgt; /*Funciones de biblioteca referenciadas*/
#define IZQUIERDA 0x4b00
#define DERECHA 0x4d00
#define ABAJO 0x5000
#define UP 0x4800
#define ESC 0x011b/*Nombre de clave de definición de macro*/
#define N 200
int i , clave;
int nivel; /*nivel de juego*/
int puntuación=0; /*puntuación*/
int velocidad de juego; */
struct Food
{
int x; /*abscisa de alimentos*/
int y;/* La vertical coordenada de comida*/
int yes; /*Variable para determinar si la comida debe aparecer*/
}comida /*Estructura de comida*/
struct; Serpiente
{
int x[N];
int y[N];
int node;/* El número de segmentos de la serpiente*/
int dirección; /*La dirección en que se mueve la serpiente*/
int vida /* La vida de la serpiente, 0 viva, 1 muerta*/
}snake;/*estructura de la serpiente*/
void Choicelevel(void);/*seleccionar nivel de juego*/
void Init(void);/ *Controlador de gráficos*/
void Close(void);*Fin del gráfico*/
void DRAW(void) /*Área de juego*/
void GameOver (void); /*Finalizar el juego*/
void GamePlay(void);*El proceso específico de jugar el juego*/
void PrScore(void); /*Emitir la puntuación*/
/*Función principal*/
void main(void)
{
Init() ; /*Controlador de gráficos*/
Choicelevel() /*Elige el nivel del juego*/
DRAW() /*Área de juego*/
GamePlay(); /*Jugar el juego Proceso específico*/
Cerrar();/*Fin de gráficos*/
}
/*Controlador de gráficos* /
void Init(void)
{
int gd=DETECT,gm;
initgraph(amp;gd,amp; gm,"\\turboc2"); /*Inicializar el sistema gráfico*/
cleardevice() /*Borrar la interfaz gráfica*/
}
/*Selecciona el nivel del juego*/
void Choicelevle(void)
{char name[20];
setcolor(YELLOW);
settextstyle(0, 0, 6);
p>
outtextxy(150, 150, "Serpiente");
setcolor(VERDE
settextstyle(0, 0, 1); >outtextxy(200, 250, "por favor ingrese su nombre en inglés:");
outtextxy(200, 270, "Elección de nivel del 1 al 9."); (300, 320, "nombre: yangzilong"); /*Nombre del productor*/
outtextxy (300, 350, "número: 0902060226"); p>outtextxy(300, 380, "clase: informática 0602"); /*Clase de productor*/
getch();
printf("por favor ingrese su nombre: " );
gets(nombre);
printf("por favor, elija nivel:");
scanf("d",amp; nivel);
gamespeed=100000-400*nivel-300*nivel*nivel;
if(levelgt;9||levellt;1)
{cleardevice (); /*Borrar la interfaz gráfica*/
setcolor(YELLOW); /*Establecer el color de fuente*/
settextstyle(0, 0, 2); */
outtextxy(150, 200, "error de entrada de nivel"); /*Mostrar texto*/
getch();
level=1;
}
}
void DRAW(void)
{cleardevice() /*Borrar pantalla*/
setcolor(2);
setlinestyle(SOLID_LINE, 0, THICK_WIDTH); /*Establecer estilo de línea*/
rectangle(45, 45, 465, 325); /p>
}
/*El proceso específico de jugar*/
void GamePlay(void)
{setcolor(5);
setlinestyle(SOLID_LINE, 0, THICK_WIDTH); /*Establecer estilo de línea*/
randomize(); /*Generador de números aleatorios*/
comida. yes= 1; /*1 significa que es necesario que aparezcan nuevos alimentos, 0 significa que los alimentos ya existen*/
snake.life=0; 1;/ *Dirección a la derecha*/
snake.x[0]=320; Snake.y[0]=240; /*Cabeza de serpiente*/
serpiente. x[1]= 330; Snake.y[1]=240; /*La posición del segundo nodo de la serpiente*/
snake.node=3; /*Número de nodos*/
PrScore() ;/*Puntuación de salida*/
while(1)/*Puedes jugar el juego repetidamente y presionar la tecla ESC para finalizar*/
{
w
hile(!kbhit())/*La serpiente mueve su cuerpo por sí sola sin presionar un botón*/
{
if(food.yes==1)/*necesita aparece comida nueva*/
{
food.x=rand()360 70;
food.y=rand()250 60;
while(food.x10!=0)/*Después de que la comida aparece aleatoriamente, la comida debe estar dentro de toda la cuadrícula para que la serpiente pueda comerla*/
food.x;
while(food.y10!=0)
food.y;
food.yes=0; /*Hay comida en la pantalla*/
}
if(food.yes==0)/*Si hay comida en la pantalla, se mostrará*/
{
setcolor(VERDE );
rectangle(food.x, food.y, food.x 10, food.y-10);
}
for(i= serpiente.node-1;igt;0;i--)/*Cada eslabón de la serpiente avanza*/
{
snake.x [i]=serpiente x[i-1];
serpiente.y[i]=serpiente.y[i-1];
}
/*1, 2, 3 y 4 representan las cuatro direcciones: derecha, izquierda, arriba y abajo. Utilice este control para mover la cabeza de la serpiente*/
switch(snake.direction)
.{
caso 1: serpiente.x[0] =10; romper;
caso 2: serpiente.x[0]-=10; >
caso 3: serpiente.y[0]-=10;
caso 4: serpiente.y[0] =10; p>
for(i= 3; ilt; Snake.node; i )/*Comienza desde el cuarto segmento de la serpiente para determinar si te golpeó, porque la cabeza de la serpiente tiene dos segmentos y es imposible girar. alrededor del tercer segmento*/
{
if(snake.x[i]==snake.x[0]amp;amp;snake.y[i]==snake .y[0])
{
GameOver(); /*Falla de visualización*/
snake.life=1 /*Muerte de serpiente*/
romper;
}
}
/*Si la cabeza de la serpiente toca la pared, la cabeza de la serpiente saldrá de la pared opuesta*/
if(snake.x[0]lt; 50 )
{snake.x[0]=450 /*Si la cabeza de serpiente cruza el borde izquierdo; , ingrese desde el borde derecho*/
snake.y[0]=snake.y [0] /*La coordenada vertical permanece sin cambios*/
for(i=snake .node-1;igt;0;i--)
{snake.x[i ]=snake.x[i-1];
snake.y[i] =snake.y[i-1]; /*Los otros segmentos de la serpiente avanzan hacia adelante*/
}
{
setfillstyle(SOLID_FILL, 0 /*Establece el modo y el color de relleno, 0 significa negro*/
bar(50, 55, 455, 315 /*bar es una función que representa el rango de relleno*/
}
}
e
lse
if(snake.x[0]gt; 450)
{snake.x[0]=50; /*Si la cabeza de la serpiente cruza el límite derecho, la serpiente la cabeza comienza desde el límite izquierdo Enter*/
snake.y[0]=snake.y[0] /*La coordenada vertical permanece sin cambios*/
for(i= serpiente.node-1;igt ;0;i--)
{snake.x[i]=snake.x[i-1];
snake.y[i ]=snake.y[i -1]; /*Avanzar las otras secciones de la serpiente hacia adelante*/
}
{
setfillstyle(SOLID_FILL, 0); /*Establecer modo y color de relleno, 0 significa negro*/
bar(50, 55, 455, 315); /*bar es una función que representa el rango de relleno*/ p>
}
}
else
if(snake.y[0]lt; 60)
{serpiente .y[0]=320;/ *Si la cabeza de serpiente cruza el límite superior, ingrese desde el límite inferior*/
snake.x[0]=snake.x[0]; la abscisa permanece sin cambios*/
for(i=snake.node-1;igt;0;i--)
{snake.x[i]=snake.x[i -1];
snake .y[i]=snake.y[i-1]; /*Los otros segmentos de la serpiente avanzan*/
}
{
setfillstyle(SOLID_FILL, 0); /*Establece el modo y el color de relleno, 0 significa negro*/
bar(50, 55, 455, 315); /*bar es una función que representa el rango de llenado*/
}
}
else
if(snake.y [0]gt; 320)
{snake.y[0]=60; /*Si la cabeza de serpiente cruza el límite inferior, ingresa desde el límite superior*/
snake .x[0]=snake.x[0]; /*Abscisa sin cambios*/
for(i=snake.node-1;igt;0;i--)
{snake.x[i]=snake.x[i- 1];
snake.y[i]=snake.y[i-1] /*Los demás segmentos de la serpiente avanzan; */
}
{
setfillstyle(SOLID_FILL, 0); /*Establece el modo de relleno y el color, 0 significa negro*/
bar(50, 55, 455, 315); / *bar es una función que representa el rango de llenado*/
}
}
if(snake.life==1)/*Si la serpiente muere, salta del bucle interno, reinicia*/
romper;
if(snake.x[0]= =food.xamp;amp;snake.y[0]==food.y )/*Después de comer la comida*/
{
setcolor(0);/*Eliminar la comida en la pantalla*/
rectangle(food .x, food.y, food.x 10, food.y-10 /*Dibuja un rectángulo con el tipo y color de línea actual*/);
snake.x[snake.node]=-20 ;snake.y[snake.node]=-20;
/*Primero, coloque la nueva sección fuera de la vista y Tómelo desde el frente la próxima vez que haga un bucle.
La posición de una sección*/
snake.node; /*El cuerpo de la serpiente tiene una sección de largo*/
food.yes=1;/*Es necesario que aparezca nueva comida en la pantalla* /
score =10; /*Por cada trozo de comida consumido, la puntuación se acumulará en 10 puntos*/
if(score100==0) p>
{level; gamespeed=100000-400*level-300*level*level; /*Cada 10 alimentos ingeridos aumenta el nivel y acelera*/
PrScore(); nueva puntuación*/
setcolor(YELLOW); /*Establecer color de fuente*/
settextstyle(0, 0, 4) /*Establecer tipo de fuente*/
outtextxy(150, 200, "LEVEL UP"); /*mostrar texto*/
if(level==10)
{level=1, gamespeed=100000 -400*nivel-300* nivel*nivel;}
retraso(6000000);
retraso(6000000
retraso(6000000); p>
retraso(6000000);
retraso(6000000);
retraso(6000000);
retraso(6000000);
bar(50, 55, 455, 315); /*bar es una función que representa el rango lleno*/
}
PrScore() /*Emite el nuevo puntuación*/
}
setcolor(4); /*Dibujar una serpiente*/
for(i=0; ilt; serpiente.node; i )
rectángulo(serpiente.x[i], serpiente.y[i], serpiente.x[i] 10,
serpiente.y[i]-10); /p>
delay( gamespeed); /*Controlar la velocidad del juego*/
setcolor(0);
rectangle(snake.x[snake.node-1], serpiente.y[snake.nodo- 1],
snake.x[snake.nodo-1] 10, serpiente.y[snake.nodo-1]-10
} /*finalizar(! kbhit)*/ /*Retira la última sección de la serpiente con negro*/
if(snake.life==1)/*Si la serpiente muere, sal del bucle*/
break;
key=bioskey(0);/*Recibir clave*/
if(key==ESC)/*Presione ESC para salir*/ p>
break;
else
if(key==UPamp;amp;snake.direction!=4)
/*Determinar si moverse en la dirección opuesta */
snake.direction=3
else
if(key==RIGHTamp; amp; Snake.direction!=2 )
snake.direction=1
else
if(key==LEFTamp;amp;
; serpiente.dirección!=1)
serpiente.dirección=2;
else
if(key==DOWNamp;amp;snake.dirección!= 3)
snake.direction=4;
}/*end while(1)*/
}
/*Juego terminado */
void GameOver(void)
{
cleardevice(); /*Borrar pantalla*/
PrScore();
setcolor(RED); /*Establecer color de fuente*/
settextstyle(0, 0, 4); /*Establecer tipo de fuente*/
outtextxy); (200, 200, "JUEGO TERMINADO"); /*Mostrar texto*/
getch();
}
/*Salida de puntuaciones y niveles del juego. */
void PrScore(void)
{
char str1[20] /*Establecer matriz de caracteres*/
setfillstyle; (SOLID_FILL, 0);
bar(50, 15, 390, 35); /*Rellenar el cuadro rectangular*/
setcolor(6); * /
settextstyle(0, 0, 2); /*Establecer la posición de visualización de la matriz*/
sprintf(str1, "score d nivel d", puntuación, nivel); /* Mostrar contenido de la matriz*/
outtextxy(55, 20, str1
setcolor(YELLOW); /*Establecer color de fuente*/
settextstyle); (0 , 0, 2); /*Establecer tipo de fuente*/
outtextxy(250, 400, "EXIT=ESC "); /*Mostrar texto*/
}
void Close(void)
{
closegraph()
}