¡Te ruego un pequeño programa escrito en lenguaje C para tu defensa! ! ! ! ! ! #! @###! ! !
#includelt;reg52.hgt;
#includelt;intrins.hgt;
//#includelt;math.hgt;
#includelt;stdlib.hgt;
#includelt;lcd12864.hgt;
bit arriba = P1^0; //arriba
bit abajo = P1 ^1; //Abajo
bit izquierdo = P1^2; //Izquierdo
bit derecho = P1^3; //Derecho
bit reset = P1^4; //Teclas de función
#define Snake_max_body 22
#define Key_Up 1
#define Key_Down 4
#define Key_Left 2
#define Key_Right 3
uchar Key_V_temp=0; //Último valor clave
uchar Key_Value;
código const uchar Failure[]={"Desafortunadamente, perdiste"};
const uchar code maker[]={"Diseñador: Miembro de la Machinery Association"};
const uchar code huiz []={"Presidente: Fang Jitong"};
const uchar code guanggao[]={"La Asociación de Robots le da la bienvenida"};
const uchar code t[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF , 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF , 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF
F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0 , 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xCE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF , 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF , 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF , 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, p> p>
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF , 0xFF , 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xCE, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0E, 0xE0, 0x00, 0x07, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0x9F, 0xFF, 0
xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xCF, 0xFE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xCF , 0xFE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xCF, 0xFE, 0xFF, 0xFF, 0xE7, 0x3F,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xCF, 0xFE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xCF, 0xFE, 0xFF, 0xFF, 0xE7, 0x3F, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xCF, 0xFE, 0xFF , 0xFF, 0xE7, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xC0, 0x0E, 0xFF, 0xFF, 0xE7, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0, 0x00 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF ,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF , 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF
,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF , 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFD, 0xE1, 0xF1, 0xF8, 0xFF, 0x9F, 0xFF, 0x7F, 0xF8, 0x00, 0xFD, 0xFB , 0xFF, 0x8F, 0xFF,
0xFF, 0xFD, 0xED, 0xF5, 0xBA, 0xFF, 0xBF, 0xFF, 0xBF, 0xFB, 0xDE, 0xFD, 0xF3, 0xFF, 0x77, 0xFF,
0xFF, 0xE0, 0x2D, 0xF1, 0xA8, 0xFF, 0x1F, 0xF8, 0x00, 0xF8, 0x00, 0xF0, 0x40, 0xFE, 0xFB, 0xFF,
0xFF, 0xF8, 0xED, 0xff, 0xb7, 0xff, 0x1f, 0xfb, 0xff, 0xfb, 0xDe, 0xfd, 0xf6, 0xf9, 0x04, 0xff,
0xff, 0xf5, 0x6d, 0xfc, 0x03, 0xfe, 0x4f, 0xfa , 0xF8 , 0x00, 0xFD, 0x36, 0x7F, 0xFF, 0xFF,
0xFF, 0xED, 0xAD, 0xFF, 0x9F, 0xFC, 0xE7, 0xFB, 0x6E, 0xFB, 0xDE, 0xFD, 0x6E, 0xBC, 0x00, 0xFF,
0xFF, 0xFD, 0xED, 0xF1, 0x28, 0xF9, 0xF3, 0xFB, 0x6C, 0xFB, 0xDE, 0xFC, 0xDE, 0xBF, 0x7F, 0xFF,
0xFF, 0xFD, 0xDD, 0x74, 0x62, 0xF3, 0xF9, 0xFB, 0xFF, 0xFB, 0xDA, 0xFD, 0xBE, 0xFE, 0xFB, 0xFF,
0xFF, 0xFD, 0xBE, 0x71, 0xF8, 0xE7 , 0xFC , 0xF2, 0x00, 0xF7, 0xDC, 0xFD, 0x7C, 0xFC, 0x01, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF , 0xFF , 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF , 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF , 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF , 0xFF, 0xFF,
0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
//const uchar zhi[]={
//0xFF, 0xF3, 0x85, 0xE8, 0xCC, 0xED, 0x8D, 0xEF};
struct //Estructura: alimento
{
uchar X;
uchar Y
uchar Sí
}Alimento;
struct //Estructura: pequeña serpiente
{
uchar X[snake_max_body] //Coordenada X de la serpiente
{
uchar p>
uchar Y[snake_max_body]; // La coordenada Y de la serpiente
uchar Log // La longitud de la serpiente
uchar Life; //La vida de la serpiente
uchar Score; //Puntuación de la serpiente
uchar Level //Nivel de la serpiente
}Snake;
void Init_time1() // Inicialización del temporizador, utilizado para generar números aleatorios
{
EA=1
ET1=1;
TMOD|=0X20 ;
TH1=0X01;
TL1=0X01;
TR1=1;
}
void Snake_init() //Sitio de inicialización de serpiente
{
uchar i;
línea(0, 0, 0, 80);
línea(0, 80, 50); , 80);
línea (50, 80, 50, 0);
línea (50, 0, 0, 0
Serpiente .Log); =2; //Definir la longitud de la serpiente inicializada
Snake.Life=0;
Snake.Score=0
// Food.Yes =1;
Key_Value=0;
for(i=0; ilt; Snake.Log; i ) //Asigna la serpiente al valor
{
Serpiente.X[i]=i 2
Serpiente.Y[i]=2
}
para (i =0;ilt;Snake.Log;i) //Dibuja la serpiente
{
dot(Snake.X[i], Snake.Y[i]);
}
}
key_press() // Detección de pulsación de tecla
{
// tecla uchar
arriba=1;
if(!up)
{
delay_ms(5); > if(!up)
{
Key_Value=1
}
mientras(!up);
}
abajo=1
if(!down)
{
delay_ms(5);
if(!down)
{
Key_Value=4
}
while(!down);
p>}
left=1;
if(!left)
{
delay_ms(5 );
if(!left)
{
Key_Value=2
}
mientras( !izquierda) ;
}
derecha=1;
si(!derecha)
{
delay_ms(5 );
if(!right)
{
Key_Value=3
}
while( !up);
}
// return Key_Value
}
void Run_snake(void) //Serpiente; se mueve p>
{
uc
har i=0;
if((Key_Value==Key_Rightamp;amp;Key_V_temp!=Key_Left)||(Key_Value==Key_Leftamp;amp;Key_V_temp==Key_Right))
{
offdot(Snake. Log-1; i) //El cuerpo de la serpiente es la posición de su cuerpo de serpiente anterior
{
Snake.X[ i]=Serpiente.X[i 1];
Serpiente.Y[i]=Serpiente.Y[i 1];
}
Serpiente. X[Snake.Log-1]=Serpiente. X[Snake.Log-2] 0
Serpiente.Y[Snake.Log-1]=Serpiente.Y[Snake.Log-2] 1; ; //La cabeza de la serpiente se mueve en la dirección requerida
p>for(i=0;ilt;Snake.Log;i) //Función de visualización de la serpiente
{
dot(Snake.X[i], Snake. Y[i]);
}
Key_V_temp=Key_Right //Guarda el valor actual para que pueda se utilizará la próxima vez que lo presione
}
if((Key_Value==Key_Leftamp;amp;Key_V_temp!=Key_Right)||(Key_Value==Key_Rightamp;amp;Key_V_temp= =Key_Left))
{
offdot(Snake. p>
Snake.X[i]=Snake.X[i 1];
Serpiente.Y[i]=Serpiente.Y[i 1];
}
Serpiente.X[Snake.Log-1]=Snake.X[Snake.Log-2 ] 0;
Serpiente.Y[Snake.Log-1]=Serpiente Y[Snake.Log-2]-1; .Log; i )
{
punto(Serpiente .X[i], Serpiente.Y[i]); p> Key_V_temp=Key_Left;
}
if( (Key_Value==Key_Upamp;amp;Key_V_temp!=Key_Down)||(Key_Value==Key_Downamp;amp;Key_V_temp==Key_Up ))
{
offdot(Snake.X[ 0]
, Snake.Y[0]);
for(i=0; ilt; Snake.Log-1; i )
{
Snake.X [i]=Serpiente.X[i 1];
Serpiente.Y[i]=Serpiente.Y[i 1]; .X[Snake.Log-1]=Snake.X[Snake.Log-2]-1;
Snake.Y[Snake.Log-1]=Snake.Y[Snake.Log-2 ] 0;
for(i=0; ilt; Snake.Log; i )
{
punto(Snake.X[i], Snake. Y[i]);
}
Key_V_temp=Key_Up
}
if(( Key_Value==Key_Downamp; amp; Key_V_temp!=Key_Up)||(Key_Value==Key_Up&Key_V_temp==Key_Down))
{
offdot(Snake.X[0], Snake.Y[0] ] );
for(i=0; ilt; Snake.Log-1; i )
{
Snake.X[i]=Serpiente X. [i 1];
Serpiente.Y[i]=Serpiente.Y[i 1]
}
Serpiente.X[Snake.Log - 1]=Snake.X[Snake.Log-2] 1;
Snake.Y[Snake.Log-1]=Snake.Y[Snake.Log-2]
for(i=0;ilt;Snake.Log;i)
{
dot(Snake.X[i], Snake.Y[i]); p>
}
Key_V_temp=Key_Down;
}
if((Snake.X[Snake.Log-1]gt;=50 ) ||(Snake.Y[Snake.Log-1]gt;=80)||(Snake.X[Snake.Log-1]==0)||(Snake.Y[Snake.Log-1]= = 0))//Determina si la cabeza de la serpiente golpea la pared
{
Snake.Life=1
}
para ( i=3; ilt; Snake.Log; i ) //Empieza desde la tercera sección para determinar si la cabeza de la serpiente te ha mordido
{
if((Snake.X [i]= =Serpiente.X[0])amp;amp;(Serpiente.Y[i]==Serpiente.Y[0]))
{
Serpiente. Vida=1;
}
}
/* if(Serpiente.Vida==1)
{
>
i=Key_Value;
// Display_dead( i
// clear()
write_comd(0x34); >
}*/
/* if(Snake.Log==snake_max_body) //Determina si la serpiente es la más larga
{
/ / i=Key_Value;
write_comd(0x34);
// clear();
write_comd(0x30);
/ / Display_Pass(i);
}*/
if(Snake.X[Snake.Log-1]==Food.Xamp;amp;Snake.Y[Snake.Log - 1]==Food.Y)//Determinar si la serpiente ha comido comida
{
Snake.Log; //El número de segmentos de serpiente aumenta en 1 p>
Serpiente .X[Snake.Log-1]=Comida.X;
Serpiente.Y[Snake.Log-1]=Comida.Y;
Serpiente .Score;
Food.Yes=1; //Establece el indicador de comida en 1
}
if(Food.Yes==0) //Programa de frutas
{
dot(Food.X, Food.Y
}
if(Food.Yes); ==1)
{
while(1)
{
Food.X=TL1/5; number
Food .Y=TL1/4;
for(i=0; ilt; Snake.Log; i ) // Determina si las coordenadas de alimentos generadas coinciden con el cuerpo de la serpiente
{ p>
if((Food.X==Serpiente.X[i])amp;amp;(Food.X==Serpiente.Y[i])) p>
descanso;
}
if(i==Snake.Log)
{
Comida.Sí= 0;
break ; //Generar coordenadas de alimentos válidas
}
}
}
}
void main()
{
lcd_init(); //Inicializar LCD
Init_time1(); > claro();
_nop_(); _nop_();
mapa(t); p>
clear();
serpiente_init();
// serpiente_
comida();
Comida.X=TL1/5;
Comida.Y=TL1/4;
// punto(TL1amp; 49, TL1amp; 79
// punto (TL1amp; 49, TL1amp; 79); (1)
{
if(Snake.Life)
{
// clear(); p> write_comd(0x34);
write_comd(0x30);
retardo_ms(100);
visualización (0x80, 7, error); >
mostrar(0x90, 8, fabricante);
mostrar (0x88, 6, huiz
mostrar (0x98, 8, guanggao); p> }
else
{
key_press();
Run_snake()
write_comd( 0x36);
}
if(Snake.Scorelt; 15)
delay_ms(150-10*Snake.Scorelt; 15)
> más
delay_ms(5);
}
}