標(biāo)題: 自己做的用單片機(jī)控制8*8點(diǎn)陣的貪吃蛇 [打印本頁(yè)]

作者: NB沒(méi)B    時(shí)間: 2014-8-27 18:59
標(biāo)題: 自己做的用單片機(jī)控制8*8點(diǎn)陣的貪吃蛇
  1. #include<stc12.h>      //用六個(gè)按鍵四個(gè)方向鍵 一個(gè)暫停鍵 一個(gè)重新開(kāi)始健
  2. #include<stdlib.h>      //P1控制正極 P0控制負(fù)極
  3. #define uint unsigned int    //
  4. #define uchar unsigned char
  5. int addx,addy,n,s1,s2,e,a,b,c,d,k;   //addx addy位移改變量  n蛇身長(zhǎng)度 s1,s2新果實(shí)的位置
  6. uchar x[21];       //a重新開(kāi)始標(biāo)志 b暫停標(biāo)志 e代表蛇身運(yùn)動(dòng)速度大小
  7. uchar y[21];       //兩個(gè)數(shù)組用來(lái)儲(chǔ)存蛇身的地址
  8. void key();
  9. void deal();
  10. void move(int);
  11. uchar mux(int);
  12. void delay(uint);
  13. void main()
  14. {
  15. n=3,e=300,addx=0,addy=0,k=0;        //最初游戲設(shè)定
  16. x[0]=7;y[0]=2;          //果實(shí)
  17. x[1]=7;y[1]=7;               //蛇尾
  18. x[2]=7;y[2]=6;          //蛇身
  19.   x[n]=7;y[n]=5;             //蛇頭
  20. P0=0x7f;P1=0xe4;
  21. while(1)
  22. {
  23.   key();
  24.   if(b==0)
  25.   {
  26.   key();
  27.   move(e);
  28.   deal();
  29.   }
  30.   if(b==1)
  31.   { uint i;             //
  32.       for(i=0;i<=n;i++)         //
  33.         {             //
  34.        P0=255-mux(x[i]);P1=mux(y[i]);     //
  35.        delay(5);          //
  36.        P0=0xff;P1=0x00;              //和數(shù)碼管的消影差不多的作用
  37.    }
  38.   }
  39. }
  40. }
  41. void move(int e)  //實(shí)現(xiàn)移動(dòng)
  42. {
  43. uint i;
  44. if(k>0)
  45. {
  46.   while(e--)            //
  47.   {              //
  48.      for(i=0;i<=n;i++)          //
  49.        {              //
  50.       P0=255-mux(x[i]);P1=mux(y[i]);      //
  51.       key();            //
  52.       delay(5);           //
  53.       P0=0xff;P1=0x00;                  //和數(shù)碼管的消影差不多的作用
  54.       }
  55.   }                 //
  56.   for(i=1;i<n;i++)          //
  57.   {x[i]=x[i+1];y[i]=y[i+1];}        //
  58.   x[n]=x[i]+addx;y[n]=y[i]+addy;       //              
  59. }
  60. }
  61. void deal()             //判斷函數(shù)
  62. {
  63. uint i;
  64. if(x[n]>7|x[n]<0|y[n]>7|y[n]<0)       //撞墻而死
  65. {
  66.   P0=0xef;P1=0x5e;delay(10000);      //游戲結(jié)束標(biāo)志         
  67.   n=3,e=300,addx=0,addy=0,a=0,b=0,k=0;     //最初游戲設(shè)定
  68.   x[0]=7;y[0]=2;          //果實(shí)
  69.   x[1]=7;y[1]=7;               //蛇尾
  70.   x[2]=7;y[2]=6;          //蛇身
  71.    x[n]=7;y[n]=5;             //蛇頭
  72.   P0=0x7f;P1=0xe4;      
  73. }
  74. for(i=1;i<n;i++)          //撞自己而死
  75. {
  76.   if(x[i]==x[n]&y[i]==y[n])
  77.   {
  78.    P0=0xef;P1=0x5e;delay(30000);      //游戲結(jié)束標(biāo)志
  79.    n=3,e=300,addx=0,addy=0,a=0,b=0,k=0;   //回到最初游戲設(shè)定
  80.    x[1]=7;y[1]=7;            //蛇尾
  81.    x[2]=7;y[2]=6;
  82.       x[n]=7;y[n]=5;          //蛇頭
  83.    P0=0x7f;P1=0xe4;
  84.   }         
  85. }
  86. if((x[0]==x[n]+addx)&(y[0]==y[n]+addy))   //判斷是否吃到果實(shí)
  87. {
  88.   n=n+1;
  89.   x[n]=x[0];y[n]=y[0];
  90.   if(n==13)         //判斷是否過(guò)關(guān)
  91.   { e=e-50;          //
  92.    P0=0x00;P1=0xff;delay(30000);      //游戲結(jié)束標(biāo)志
  93.    n=3,addx=0,addy=0,a=0,b=0,k=0;      //回到最初游戲設(shè)定
  94.    x[1]=7;y[1]=7;            //蛇尾
  95.    x[2]=7;y[2]=6;
  96.       x[n]=7;y[n]=5;          //蛇頭
  97.    P0=0x7f;P1=0xe0;         
  98.   }
  99.   c=rand(); s1=c%10000%1000%100%10;
  100.   d=rand(); s2=d%10000%1000%100%10;   // 新的果實(shí)
  101.   if(s1>6)  s1=s1-3;
  102.   if(s2>6)  s2=s2-3;
  103.   x[0]=s1;y[0]=s2;       //
  104.   for(i=1;i<n;i++)       //判斷是否與蛇身重合
  105.   {
  106.     if((x[0]==x[i])&(y[0]==y[i]))
  107.     {
  108.      c=rand(); s1=c%10000%1000%100%10;
  109.    d=rand(); s2=d%10000%1000%100%10;  
  110.    if(s1>6)  s1=s1-3;
  111.    if(s2>6)  s2=s2-3;
  112.    x[0]=s1;y[0]=s2;      // 新的果實(shí)
  113.    i=1;
  114.     }
  115.     }
  116. }
  117. }
  118. void key()             //矩陣按鍵掃描
  119. {
  120. uchar t;
  121. P3=0xdf;
  122. t=P3;
  123. t=t&0x1c;
  124. if(t!=0x1c)
  125. {
  126.   delay(10);
  127.   t=P3;
  128.   t=t&0x1c;
  129.   if(t!=0x1c)
  130.    {
  131.     t=P3;
  132.    switch(t)
  133.    {
  134.     case 0xdb:a=1;break;
  135.     case 0xd7:k=1;break;
  136.     case 0xcf:b++;break;
  137.     default:  break;
  138.    }
  139.    while(t!=0x1c)
  140.    {
  141.     t=P3;
  142.     t=t&0x1c;
  143.    }
  144.    }
  145. }
  146. P3=0xbf;
  147. t=P3;
  148. t=t&0x1c;
  149. if(t!=0x1c)
  150. {
  151.   delay(10);
  152.   t=P3;
  153.   t=t&0x1c;
  154.   if(t!=0x1c)
  155.    {
  156.     t=P3;
  157.    switch(t)
  158.    {
  159.     case 0xbb:k=2;break;
  160.     case 0xb7:k=3;break;
  161.     case 0xaf:k=4;break;
  162.     default:  break;
  163.    }
  164.    while(t!=0x1c)
  165.    {
  166.     t=P3;
  167.     t=t&0x1c;
  168.    }
  169.    }
  170. }
  171. b=b%2;
  172. switch(k)
  173. {
  174.   case 1: addy=-1,addx=0;break;
  175.   case 2: addx=1,addy=0;break;
  176.   case 3: addy=1,addx=0;break;
  177.   case 4: addx=-1,addy=0;break;
  178. }
  179. }
  180. uchar mux(int temp)      //十進(jìn)制轉(zhuǎn)化為十六進(jìn)制
  181. {
  182. if(temp==7)return 128;
  183. if(temp==6)return 64;
  184. if(temp==5)return 32;
  185. if(temp==4)return 16;
  186. if(temp==3)return 8;
  187. if(temp==2)return 4;
  188. if(temp==1)return 2;
  189. if(temp==0)return 1;
  190.            return 0;
  191. }
  192. void delay(uint z)
  193. {
  194. uint x,y;
  195. for(x=z;x>0;x--)
  196.   for(y=110;y>0;y--);
  197. }
