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.
#include
#incluir
#incluir
#incluir
#incluir
#incluir
#incluir p>
#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 ; p>
}
}
}
void Show() // Actualizar para mostrar el mapa
{ p>
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++) p>
{
for(j = 0; j < L; j++)
printf("%c", GameMap[i][j]); p>
printf ("\n");
}
}
printf("/n Pequeña serpiente C\n") ;
printf("Presiona cualquier tecla de flecha para iniciar el juego\n"
}
}
} p>
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>
{
{
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 ] = = '@';