欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 帶紅外遙控的雙色光立方貪吃蛇單片機(jī)源程序 [打印本頁]

作者: 葉魁    時(shí)間: 2017-12-20 19:20
標(biāo)題: 帶紅外遙控的雙色光立方貪吃蛇單片機(jī)源程序
雙色光立方貪吃蛇遙控器:

玩家一
5:前進(jìn)
8:后退
7:往左走
9:往右走
4:向上
6:向下

玩家二
0:前進(jìn)
2:后退
1:往左走
3:往右走
NEXT:向上
+:向下

雙擊可以進(jìn)行沖刺
PREV鍵重置游戲

游戲規(guī)則:
1. 邊界可以碰撞,碰撞時(shí)會(huì)穿越到另一邊。
2 不可以纏繞自己,吃到自己會(huì)導(dǎo)致失敗。哪個(gè)顏色充滿全屏,說明哪個(gè)顏色的蛇失敗。
3. 通過吃食物來增加長度。
4. 吃到對(duì)方蛇會(huì)使對(duì)方長度減少。
5.芯片會(huì)根據(jù)音樂文件寫入優(yōu)盤的時(shí)間為他們自動(dòng)排序,我設(shè)置的順序是、 吃食物音樂 bgm、 失敗音樂
然后初始化時(shí)直接播放(第一首會(huì)播放吃食物的音樂)下一曲
也就是bgm
然后需要觸發(fā)吃食物音效時(shí),控制芯片播放上一首
如果需要播放失敗音樂,就控制芯片播放下一首



