#include<stc12.h> //用六个按键四个方向键 一个暂停键 一个重新开始健
#include<stdlib.h> //P1控制正极 P0控制负极
#define uint unsigned int //
#define uchar unsigned char
int addx,addy,n,s1,s2,e,a,b,c,d,k; //addx addy位移改变量 n蛇身长度 s1,s2新果实的位置
uchar x[21]; //a重新开始标志 b暂停标志 e代表蛇身运动速度大小
uchar y[21]; //两个数组用来储存蛇身的地址
void key();
void deal();
void move(int);
uchar mux(int);
void delay(uint);
void main()
{
n=3,e=300,addx=0,addy=0,k=0; //最初游戏设定
x[0]=7;y[0]=2; //果实
x[1]=7;y[1]=7; //蛇尾
x[2]=7;y[2]=6; //蛇身
x[n]=7;y[n]=5; //蛇头
P0=0x7f;P1=0xe4;
while(1)
{
key();
if(b==0)
{
key();
move(e);
deal();
}
if(b==1)
{ uint i; //
for(i=0;i<=n;i++) //
{ //
P0=255-mux(x);P1=mux(y); //
delay(5); //
P0=0xff;P1=0x00; //和数码管的消影差不多的作用
}
}
}
}
void move(int e) //实现移动
{
uint i;
if(k>0)
{
while(e--) //
{ //
for(i=0;i<=n;i++) //
{ //
P0=255-mux(x);P1=mux(y); //
key(); //
delay(5); //
P0=0xff;P1=0x00; //和数码管的消影差不多的作用
}
} //
for(i=1;i<n;i++) //
{x=x[i+1];y=y[i+1];} //
x[n]=x+addx;y[n]=y+addy; //
}
}
void deal() //判断函数
{
uint i;
if(x[n]>7|x[n]<0|y[n]>7|y[n]<0) //撞墙而死
{
P0=0xef;P1=0x5e;delay(10000); //游戏结束标志
n=3,e=300,addx=0,addy=0,a=0,b=0,k=0; //最初游戏设定
x[0]=7;y[0]=2; //果实
x[1]=7;y[1]=7; //蛇尾
x[2]=7;y[2]=6; //蛇身
x[n]=7;y[n]=5; //蛇头
P0=0x7f;P1=0xe4;
}
for(i=1;i<n;i++) //撞自己而死
{
if(x==x[n]&y==y[n])
{
P0=0xef;P1=0x5e;delay(30000); //游戏结束标志
n=3,e=300,addx=0,addy=0,a=0,b=0,k=0; //回到最初游戏设定
x[1]=7;y[1]=7; //蛇尾
x[2]=7;y[2]=6;
x[n]=7;y[n]=5; //蛇头
P0=0x7f;P1=0xe4;
}
}
if((x[0]==x[n]+addx)&(y[0]==y[n]+addy)) //判断是否吃到果实
{
n=n+1;
x[n]=x[0];y[n]=y[0];
if(n==13) //判断是否过关
{ e=e-50; //
P0=0x00;P1=0xff;delay(30000); //游戏结束标志
n=3,addx=0,addy=0,a=0,b=0,k=0; //回到最初游戏设定
x[1]=7;y[1]=7; //蛇尾
x[2]=7;y[2]=6;
x[n]=7;y[n]=5; //蛇头
P0=0x7f;P1=0xe0;
}
c=rand(); s1=c%10000%1000%100%10;
d=rand(); s2=d%10000%1000%100%10; // 新的果实
if(s1>6) s1=s1-3;
if(s2>6) s2=s2-3;
x[0]=s1;y[0]=s2; //
for(i=1;i<n;i++) //判断是否与蛇身重合
{
if((x[0]==x)&(y[0]==y))
{
c=rand(); s1=c%10000%1000%100%10;
d=rand(); s2=d%10000%1000%100%10;
if(s1>6) s1=s1-3;
if(s2>6) s2=s2-3;
x[0]=s1;y[0]=s2; // 新的果实
i=1;
}
}
}
}
void key() //矩阵按键扫描
{
uchar t;
P3=0xdf;
t=P3;
t=t&0x1c;
if(t!=0x1c)
{
delay(10);
t=P3;
t=t&0x1c;
if(t!=0x1c)
{
t=P3;
switch(t)
{
case 0xdb:a=1;break;
case 0xd7:k=1;break;
case 0xcf:b++;break;
default: break;
}
while(t!=0x1c)
{
t=P3;
t=t&0x1c;
}
}
}
|