papel de serpiente en lenguaje c
#incluye
#incluye
#incluye
#incluye
#incluye
const int H = 8; //La altura del mapa
const int L = 16; //La longitud del mapa
char game map[H][L ]; // Mapa del juego
int key; //Presiona el botón para guardar.
int sum = 1, over = 0; // La longitud de la serpiente, el juego ha terminado (cómete o golpea la pared)
int dx[4] = { 0, 0, - 1, 1 }; // Direcciones izquierda, derecha, arriba y abajo
int dy[4] = {-1, 1, 0, 0};
struct Snake// Serpentea el tipo de datos de cada nodo.
{
int x, y; //Posición izquierda
int ahora//Guarda la dirección del nodo actual. 0, 1, 2 y 3 son izquierda, derecha, arriba y abajo respectivamente.
} Serpiente[H * L];
const char Shead = ' @//Cabeza de serpiente
const char Sbody = ' #//Cuerpo de serpiente
p>const char Sfood = ' *//Comida
const char Snode = ' . // '.' está marcado como vacío en el mapa.
void Initial(); //Inicialización del mapeo
void Create _ Food(); // Produce comida aleatoriamente en el mapa
void Show(); ; //Actualiza el mapa
void Button(); //Saca la llave y determina la dirección.
void Move(); //El movimiento de la serpiente
void Check _ Border() //Comprueba si la cabeza de la serpiente cruza la línea.
void Check_Head(int x, int y); //Comprueba la posición de la cabeza de la serpiente después de moverse.
int main()
{
inicial();
mostrar()
Devuelve 0 ;
}
Void Initial() //Inicialización del mapeo
{
int i, j;
int hx, hy;
System("Tisnake"); //El título de la consola
memset(mapa del juego, '.', sizeof(mapa del juego)); //La asignación de inicialización está vacía "."
System ("cls");
srand(time(0)); //Semilla aleatoria
hx = rand() H; //Generar pez negro
hy = rand() L;
GameMap[hx][hy]= Shead;
serpiente[0]. x = hx serpiente[0]. y = hy
serpiente[0].
Now = -1;
create_Food(); //Producir alimentos a voluntad
for(I = 0;I lth;I) //Visualización del mapa
{
for(j = 0; j ltl; j )
printf("c ", GameMap[I][j]);
printf ("\n");
}
printf("\nPequeña serpiente en lenguaje C\n");
Printf("Presione cualquier tecla de dirección para inicia el juego\n ");
getch(); //Primero acepta una clave para permitir que la serpiente comience a caminar en esta dirección.
button(); //Saca la llave y determina la dirección.
}
Void Create_Food() // Genera comida aleatoriamente en el mapa.
{
int fx, fy
mientras(1)
{
FX = rand( ) H;
fy = rand() L;
If(game map [FX] [FY] = ' . ') // No puede aparecer en la posición ocupada por la serpiente .
{
GameMap[FX][fy]= s comida;
Descanso
}
}
}
Void Show() //Actualiza el mapa de visualización.
{
int i, j;
mientras(1)
{
_sleep(500 ) ; // Retraso de medio segundo (1000 es 1 s), es decir, el mapa se actualiza cada medio segundo.
button(); //Primero determina si la tecla se está moviendo.
move();
If(over) //Si comes o golpeas la pared, el juego termina.
{
Printf("\n**Juego terminado* *\n");
printf("gt;_lt\n"); /p>
getchar();
Break;
}
System("cls"); //Borra el mapa y luego actualiza el mostrar Después del mapa.
for(I = 0; i lth; i )
{
for(j = 0; j ltl; j )
printf("c ", GameMap[I][j]);
printf(" \ n ");
}
printf(" \ nPequeña serpiente en lenguaje C\ n ");
Printf("Presiona cualquier tecla de dirección para iniciar el juego\ n ");
}
} p >
Void Button() //Saca la llave y determina la dirección.
{
if(kbhit()!= 0) //Comprueba si actualmente hay entrada de teclado; de ser así, devuelve un valor distinto de cero; de lo contrario, devuelve 0.
{
while(kbhit()!= 0) //Puede haber varias claves, debes tomarlas todas, tomando la última primero.
key = getch(); //Obtiene la clave de la consola y guárdala en key.
Interruptor (tecla)
{//Lado izquierdo
Caso 75: Serpiente[0]. ahora = 0;
Romper;
//right
Caso 77: serpiente[0].
ahora = 1;
Romper;
//arriba
Caso 72: serpiente[0]. ahora = 2;
Romper;
//Abajo
Caso 80: serpiente[0]. Ahora = 3;
Descanso;
}
}
}
Movimiento vacío() // Movimiento de la serpiente
{
int i, x, y;
int t = sum//Guarda la longitud de la serpiente actual.
//Registra la posición actual de la cabeza de serpiente, configurada en nula, la cabeza de serpiente se mueve primero.
x = Serpiente[0]. x;y = Serpiente[0]. y; mapa del juego[x][y] = ' . x = Serpiente[0]. x dx[Serpiente[0]. ahora];
Serpiente[0]. y = Serpiente[0]. y dy[Serpiente[0]. ahora];
Check_Border(). // ¿La cabeza de serpiente ha cruzado la línea?
Check_Head(x, y); //La posición del pez negro después del movimiento. Los parámetros son: la posición inicial de la cabeza de serpiente.
If(sum == t) //La serpiente se mueve sin comida.
for(I = 1;i lt sum;I) //Para avanzar desde un nodo que terminó en un anticlímax, use el nodo anterior como referencia.
{
If(i == 1) //Mover después de establecer el nodo de cola en nulo.
Mapa del juego [serpiente[i]. x ][ Serpiente[i]. y ] = ' . ';
If(i == sum-1) // Es el nodo de serpiente detrás de la cabeza de serpiente, que ha sido procesado especialmente.
{
Serpiente [yo]. x = x
Serpiente[i]. y = y
serpiente[i]. ahora = Serpiente[0]. Ahora;
}
Else //Otras serpientes van a la posición anterior de la serpiente.
{
Serpiente [yo]. x = Serpiente[i 1]. x;
Serpiente [I]. y = Serpiente[i 1]. y;
Serpiente [I]. ahora = serpiente[i 1]. Ahora;
}
Mapa del juego [serpiente[i]. x ][ Serpiente[i]. y]= ' # '; //Se debe establecer en ' # 'cuerpo de serpiente después del movimiento.
}
}
Void Check_Border() //Comprueba si la cabeza de serpiente ha cruzado la línea.
{
if(Serpiente[0].x 0 ||Serpiente[0].x gt= H
|| Serpiente[0].y 0 || serpiente[0].y gt= L)
over = 1;
}
Void Check_Head(int x, int y) // Verifique la posición de la cabeza de serpiente después del movimiento.
{
If(mapa del juego [snake [0].x] [snake [0].y] = = ' . ')//está vacío.
Mapa del juego [Serpiente[0]. x ][ Serpiente[0]. y]= ' @ ';
Otro
Si (mapa del juego [snake [0].x] [snake [0].y]= ' * ')//Sí alimento.
{
Mapa del juego [Serpiente[0]. x ][ Serpiente[0].
y]= ' @ ';
Serpiente [suma]. x = x//La serpiente recién agregada es la que está detrás de la cabeza de la serpiente.
Serpiente [suma]. y = y
Serpiente[suma]. ahora = Serpiente[0]. Ahora;
El mapa del juego [Serpiente[y]. x ][serpiente[y]. y]= ' # ';
sum ;
create _ Food(); // Una vez terminada la comida, pronto se producirá otra comida.
}
Otro
más de = 1;
}