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

標題: c51單片機自制貪吃蛇游戲機 含程序代碼 [打印本頁]

作者: ameng9958    時間: 2019-12-23 14:54
標題: c51單片機自制貪吃蛇游戲機 含程序代碼
制作出來的貪吃蛇游戲機實物圖如下:


單片機源程序如下:
  1. #include"snake.h"
  2. #include<stdlib.h>
  3. #include"key.h"
  4. #include"display.h"
  5. #include"main.h"
  6. #include"delay.h"
  7. ///////////////////////////////////////////////
  8. ///////////////     貪吃蛇     ////////////////
  9. ///////////////////////////////////////////////


  10. void setDir(u8 *dir_1,u8 *dir_2,u8 value){
  11.         *dir_1 = 0;
  12.         *dir_2 = value;
  13. }

  14. void setHead(u8 *z,u8 dir){
  15.         *z+=dir;
  16.         if(*z == -1)*z = 7;
  17.         else if(*z == 8)*z = 0;
  18. }

  19. void moveSnakeXY(u8 *snakeXY,const u8 num,const u8 XY){
  20.         u8 i = 0;
  21.         while(i<num-1){
  22.                 snakeXY[i] = snakeXY[i+1];
  23.                 i++;
  24.         }
  25.         snakeXY[i] = XY;
  26. }

  27. void changeLED(u8 (*led)[LED_WIDTH],const u8 *x,const u8 *y,u8 num,u8 apx,u8 apy){
  28.         int i = 0;
  29.         cleanLED(led);
  30.         while(i < num){
  31.                  led[y[i]][x[i]] = 1;
  32.                 i++;
  33.         }
  34.         led[apy][apx] = 1;                                                                                                                                                 
  35. }

  36. void randXY(u8 *x,u8 *y,u8 (*led)[LED_WIDTH],u8 t){
  37.         srand(t);
  38.         do{
  39.                  *x = rand()%8;
  40.                 *y = rand()%8;
  41.         }while(led[*y][*x]); //若這個點上面為1,則繼續(xù),直到這個點上面為空
  42.         led[*y][*x] = 1;
  43. }
  44. void showDegree(u8 degree){
  45.         u8 i,j;
  46.         for(i = 0;i<LED_HEIGHT;i++)
  47.                 for(j = 0;j<=degree;j++)
  48.                         setPoint(j,i);       
  49. }
  50. u8 Snake(void){
  51.         #define BLOCKNUM 64        //蛇身數組大小
  52.         u8 degree = 0,snakeNum = 1,dirX = 1,dirY = 0,dirOX,dirOY; //難度等級,當前蛇身長度,方向變量
  53.         u8 LED[LED_HEIGHT][LED_WIDTH];//界面顯示矩陣
  54.         u8 headX = 0,headY = 0,appleX,appleY;        //蛇頭位置變量   食物位置變量
  55.         u8 t,time; //移動速度控制變量
  56.         u8 r = 0;
  57.         //蛇身位置數組
  58.         u8 snakeX[BLOCKNUM];
  59.         u8 snakeY[BLOCKNUM];
  60.         while(1){ //難度選擇
  61.                 showDegree(degree);
  62.                 if(keySelect())
  63.                         if(degree<7)degree++;
  64.                         else degree = 0;
  65.                 else if(keyStart())break;
  66.         }       
  67.         time = 100-degree*10;//延時長度
  68.         cleanLED(LED);//清屏
  69.         LED[headY][headX] = 1;//顯示蛇頭
  70.         //將蛇頭保存到數組第一位
  71.         snakeX[0] = headX;
  72.         snakeY[0] = headY;
  73.         //運動方向初始化
  74.         dirOX = dirX;
  75.         dirOY = dirY;
  76.         //隨機食物出現的位置
  77.         randXY(&appleX,&appleY,LED,t);
  78.         t = 0;
  79.         while(1){
  80.                 /*
  81.                   游戲主循環(huán)
  82.                 */
  83.                 display(LED);//顯示       
  84. //                //按鍵操作檢測,防止多余的按鍵判斷,獲取最近一次的方向               
  85.                 if(dirY!=-1 && (keyUP()||keyY()))setDir(&dirX,&dirY,-1);
  86.                 else if(dirY!=1 &&(keyDOWN()||keyA()))setDir(&dirX,&dirY,1);
  87.                 else if(dirX!=-1 &&(keyLEFT()||keyX()))setDir(&dirY,&dirX,-1);
  88.                 else if(dirX!=1 &&(keyRIGHT()||keyB()))setDir(&dirY,&dirX,1);
  89.                
  90.                 //暫停
  91.                 if(keyStart())
  92.                         while(!keyStart())
  93.                                 display(LED);
  94.                                                                 
  95.                 /*
  96.                         每隔一定時間進行移動
  97.                         以下代碼功能為移動判斷與移動操作
  98.                 */
  99.                 r++;//時間種子
  100.                 if(t++ >time){         //間隔性的移動
  101.                         t = 0;
  102.                         if((dirX!=0 && dirOX ==0)||(dirY!=0 && dirOY==0)){//合法方向輸入引用
  103.                                  dirOX = dirX;
  104.                                 dirOY = dirY;
  105.                         }                               
  106.                         setHead(&headX,dirOX);        //按照合法的輸入方向提前運動一次
  107.                         setHead(&headY,dirOY);                       
  108.                         if(headY == appleY && headX == appleX){                //若蛇頭運行的下一位是食物
  109.                                         //數組加長
  110.                                         snakeNum++;
  111.                                          snakeX[snakeNum-1] = appleX;
  112.                                         snakeY[snakeNum-1] = appleY;
  113.                                         //下一個蘋果
  114.                                         randXY(&appleX,&appleY,LED,r);
  115.                         }else if(!LED[headY][headX]){                                //若前方為無障礙物
  116.                                  //前方無障礙
  117.                                 moveSnakeXY(snakeX,snakeNum,headX);
  118.                                 moveSnakeXY(snakeY,snakeNum,headY);
  119.                         }else if(headX == snakeX[0]&& headY == snakeY[0]){//
  120.                                 moveSnakeXY(snakeX,snakeNum,headX);
  121.                                 moveSnakeXY(snakeY,snakeNum,headY);
  122.                         }else {                                //若前方有障礙物體,則觸發(fā)蜂鳴器并返回錯誤值                       
  123.                                 return GAMEOVER;
  124.                         }
  125.                         changeLED(LED,snakeX,snakeY,snakeNum,appleX,appleY);//顯示矩陣刷新
  126.                 }
  127.         }
  128.         return GAMEOVER;//游戲結束,返回錯誤信息
  129. }                                                                                                        
