#include<reg51.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
u8 code gwx[27]={1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7};
u8 code gwy[27]={6,5,5,6,7,4,3,4,5,6,7,3,5,6,2,4,3,4,5,6,7,5,6,7,4,5,6};
u8 code gx[47]={9,9,9,9,9,10,11,13,13,13,13,13,14,14,15,15,15,15,15,17,17,17,17,18,18,18,19,19,19,19,21,21,21,21,21,22,22,22,23,23,23};
u8 code gy[47]={7,6,5,4,3, 3, 3, 7, 6, 5, 4, 3, 7, 3, 7, 6, 5, 4, 3, 7, 6, 5, 3, 7, 5, 3, 7, 5, 4, 3, 7, 6, 5, 4, 3, 7, 5, 3, 7 ,5, 3};
u8 x[20];u8 y[20];u8 length;u8 direction;
u8 tt1,tt2,tt3,tt4,dianx,diany;
u8 p1,p0,sb,j;
u8 panduan;
u8 dix[20],diy[20];
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
sbit yiwei=P3^6;
sbit cunchu=P3^5;
sbit chuanshu=P3^4;
void delay(u16 t)
{
while(t--);
}
void chuanxing(u8 by)
{
u8 i;
yiwei=0;
cunchu=0;
for(i=0;i<8;i++)
{
chuanshu=by>>7;
by=by<<1;
yiwei=1;
_nop_();
_nop_();
yiwei=0;
}
cunchu=1;
_nop_();
_nop_();
cunchu=0;
}
void peizhi()
{
TMOD|=0x01;
TH0=0xd8;
TL0=0xf0;
ET0=1;
EA=1;
}
void zouwei()
{
u8 i;
for(i=0;i<length;i++)
{
dix[i]=x[i];
diy[i]=y[i];
}
if(direction==1)
x[0]=x[0]-1;
if(direction==2)
y[0]=y[0]+1;
if(direction==3)
x[0]=x[0]+1;
if(direction==4)
y[0]=y[0]-1;
}
void gen()
{
u8 i;
for(i=1;i<length;i++)
{
x[i]=dix[i-1];
y[i]=diy[i-1];
}
}
void date()
{
u8 i;
for(i=0;i<length;i++)
{
switch(x[i])
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
}
switch(y[i])
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
}
P0=p0;
chuanxing(p1);
delay(25);
chuanxing(0x00);
switch(dianx)
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
}
switch(diany)
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
}
P0=p0;
chuanxing(p1);
delay(25);
chuanxing(0x00);
}
}
void key()
{
if(k1==0)
{
delay(30);
if(k1==0)
{
direction=1;
TR0=1;
panduan=1;
tt2=tt2+5;
while(!k1);
}
}
if(k2==0)
{
delay(30);
if(k2==0)
{
direction=2;
tt2=tt2-2;
while(!k2);
}
}
if(k3==0)
{
delay(30);
if(k3==0)
{
direction=3;
tt2=tt2+3;
while(!k3);
}
}
if(k4==0)
{
delay(30);
if(k4==0)
{
direction=4;
tt2=tt2-1;
while(!k4);
}
}
}
void winorlose()
{
u8 ii;
u16 iii;
for(ii=1;ii<length;ii++)
{
if((x[0]==x[ii])&&(y[0]==y[ii]))
{
panduan=2;
while(iii<10000)
{
delay(10);
iii++;
for(ii=0;ii<41;ii++)
{
switch(gx[ii]-sb)
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
default:p0=0xff;break;
}
switch(gy[ii])
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
default:p1=0x00;break;
}
P0=p0;
chuanxing(p1);
delay(30);
chuanxing(0x00);
}
}
}
}
if((x[0]==0)||(x[0]>8)||(y[0]==0)||(y[0]>8))
{
panduan=2;
while(iii<10000)
{
delay(10);
iii++;
for(ii=0;ii<41;ii++)
{
switch(gx[ii]-sb)
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
default:p0=0xff;break;
}
switch(gy[ii])
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
default:p1=0x00;break;
}
P0=p0;
chuanxing(p1);
delay(30);
chuanxing(0x00);
}
}
}
if(length==20)
{
TR0=0;
while(iii<10000)
{
delay(10);
iii++;
for(ii=0;ii<27;ii++)
{
switch(gwx[ii])
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
default:p0=0xff;break;
}
switch(gwy[ii])
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
default:p1=0x00;break;
}
P0=p0;
chuanxing(p1);
delay(30);
chuanxing(0x00);
}
}
}
}
void main()
{
dianx=2;
diany=6;
x[0]=4;
y[0]=4;
x[1]=5;
y[1]=4;
x[2]=6;
y[2]=4;
length=3;
direction=1;
peizhi();
while(1)
{
date();
key();
winorlose();
}
}
void time0() interrupt 1
{
TH0=0xd8;
TL0=0xf0;
if(panduan==1)
{
tt1++;
tt3++;
if(tt3==17)
{
tt2=tt2+3;
tt3=0;
}
if(tt1==50)
{
tt1=0;
zouwei();
gen();
if((tt2>8)&&(tt2%8))
tt2=tt2%8;
else
tt2=8;
}
if((x[0]==dianx)&&(y[0]==diany))
{
dianx=tt2;
diany=tt3%8;
if(dianx>8)
dianx=tt2%8;
if(diany>8)
{
diany=tt2%8+3;
if(diany>8)
diany=diany-5;
}
if(dianx==0)
dianx=4;
if(diany==0)
diany=4;
length=length+1;
}
}
if(panduan==2)
{
j++;
if(j==30)
{
sb++;
if(sb>41)
sb=0;
j=0;
}
}
}
刚刚做的 不少篇幅都用来表示输了或者赢了之后的图案了。。。。 |