|
- #include<stc12.h> //用六個(gè)按鍵四個(gè)方向鍵 一個(gè)暫停鍵 一個(gè)重新開(kāi)始健
- #include<stdlib.h> //P1控制正極 P0控制負(fù)極
- #define uint unsigned int //
- #define uchar unsigned char
- int addx,addy,n,s1,s2,e,a,b,c,d,k; //addx addy位移改變量 n蛇身長(zhǎng)度 s1,s2新果實(shí)的位置
- uchar x[21]; //a重新開(kāi)始標(biāo)志 b暫停標(biāo)志 e代表蛇身運(yùn)動(dòng)速度大小
- uchar y[21]; //兩個(gè)數(shù)組用來(lái)儲(chǔ)存蛇身的地址
- 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; //最初游戲設(shè)定
- x[0]=7;y[0]=2; //果實(shí)
- 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[i]);P1=mux(y[i]); //
- delay(5); //
- P0=0xff;P1=0x00; //和數(shù)碼管的消影差不多的作用
- }
- }
- }
- }
- void move(int e) //實(shí)現(xiàn)移動(dòng)
- {
- uint i;
- if(k>0)
- {
- while(e--) //
- { //
- for(i=0;i<=n;i++) //
- { //
- P0=255-mux(x[i]);P1=mux(y[i]); //
- key(); //
- delay(5); //
- P0=0xff;P1=0x00; //和數(shù)碼管的消影差不多的作用
- }
- } //
- for(i=1;i<n;i++) //
- {x[i]=x[i+1];y[i]=y[i+1];} //
- x[n]=x[i]+addx;y[n]=y[i]+addy; //
- }
- }
- void deal() //判斷函數(shù)
- {
- uint i;
- if(x[n]>7|x[n]<0|y[n]>7|y[n]<0) //撞墻而死
- {
- P0=0xef;P1=0x5e;delay(10000); //游戲結(jié)束標(biāo)志
- n=3,e=300,addx=0,addy=0,a=0,b=0,k=0; //最初游戲設(shè)定
- x[0]=7;y[0]=2; //果實(shí)
- 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[i]==x[n]&y[i]==y[n])
- {
- P0=0xef;P1=0x5e;delay(30000); //游戲結(jié)束標(biāo)志
- n=3,e=300,addx=0,addy=0,a=0,b=0,k=0; //回到最初游戲設(shè)定
- 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)) //判斷是否吃到果實(shí)
- {
- n=n+1;
- x[n]=x[0];y[n]=y[0];
- if(n==13) //判斷是否過(guò)關(guān)
- { e=e-50; //
- P0=0x00;P1=0xff;delay(30000); //游戲結(jié)束標(biāo)志
- n=3,addx=0,addy=0,a=0,b=0,k=0; //回到最初游戲設(shè)定
- 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; // 新的果實(shí)
- 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[i])&(y[0]==y[i]))
- {
- 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; // 新的果實(shí)
- 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;
- }
- }
- }
- P3=0xbf;
- t=P3;
- t=t&0x1c;
- if(t!=0x1c)
- {
- delay(10);
- t=P3;
- t=t&0x1c;
- if(t!=0x1c)
- {
- t=P3;
- switch(t)
- {
- case 0xbb:k=2;break;
- case 0xb7:k=3;break;
- case 0xaf:k=4;break;
- default: break;
- }
- while(t!=0x1c)
- {
- t=P3;
- t=t&0x1c;
- }
- }
- }
- b=b%2;
- switch(k)
- {
- case 1: addy=-1,addx=0;break;
- case 2: addx=1,addy=0;break;
- case 3: addy=1,addx=0;break;
- case 4: addx=-1,addy=0;break;
- }
- }
- uchar mux(int temp) //十進(jìn)制轉(zhuǎn)化為十六進(jìn)制
- {
- if(temp==7)return 128;
- if(temp==6)return 64;
- if(temp==5)return 32;
- if(temp==4)return 16;
- if(temp==3)return 8;
- if(temp==2)return 4;
- if(temp==1)return 2;
- if(temp==0)return 1;
- return 0;
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
復(fù)制代碼 |
評(píng)分
-
查看全部評(píng)分
|