單片機(jī)源程序如下:
  1. #include <STC12C5A60S2.H>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>        
  5. #include <hc595.h>         
  6. #define MaxLength 20
  7. /************************************************************************/
  8. #define LENG 8
  9. uchar xdata game [LENG][LENG][LENG];
  10. uchar xdata grand[10]={1000,900,800,700,600,500,400,300,200,100};
  11. int LEVEL1=9;
  12. int finshflag=0;
  13. int pauseflag=0;
  14. void key2();
  15. int rush=0;
  16. int rush2=0;
  17. uchar xdata display_r[8][8]={0};            //色光數(shù)組
  18. uchar xdata display_b[8][8]={0};
  19. uchar currentColor = 1;
  20. uchar layerBuffer = 0x01;
  21. sbit GG=P3^4;
  22. sbit RR=P3^5;
  23. sbit BB=P3^6;
  24. sbit k4=P0^7;
  25. sbit k2=P0^5;
  26. uchar layer = 0;
  27. int reset=0;
  28. uchar data irtime=0;
  29. uchar startflag;//開始標(biāo)志
  30. uchar data irdata[33];//數(shù)據(jù)一共33位加上引導(dǎo)碼
  31. uchar bitnum;
  32. uchar irreceok;//接收一幀數(shù)據(jù)完成
  33. uchar ircode[4];//4個(gè)字節(jié)的數(shù)據(jù)
  34. uchar irprosok;//處理完成
  35. void drawPoint(int x, int y, int z,int color);
  36. void food();
  37. void delete_tail();
  38. void delete_tail2();
  39. int food_x,food_y,food_z;
  40. enum points{UP , DOWN , LEFT , RIGHT,FORTH,BACK};
  41. enum points point = RIGHT;

  42. enum points2{UP2 , DOWN2 , LEFT2 , RIGHT2,FORTH2,BACK2};
  43. enum points2 point2 = LEFT2;

  44. typedef struct  Snake{
  45.         uchar x[MaxLength]; //蛇身節(jié)點(diǎn)的橫坐標(biāo)  
  46.     uchar y[MaxLength]; //蛇身節(jié)點(diǎn)的縱坐標(biāo)  
  47.     uchar z[MaxLength]; //蛇節(jié)點(diǎn)  
  48.     uchar length;//蛇長度
  49.         
  50. }Snake;
  51. xdata Snake snake={{0},{0},{0},0};
  52. xdata Snake snake2={{0},{0},{0},0};

  53. void delay2(uint t)                                  //延時(shí)
  54. {
  55.         int i;
  56.         while(t--)
  57.         for(i=0;i<5;i++);
  58. }

  59. void init(){                                                   //游戲初始化
  60.         int i, k,j;
  61.         for(i = 0 ; i < LENG ; i++){
  62.                 for(j = 0 ; j < LENG ; j++){
  63.                         for(k = 0 ; k < LENG ; k++){
  64.                          game[i][j][k] = 0;
  65.                         }
  66.                 }
  67.         }
  68. for(i=0;i<20;i++){
  69.          snake.x[i]        =0;
  70.          snake.y[i]        =0;
  71.          snake.z[i]        =0;
  72.          snake2.x[i]=0;
  73.          snake2.y[i]=0;
  74.          snake2.z[i]=0;
  75. }
  76. snake.length=0;
  77. snake2.length=0;
  78. }
  79. void eaten(int x,int y,int z,int n){          //蛇被吃函數(shù)設(shè)置
  80. int i ;
  81.                 k2=0;
  82.                 delay2(10000);
  83.                 k2=1;               
  84.          if(n==1){
  85.                  for(i=0;snake.x[i]!=x&&snake.y[i]!=y&&snake.z[i]!=z;i++);
  86.                  i++;
  87.                  for(i;i>0;i--)delete_tail();
  88.                   }
  89.         if(n==2){
  90.                  for(i=0;snake2.x[i]!=x&&snake2.y[i]!=y&&snake2.z[i]!=z;i++);
  91.                  i++;
  92.                  for(i;i>0;i--)delete_tail2();
  93.                   }
  94. }
  95. void finsh(int n){                                 //游戲結(jié)束函數(shù)設(shè)置        
  96.         int i,j,k;
  97.         for(i = 0 ; i < LENG ; i++){
  98.                 for(j = 0 ; j < LENG ; j++){
  99.                         for(k = 0 ; k < LENG ; k++){
  100.                          if(game[i][j][k] == 0){
  101.                                  game[i][j][k] =n;
  102.                          }

  103.                         }
  104.                 }
  105.         }
  106. }
  107. void add_head(int a, int b, int c){                  //蛇1增加頭
  108.         
  109.         if(game[a][b][c]==1){
  110.                 k4=0;
  111.         delay2(10000);
  112.             k4=1;
  113.                 finshflag=1;
  114.                 finsh(1);
  115.         }
  116.         if(game[a][b][c]==2){               
  117.                 eaten(a,b,c,2);
  118.         }
  119.          game[a][b][c]=1;                  
  120.           snake.x[snake.length]=a;  
  121.           snake.y[snake.length]=b;
  122.                   snake.z[snake.length]=c;   
  123.         snake.length++;//節(jié)點(diǎn)個(gè)數(shù)加1  
  124. }//添加點(diǎn)至頭部使蛇看起來在向前走
  125. void add_head2(int a, int b, int c){           //蛇2增加頭
  126.         
  127.         if(game[a][b][c]==1){
  128.                
  129.                 eaten(a,b,c,1);
  130.         }
  131.         if(game[a][b][c]==2){
  132.                 k4=0;
  133.         delay2(10000);
  134.         k4=1;

  135.                 finshflag=1;
  136.                 finsh(2);
  137.         }
  138.          game[a][b][c]=2;                  
  139.           snake2.x[snake2.length]=a;  
  140.           snake2.y[snake2.length]=b;
  141.                   snake2.z[snake2.length]=c;  
  142.         snake2.length++;    //節(jié)點(diǎn)個(gè)數(shù)加1  
  143. }

  144. void delete_tail(){          //蛇一
  145. int i;
  146.         game[snake.x[0]][snake.y[0]][snake.z[0]]=0;
  147.         for(i=0;i<snake.length;i++)  //依次向尾部方向移動(dòng)蛇各個(gè)節(jié)點(diǎn)的坐標(biāo)  
  148.         {  
  149.           snake.x[i]=snake.x[i+1];  
  150.           snake.y[i]=snake.y[i+1];  
  151.           snake.z[i]=snake.z[i+1];  
  152.         }  
  153.      snake.length--;            
  154. }//刪除尾部使蛇看起來在向前走

  155. void delete_tail2(){   //蛇二
  156. int i;
  157.         game[snake2.x[0]][snake2.y[0]][snake2.z[0]]=0;
  158.         for(i=0;i<snake2.length;i++)  //依次向尾部方向移動(dòng)蛇各個(gè)節(jié)點(diǎn)的坐標(biāo)  
  159.         {  
  160.           snake2.x[i]=snake2.x[i+1];  
  161.           snake2.y[i]=snake2.y[i+1];  
  162.           snake2.z[i]=snake2.z[i+1];  
  163.         }  
  164.      snake2.length--;     
  165.   
  166.         
  167. }


  168. void food(){
  169.         
  170.         do{
  171.                 food_x = rand()%7+1;//使得隨機(jī)數(shù)在1到8的范圍
  172.             food_y = rand()%7+1;
  173.                 food_z = rand()%7+1;
  174.         }while(game[food_x][food_y][food_z] == 1||game[food_x][food_y][food_z] == 2);
  175.         game[food_x][food_y][food_z] = 3;
  176. }//隨機(jī)的食物
  177. /*
  178. void renew(){
  179.         int times=0;
  180.         current = head->next->next;
  181.         while(current->next != NULL){
  182.                 current = current->next;
  183.                 times++;
  184.         }
  185.         while(times--){
  186.                 current = current->prior;
  187.                 current->next = NULL;
  188.                 free(current->next);
  189.         }
  190. }
  191. */

  192. void delay(int t)
  193. {
  194.         int tt;
  195.         while(t--)
  196.                 for(tt=0;tt<10;tt++);
  197. }

  198. void move(){                //使蛇自動(dòng)朝當(dāng)前方向前進(jìn),控制蛇1

  199.         if(!pauseflag&&!finshflag){
  200.         int a = snake.x[snake.length-1];
  201.         int b = snake.y[snake.length-1];
  202.         int c = snake.z[snake.length-1];

  203.         switch(point){
  204.         case UP: {
  205.                 c++;
  206.                 if(c>7)c=0;
  207.                 break; }

  208.         case DOWN: {
  209.                 c--;
  210.                 if(c<0)c=7;
  211.                 break; }

  212.         case RIGHT: {
  213.                 a++;
  214.                 if(a>7)a=0;
  215.                 break;
  216.                           }
  217.         case LEFT: {
  218.                 a--;
  219.                 if(a<0)a=7;
  220.                 break;
  221.                           }
  222.         case FORTH: {
  223.                 b++;
  224.                 if(b>7)b=0;
  225.                 break;
  226.                           }
  227.         case BACK: {
  228.                 b--;
  229.                 if(b<0)b=7;
  230.                 break;
  231.                           }
  232.         }

  233.         if(a == food_x && b == food_y&&c == food_z){
  234.            k2=0;
  235.                 delay2(10000);
  236.                 k2=1;
  237.                
  238.                 add_head(a,b,c);
  239.         
  240.                 food();
  241.                
  242.                 return;
  243.         }//吃到食物了
  244.         add_head(a,b,c);
  245.         delete_tail();
  246.         }
  247.         
  248.         

  249. }

  250. void move2(){                 //使蛇自動(dòng)朝當(dāng)前方向前進(jìn),控制蛇2

  251. ……………………

  252. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
雙色光立方貪吃蛇程序.zip (1.64 MB, 下載次數(shù): 43)







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