Red de conocimiento informático - Conocimiento sistemático - Buscando el código del lenguaje Snake C

Buscando el código del lenguaje Snake C

#definir N 200

#include lt;graphics.hgt;

#include lt;stdlib.hgt;

#include lt;dos.hgt;

#define IZQUIERDA 0x4b00

#define DERECHA 0x4d00

#define ABAJO 0x5000

#define ARRIBA 0x4800

#define ESC 0x011b

int i, clave

int puntuación=0 /*puntuación*/

int gamespeed= 50000; /*Ajustar la velocidad del juego*/

struct Food

{

int x /*La abscisa de la comida*/

int y;/*La coordenada vertical de la comida*/

int yes;/*Variable para determinar si la comida debe aparecer*/

}comida;/*Estructura de la comida */

estructura Serpiente

{

int x[N]

int y[N]; p> int node; /*El número de nodos de la serpiente*/

int direction;/*La dirección del movimiento de la serpiente*/

int life;/*El vida de la serpiente, 0 vivo, 1 Muerte*/

}serpiente;

void Init(void);/*Controlador de gráficos*/

void Close (void);/*Fin del gráfico* /

void DrawK(void); /*Pantalla de inicio*/

void GameOver(void); /*Finalizar juego*/

void GamePlay(void ); /*El proceso específico de jugar el juego*/

void PrScore(void); Función principal*/

void main(void)

{

Init() /*Controlador de gráficos*/

DrawK( ); /*Pantalla de inicio*/

GamePlay();/*El proceso específico de jugar*/

Cerrar();/*Fin de los gráficos*/

}

/*Controlador de gráficos*/

void Init(void)

{

int gd=DETECT , gm;

initgraph(amp; gd, amp; gm, "c:\\tc");

cleardevice()

}

/*Inicia la pantalla, la coordenada de la esquina superior izquierda es (50, 40), la pared con las coordenadas de la esquina inferior derecha (610, 460)*/

void DrawK( vacío)

{

/*setbkcolor(LIGHTGREEN) ;*/

setcolor(11);

setlinestyle(SOLID_LINE, 0 , THICK_WIDTH); /*Establecer estilo de línea*/

for(i=50 ;ilt;=600;i =10)/*Dibujar una valla*/

{

>

rectángulo(i, 40, i 10, 49); /*borde superior*/

rectángulo(i, 451, i 10, 460); /*borde inferior*/

}

for(i=40; ilt; =450; i =10)

{

rectángulo(50, i, 59, i 10 ); /*izquierda*/

rectángulo(601, i, 610, i 10); /*derecha*/

}

}

/*El proceso específico de jugar*/

void GamePlay(void)

{

randomize() /*; Generador de números aleatorios* /

food.yes=1; /*1 significa que es necesario que aparezcan nuevos alimentos, 0 significa que los alimentos ya existen*/

Snake.life=0; vivo*/

serpiente.dirección=1; /*dirección a la derecha*/

serpiente.x[0]=100; *cabeza de serpiente*/

serpiente.x[1]=110; serpiente.y[1]=100;

serpiente.node=2 /*número de nodos*/

PrScore (); /*Puntuación de salida*/

while(1)/*Puedes jugar el juego repetidamente y presionar la tecla ESC para finalizar*/

{

while( !kbhit())/*Sin presionar un botón, la serpiente mueve su cuerpo por sí sola*/

{

if( food.yes==1)/*Es necesario que aparezcan nuevos alimentos */

{

food.x=rand()400

food. y=rand()350 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*/

comida.x;

while(food.y10!=0)

comida.y

comida.yes=0; /*Hay comida en la pantalla*/

}

if(food.yes==0)/*Si hay comida en la pantalla, se mostrará*/

{

setcolor(VERDE);

rectángulo(comida.x, comida.y, comida.x 10, comida.y-10); /p>

}

for(i=snake. node-1;igt;0;i--)/*Cada eslabón de la serpiente avanza, que es el algoritmo clave de los codiciosos serpiente*/

{

serpiente x[i]=serpiente.x[i-1];

serpiente.y[i]=serpiente. y[i-1];

}

/*1, 2, 3, 4 representan las cuatro direcciones: derecha, izquierda, arriba y abajo. Utilice este criterio para mover el. cabeza de serpiente*/

cambiar(snake.direction)

{

caso 1: serpiente.x[0] =10;

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)/*Empieza desde la cuarta sección de la serpiente para determinar si te golpeó, porque la cabeza de la serpiente tiene dos secciones y es imposible girarla. alrededor de la tercera sección*/

{

if(snake.x[i]==snake.x[0]amp;amp;snake.y[i]== serpiente.y[0])

{

GameOver();/*Error de visualización*/

serpiente.life=1;

romper;

}

}

if(snake.x[0]lt; 55||snake.x[0]gt; 595| |snake.y[0] lt;55||

Snake.y[0]gt;455)/*Si la serpiente chocó contra la pared*/

{

GameOver(); /*Este juego ha terminado*/

Snake.life=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*/

break;

if (snake.x[0]==food.xamp ;amp; Snake.y[0]==food.y)/*Después de comer*/

{

setcolor (0);/*Cambiar la comida en la pantalla Quitar cosas*/

rectangle(food.x, food.y, food.x 10, food.y-10);

Snake.x[snake.node]=- 20; Snake.y[snake.node]=-20;

/*Coloque la nueva sección en una posición invisible primero y tome la posición de la sección anterior en el siguiente bucle*/

Snake.node; /*El cuerpo de la serpiente tiene una longitud de una sección*/

food.yes=1; aparecer en la pantalla*/

puntuación =10

PrScore() /*Salir nueva puntuación*/

}

setcolor(4); /*Dibuja una serpiente*/

for(i=0;ilt;snake.node;i)

rectángulo(snake.x[i], serpiente .y[i], serpiente.x[i] 10,

serpiente.y[i]-10

retraso(velocidad del juego); setcolor(0); /*Eliminar la última parte de la serpiente con Sección negra*/

rectángulo(snak)

e.x[snake.node-1], serpiente.y[snake.node-1],

serpiente.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*/

break;

key=bioskey(0);/*recibir clave*/

if(key==ESC)/*presione ESC para salir* /

break;

else

if(key==UPamp; amp; Snake.direction!=4)

/* Juzgue si debe ir en la dirección opuesta Muévase en la dirección*/

Snake.direction=3;

else

if(key==RIGHT&amp ;snake.direction!=2)

serpiente.dirección=1;

else

if(key==LEFTamp;amp; serpiente.dirección!= 1)

serpiente.dirección=2;

else

if(key==DOWNamp;amp; serpiente.dirección!=3)

serpiente.direction=4;

}/*end while(1)*/

}

/*Juego terminado*/

void GameOver(void)

{

cleardevice();

PrScore()

setcolor(RED);

settextstyle( 0, 0, 4);

outtextxy(200, 200, "JUEGO TERMINADO");

getch();

}

/*Puntuación de salida*/

void PrScore(void)

{

char str[10];

setfillstyle( SOLID_FILL, AMARILLO);

bar(50, 15, 220, 35);

setcolor(6); > settextstyle(0, 0, 2) ;

sprintf(str, "puntuación: d", puntuación

outtextxy(55, 20, str);

}

/*Fin del gráfico*/

void Close(void)

{

getch();

cerrar gráfico();

}