Red de conocimiento informático - Conocimiento informático - He completado un programa en lenguaje Taotie C con aproximadamente 300 líneas de código. Puedo tener una defensa para comprender el código cuando lo ejecuto.

He completado un programa en lenguaje Taotie C con aproximadamente 300 líneas de código. Puedo tener una defensa para comprender el código cuando lo ejecuto.

//****** Recordatorio amistoso: si desea acelerar, modifique los parámetros en la pequeña función _sleep(500)*****

#include

#incluir

#incluir

#incluir

#incluir

#incluir

#incluir

#include

const int H = 8; //Altura del mapa

const int L = 16 //Longitud del mapa

char GameMap [H][L]; //Mapa del juego

int key; //Guardar clave

int sum = 1, over = 0; , el juego ha terminado (Cómete a ti mismo o golpea una pared)

int dx[4] = {0, 0, -1, 1}

struct Snake

;

struct Snake //tipo de datos para cada nodo de la serpiente

{

int x, y; //posición izquierda

int now / /Indica la dirección del nodo actual, 0,1,2,3 representan respectivamente izquierda, derecha, arriba y abajo

}Snake[H*L]

const char Shead; = '@'; //Parte de la cabeza de la serpiente

const char Sbody = '#'; //Cuerpo de la serpiente

const char Sfood = '*'; >

const char Snode = '.' ; //'.' marca el mapa como vacío

void Initial() //Inicializa el mapa

void Create_Food(); ; //Generar comida aleatoriamente en el mapa

void Show(); //Actualizar el mapa

void Button() //Quitar el botón y determinar la dirección

void Move(); //Movimiento de la serpiente

void Check_Border(); //Comprueba si la cabeza de la serpiente está fuera de límites

void Check_Head(int x, int y); //Comprueba la posición de la cabeza de la serpiente después del movimiento

int main()

Esta es la primera vez que se mueve la cabeza de la serpiente.

p>{

Inicial();

Mostrar();

devuelve 0; void Inicial() //Inicializa el mapa

{

int i, j

int hx, hy

system( " title Greedy Snake"); //El título de la consola

memset(GameMap, '.' , sizeof(GameMap)); //Inicializa el mapa para que esté todo vacío'.

system("cls");

srand(time(0)); //aleatorizar semillas

hx = rand()%H; //generar cabezas de serpiente

hy = rand()%L;

GameMap[hx][hy] = Cabeza

Serpiente[0].x = hx; ]. y = hy;

Snake[0].now = -1;

Create_Food() // Genera comida aleatoriamente

for(i = 0; i < H; i++) // Visualización del mapa

{

for (j = 0; j < L; j++)

printf("% c" , GameMap[i][j]);

printf("\n");

}

printf("\n Tiny C Glotonería \n ");

printf("Presiona cualquier tecla de flecha para iniciar el juego\n");

getch(); //primero acepta una pulsación de tecla para hacer que la serpiente comience yendo en esa dirección

Button(); //saca la pulsación de tecla y determina la dirección

}

void void.

void Create_Food() // Genera comida aleatoriamente en el mapa

{

int fx, fy

while(1)

{

fx = rand()%H

fy = rand()%L

if(GameMap[fx][fy] == ' . ') // No puede aparecer en la posición que ocupa la serpiente

{

GameMap[fx][fy] = Sfood

break

}

}

}

void Show() // Actualizar para mostrar el mapa

{

int i, j;

while(1)

{

_sleep(500); // Retraso de medio segundo (1000); es 1 segundo), es decir

Button(); //primero juzga que el botón se está moviendo

Move()

if(over)

{

printf("\n** juego terminado

**\n");

printf(" >_<\n");

getchar();

romper;

}

system ("cls"); // Borra el mapa, luego muestra el mapa con un rugido de actualización

for(i = 0; i < H; i++)

{

for(j = 0; j < L; j++)

printf("%c", GameMap[i][j]);

printf ("\n");

}

}

printf("/n Pequeña serpiente C\n") ;

printf("Presiona cualquier tecla de flecha para iniciar el juego\n"

}

}

}

