久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3382|回復: 0
收起左側

帶紅外遙控的雙色光立方貪吃蛇單片機源程序

[復制鏈接]
ID:263709 發表于 2017-12-20 19:20 | 顯示全部樓層 |閱讀模式
雙色光立方貪吃蛇遙控器:
0.png
玩家一
5:前進
8:后退
7:往左走
9:往右走
4:向上
6:向下

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

雙擊可以進行沖刺
PREV鍵重置游戲

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

0.png

單片機源程序如下:
  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};            //色光數組
  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;//開始標志
  30. uchar data irdata[33];//數據一共33位加上引導碼
  31. uchar bitnum;
  32. uchar irreceok;//接收一幀數據完成
  33. uchar ircode[4];//4個字節的數據
  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]; //蛇身節點的橫坐標  
  46.     uchar y[MaxLength]; //蛇身節點的縱坐標  
  47.     uchar z[MaxLength]; //蛇節點  
  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)                                  //延時
  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){          //蛇被吃函數設置
  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){                                 //游戲結束函數設置        
  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++;//節點個數加1  
  124. }//添加點至頭部使蛇看起來在向前走
  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++;    //節點個數加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++)  //依次向尾部方向移動蛇各個節點的坐標  
  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++)  //依次向尾部方向移動蛇各個節點的坐標  
  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;//使得隨機數在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. }//隨機的食物
  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(){                //使蛇自動朝當前方向前進,控制蛇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(){                 //使蛇自動朝當前方向前進,控制蛇2

  251. ……………………

  252. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

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


回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91在线观看| 日本一区二区在线视频 | 91在线色视频 | www精品 | 蜜桃av鲁一鲁一鲁一鲁 | 国产在线观 | 黄网站在线播放 | 一级黄a视频 | 国内自拍视频在线观看 | 午夜码电影 | 亚洲1区| 日韩一区二区在线视频 | 一区二区三区高清 | 精品视频一区二区 | 伊人中文字幕 | 丁香色婷婷 | 黑人性hd | 国产中文视频 | aaaaaa大片免费看最大的 | 伊人久久精品一区二区三区 | 免费一区二区三区 | 久久国产精品99久久久大便 | 亚洲天堂一区 | 中文在线一区二区 | 成人在线亚洲 | 一区二区电影 | 成年人的视频免费观看 | 先锋资源亚洲 | 国产高清免费 | 成人在线免费视频观看 | 日韩视频在线免费观看 | 一级黄色网页 | 午夜在线精品 | 久久国产区 | 国产成人免费在线 | 亚洲精品视频一区二区三区 | 99reav| 午夜国产羞羞视频免费网站 | 欧美日韩久久 | 国产成人精品一区二三区在线观看 | 成人免费在线观看视频 |