復(fù)制代碼

作者: jiege    時(shí)間: 2014-8-27 21:01
樓主能發(fā)一個(gè)完整的工程文件嗎  好像還差頭文件  最好有電路圖
作者: NB沒(méi)B    時(shí)間: 2014-8-28 13:03
jiege 發(fā)表于 2014-8-27 21:01
樓主能發(fā)一個(gè)完整的工程文件嗎  好像還差頭文件  最好有電路圖

我不知道如何穿文件 頭文件是根據(jù)自己的單片機(jī)型號(hào)而修改 P1控制點(diǎn)陣的正極 P0控制負(fù)極 其他的I/O口可以用作鍵盤
作者: NB沒(méi)B    時(shí)間: 2014-8-28 13:07
我用的鍵盤是矩陣鍵盤 大家可以用獨(dú)立鍵盤 我是在我之前的單片機(jī)上外接一個(gè)8*8的點(diǎn)陣 并沒(méi)有做出來(lái)實(shí)物  但是在面包板上調(diào)試一切正常 我就是想暑假無(wú)聊做些東西 既然程序ok 就沒(méi)必要一定做出硬件
作者: admin    時(shí)間: 2014-8-28 15:52
按照這個(gè)步驟即可在回帖的時(shí)候上傳圖片(上傳附件就在圖片的旁邊 方法一樣)


選擇圖片的時(shí)候可以多選,這樣就能一次性上傳很多圖片(上傳附件就在圖片的旁邊 方法一樣)

作者: NB沒(méi)B    時(shí)間: 2014-8-28 16:00
admin 發(fā)表于 2014-8-28 15:52
按照這個(gè)步驟即可在回帖的時(shí)候上傳圖片(上傳附件就在圖片的旁邊 方法一樣)

謝啦 thanks
作者: NB沒(méi)B    時(shí)間: 2014-9-1 13:39
大家覺(jué)得好就給點(diǎn)分
作者: mm494408445    時(shí)間: 2015-11-1 12:48
看看怎么樣
作者: szyybyf    時(shí)間: 2016-3-28 23:02
學(xué)習(xí)一下
作者: 16_A    時(shí)間: 2016-12-1 21:23
實(shí)際運(yùn)行的時(shí)候它怎么不動(dòng)呀QAQ
作者: 嗯嗯hia    時(shí)間: 2016-12-18 18:36
只有程序呀
作者: 51hhcc    時(shí)間: 2017-3-28 18:55
贊一個(gè)
作者: kk276988160    時(shí)間: 2017-5-12 10:42
我做的 比你做的好玩




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1