void Button() //Quita el botón y determina la dirección

{

if(kbhit() != 0) //Comprueba si hay un teclado actualmente entrada, si es así Devuelve un valor distinto de cero; de lo contrario, devuelve 0

{

while(kbhit() != 0) // Puede haber varias teclas, presiónelas todas, tomando la última clave como principal

key = getch() // Obten la clave de la consola y guárdala en la clave

switch(key)

{ //izquierda

caso 75: Serpiente[0].ahora = 0;

descanso

//derecha

caso 77: Serpiente[0]. ahora = 1

romper

caso 72:

caso 72: Serpiente[0].ahora = 2

; romper

caso 80: Serpiente[0].now = 3;

}

}

}

}

void Move() //Movimiento de la serpiente

{

{

p>

int i, x, y;

int t = suma //Guardar la longitud; de la serpiente actual

//Registra la posición de la cabeza de la serpiente actual y configúrala en Vacío, la serpiente se mueve primero

x = Snake[0].x; y = Snake [0].y; GameMap[x][y] = '.' ;

Serpiente [0].x = Serpiente[0].x + dx[ Serpiente[0].now ]; /p>

Snake[0].y = Snake[0].y + dy[ Snake[0] .now ]

Check_Border() // ¿Está la cabeza de Snake fuera de los límites? /p>

Check_Head(x, y); //la posición de la cabeza de la serpiente después de que se ha movido, con los siguientes parámetros: la posición inicial de la cabeza

if(sum == t ) /

/la serpiente no ha comido, es decir // la cabeza de la serpiente se ha movido

if(sum == t) //la cabeza de la serpiente no ha comido, es decir // la cabeza de la serpiente se ha movido, serpiente Ya movido

for(i = 1; i < sum; i++) //para_avanzar desde el nodo de la cola de la serpiente, el nodo anterior se usa como referencia

{

if(i == 1) //El nodo de cola está vacío antes de moverse

GameMap[ Snake[i].x ][ Snake[i].y ] = '.';

If(i == 1) //El nodo de cola está vacío antes de moverse

GameMap[ Snake[i].x ][ Snake[i] ].y ] = '.'. = '.';

if(i == sum-1) // El nodo del cuerpo de la serpiente detrás de la cabeza de la serpiente requiere un tratamiento especial

{

Serpiente [i].x = x;

Serpiente[i].y = y

Serpiente[i].ahora = Serpiente[0].ahora; p> }

else // otro cuerpo de serpiente, es decir, ir a la posición anterior del cuerpo de la serpiente

{

Serpiente[i].x = Serpiente[i+1] ].x;

Serpiente[i].y = Serpiente[i+1].y

Serpiente[i].ahora = Serpiente[i+1].ahora;

}

Otros cuerpos de serpiente en GameMap, es decir, vuelven a la posición del cuerpo de serpiente anterior.

GameMap[ Snake[i].x ][ Snake[i].y ].= '#' // Se establecerá en '#' Snake después de moverse

}

}

}

void Check_Border() // Comprobar si Snake[0].x = Snake[0].y // Comprobar si Snake[0].x = Snake[0].y; [ 0].x = Serpiente[i+1].now; // Comprobar si Serpiente[i+1].y = Serpiente[i+1].ahora // If (Snake[0].x 0 || Serpiente [0].x >= H

|| Serpiente[0].y 0 || Serpiente[0].y >= L)

over = 1; p >

}

void Check_Head(int x, int y) //Comprueba la posición de la cabeza de la serpiente después de moverse

{

if( GameMap[ Snake [0].x ][ Snake[0].y ] == '.')//está vacío

GameMap[ Snake[0].x ][ Snake[0].y ] = = '@';