#incluir
#incluir
#incluir
#incluir
#incluir
#define ancho 40
#defineHEIGH12
Dirección de enumeración {//dirección
Izquierda,
Derecha,
p>Arriba
Abajo
};
Estructura Alimento{//Alimento
Intx
Inty
};
{//Dibuja una serpiente.
intx
inty
structNode * next
};
Structsnake {//snake atributo du
intlenth//length
enumdirectiondir//direction
};
structFood *comida //comida
structSnake * serpiente//atributo de la serpiente
structNode*snode, * cola//cuerpo de la serpiente
intSPEECH = 200
int puntuación = 0;
ints mark = 0; //Registro de marca de comida
int times = 0;
int stop = 0;
voidInitfood (); //Producir comida
voidInitsnake(); //Construir serpiente
void eatfood(); //Mirar hacia adelante
voidAddnode(intx, inty) ); //Agrega el cuerpo de la serpiente
void display(struct node * shead); //Muestra la serpiente sentada en la marca del cuchillo.
void move(); //Movimiento similar a una serpiente
void draw(); //Dibujar una serpiente
void home page(); Página de inicio
voidkeybordhit(); //Monitorear las teclas del teclado
void addtail(); //Comer alimentos
Voidgotoxy(intx, inty)//Posición cursor.
{
COORDpos
Posición. x = x-1;
Posición.
y = y-1;
SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE), pos);
}
void ini Snake()//Construcción); Serpiente
{
inti
serpiente =(estructura serpiente *)malloc(tamañode(estructura serpiente));
cola =( nodo de estructura *)malloc(sizeof(struct node));
comida =(struct food *)malloc(sizeof(struct food));
Serpiente->lenth = 5 //Longitud inicial 5
Snake->dir = RIGHT//La dirección inicial de la cabeza de la serpiente es correcta
for(I = 2;I<= Snake- & gt;lenth; +2;I++)//Agregar 5 nodos
{
Addnode(i, 2);
}
} p>
voidinitfood()//Producir alimentos
{
structNode * p = snode
int mark = 1;
srand((unsigned) time(empty)); //Genera números aleatorios usando el tiempo como semilla.
while(1)
{
Comida-& gt; x = rand()%(WIDTH-2)+2 //Comida x coordenada;
Comida->y = rand()%(HEIGH-2)+2 //Comida y coordenada
And (p!=null)
{
if ((comida-> Si la comida se produce en la serpiente.
{//Regeneración de alimentos.
mark = 0; //Generación de alimentos no válida
Break
}
p = p-> p>
}
If(mark = = 1)//Si la comida no está en la serpiente, genera comida, de lo contrario, regenera la comida;
{
gotoxy(comida->10, comida->y);
printf("%c ", 3);
Rotura;
}
marca = 1;
p = snode
}
}
Voidmove()//move
{
structNode*q, * p = snode
if(snake- > dir = =right)
{
añadir nodo(p->x+1,p->y);
if ( smark==0 )
{
mientras(p->; siguiente!=null)
{
q = p ;
p = p-& gt;Siguiente;
}
q->;siguiente = NULL
Gratis(p );
}
}
if(serpiente-& gt; dirección == izquierda)
{
añadir nodo(p -& gt;x-1,p->y);
if (smark==0)
{
mientras (p->;Siguiente !=null)
{
q = p;
p = p-& gt;Siguiente;
}
q->; next = NULL
Gratis(p);
}
}
if(serpiente- >dir==UP)
{
añadir nodo(p->x,p->y-1) ;
Si (smark ==0)
{
mientras(p->; siguiente!=null)
{
q = p; /p>
p = p-& gt; siguiente
}
q->; siguiente = NULL
Gratis(p);
}
}
if(serpiente-& gt; Dirección = = Abajo)
p>
{
añadir nodo(p-& gt;x,p-& gt;y+1);
if (smark==0)
{
mientras(p->; siguiente!=null)
{
q = p;
p = p-& gt; /p>
}
q->; siguiente = NULL
Gratis(p);
}
}
}
VoidAddnode(intx, inty)//Agrega el cuerpo de la serpiente.
{
estructura nodo * nuevo nodo =(estructura nodo *)malloc(tamañode(estructura nodo));
estructuraNodo * p = snodo
Nuevo nodo -> next = snode
Nuevo nodo ->x = x
Nuevo nodo ->y = y
snodo = newnode//El nodo se agrega a la cabeza de la serpiente
if(x & lt; 2 | |
{
STOP = 1;
gotoxy(10, 19);
Printf("¡Golpea la pared, el juego ha terminado, presiona cualquier tecla para salir! \n "); //Falló
_ getch();
Libre(snode); //Liberar memoria
Libre(serpiente);
Salir(0);
}
Y (p!= null)//se golpea a sí mismo
{ p>
Si (p->next!=null)
Si ((p->x==x)&&(p->;y== y))
{
DETENER = 1; p>
gotoxy(10,19);
Printf("¡Golpéate, finaliza el juego, presiona cualquier tecla para salir! \n "); //Falló
_ getch();
Libre (snode); //Liberar memoria
free(snake);
Salir(0);
}
p = p-& gt; next;
}
}
void eatfood()//Comer comida
{
addtail();
Puntuación ++;
}
voidaddtail()//Agregar cola de serpiente
{
struct node * new node =(struct node * )malloc(sizeof(struct node));
structNode * p = snode
Cola-& gt; next = newnode
Nuevo nodo-& gt; x = 50
Nuevo nodo->y=20
Nuevo nodo->next=NULL //El nodo se agrega a la cabeza de la serpiente
tail = newnode//Nueva cola de serpiente
}
void Draw ()//Dibuja la serpiente
{
structNode * p = snode
inti, j;
Y (p! = vacío)
{
gotoxy(p->x,p->y);
printf("%c ", 2 );
Cola = p;
p = p-& gt;Siguiente;
}
if(s nodo- > x = = comida->
{
smark = 1;
comer comida(); //Agregar nodo
init comida(); comida
}
if (smark==0)
{
gotoxy(cola-& gt;x,cola-& gt; y); //El nodo de la cola no se comió antes de que se eliminara la comida.
printf("%c ",' '); //Si comes vegetales, no conoces el nodo de la cola.
}
Otro
{
Número de veces = 1
}
if((smark == 1)& & amp(times==1))
{
gotoxy(tail->x,tail->y ); // El nodo de la cola no se comió antes de que se eliminara la comida.
printf("%c ",' '); //Si comes vegetales, no conoces el nodo de la cola.
smark = 0;
}
gotoxy(5012);
Printf ("comida: %d, %d ", comida-> p>
gotoxy(50, 7);
Printf("velocidad: % d ", voz);
gotoxy(15, 14); p>
Printf("Presiona o para acelerar");
gotoxy(15,15);
Printf("Presiona P para reducir la velocidad"); p>
gotoxy(15, 16);
Printf("Presiona la barra espaciadora para pausar");
}
voidhidecursor()/ /Ocultar el cursor
{
CONSOLE_CURSOR_info CURSOR_info = {1,0}.
SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE), & ampcursor _ info);
}
void home page()//Dibujar la página de inicio);
p>
{
intx, y;
ocultar cursor(); //Ocultar el cursor
printf( "-\ n ");
printf(" | \ t \ t \ t | \ n ");
printf(" | \ t \ t \ t \ t | \ n ");
printf(" | \ t \ t \ t | \ n ");
printf(" | \ t \ t \ t \ t | \ n ");
printf(" | \ t \ t \ t | \ n ");
printf(" | \ t \ t \ t \ t | \ n ")
printf(" | \ t \ t \ t | \ n "
printf(" | \ t \ t \ t | \ n "); /p>
printf(" | \ t \ t \ t | \ n ");
printf(" | \ t \ t \ t \ t | \ n "); >
printf("-\ n ");
gotoxy(5, 13);
Printf("¡Haz clic en cualquier tecla para iniciar el juego! Según W.A.S.D. ") Dirección de control
_ getch();
init serpiente();
init comida()
gotoxy(5, 13);
printf(" ");
}
voidkeybordhit()//monitor teclado
{
charch
if(_kbhit())
{
ch = getch();
Cambiar (canal)
{
Case "w":
case ' w ':if(snake-& gt; Dir==DOWN)//Si la dirección original es hacia Abajo, la dirección inversa no es válida.
{
Romper
}
Otro
Serpiente-& gt;
Case "a":
case ' a ':if(snake-& gt; Dir==RIGHT)//Si la dirección original es correcta, pero la dirección inversa es inválido.
{
Descanso
}
Otro
Serpiente-> /p>
Caso:
case ' s ':if(snake-& gt;Dir==UP)//Si la dirección original es hacia arriba, la dirección inversa no es válida.
{
Descanso
}
Otro
Serpiente-& gt;
Case "d":
case ' d ':if(snake->;Dir==LEFT)//Si la dirección original es hacia la izquierda, pero la dirección inversa no es válida .
{
Descanso
}
Otro
Serpiente-& gt;
Caso "o":
Caso "o":
if(SPEECH>=150)//Acelerar.
{
Voice=Voice-50;
}
Pausa;
Caso "p":
Caso "p":
if(voice<=400)//Disminuir la velocidad
{
Voz=Voz+50 ;
}
Pausa;
caso ""://pausa
gotoxy(15,18);
Printf("El juego ha sido pausado, presiona cualquier tecla para reanudar el juego");
System("Pause & gtnul");
gotoxy(15, 18) ;
p>
printf(" ");
Pausa;
Predeterminado: pausa
}
}
}
int main(void)//Entrada de programa
{
Página de inicio();
Y (! Stop )
{
keybordhit(); //Monitorea las teclas del teclado
move(); //Cambios de coordenadas de Snake
draw(); //Redibujar la serpiente
Sleep(speech); //Suspender temporalmente el hilo
}
return0
}
Datos extendidos:
Notas:
1. El código convierte la información fuente en símbolos que son fáciles de comunicar o almacenar. La decodificación es un proceso de decodificación reductiva, que convierte los símbolos del código en una forma que el receptor pueda entender.
2. Una de las razones de la codificación es comunicarse en situaciones en las que es difícil alcanzar un lenguaje común (hablado o escrito). Por ejemplo, una bandera puede expresar un mensaje específico con marcas específicas, y otra persona situada a distancia puede interpretar las marcas para reproducir ese mensaje.