復制代碼

所有資料51hei提供下載:
自制貪吃蛇游戲機資料.7z (80.24 KB, 下載次數: 38)


1555753858494.jpeg (734.54 KB, 下載次數: 171)

1555753858494.jpeg

1555753874610.jpeg (420.95 KB, 下載次數: 166)

1555753874610.jpeg

1555753868443.jpeg (311.43 KB, 下載次數: 180)

1555753868443.jpeg

1555753883588.jpeg (646.15 KB, 下載次數: 172)

1555753883588.jpeg

Screenshot_20180517-123331.png (351.7 KB, 下載次數: 181)

Screenshot_20180517-123331.png

Screenshot_20180517-123316.JPG (143.54 KB, 下載次數: 168)

Screenshot_20180517-123316.JPG

Screenshot_20180517-122805.png (670.85 KB, 下載次數: 210)

Screenshot_20180517-122805.png

接線圖.jpg (493.49 KB, 下載次數: 166)

接線圖.jpg

作者: MHYC133    時間: 2022-3-28 08:22
天!死亡走線!
(但是還是好強)
作者: 3花木城    時間: 2022-3-28 21:08
方格點陣感覺比圓點舒服




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲国产18 | 国产精久久久久久久 | 久久一二| 欧美成年黄网站色视频 | 国产高清毛片 | 日日夜夜免费精品视频 | 久在草 | 欧美日韩亚洲三区 | 国产欧美日韩综合精品一 | 日韩免费视频一区二区 | 亚洲欧美在线观看视频 | 精品一二三区在线观看 | 91视频在线看 | 国产精品成人在线观看 | 国产欧美精品区一区二区三区 | 国产最新精品视频 | 日韩伦理一区二区 | 国产视频一区二区 | 欧美激情久久久 | 亚洲一区在线日韩在线深爱 | 国产精品久久久亚洲 | 国产精品久久国产精品久久 | 亚洲成人av| 亚洲黄色av | 国产一区二区三区 | 日韩精品一区二区三区中文在线 | 紧缚调教一区二区三区视频 | 99精品久久久| 亚洲欧洲在线观看视频 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 中文字幕一区二区三区不卡在线 | 国产三级| 亚洲一区综合 | 免费国产精品久久久久久 | 亚洲男人天堂 | 中文字幕在线人 | 精品在线一区 | 日韩在线视频一区二区三区 | 国产精品美女久久久久久免费 | 国产精品1区 | 亚洲精品久久嫩草网站秘色 |