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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1878|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)貪吃蛇點(diǎn)陣

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:313060 發(fā)表于 2018-12-25 13:07 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
51貪吃蛇點(diǎn)陣

單片機(jī)源程序如下:
  1. #include "reg51.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
  2. #include<intrins.h>
  3. #include<math.h>
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. //72,80,75,77是方向鍵對(duì)應(yīng)的鍵值
  7. #define UP 5
  8. #define DOWN 6
  9. #define LEFT 7
  10. #define RIGHT 8
  11. #define SANKE 1        //蛇的坐標(biāo)標(biāo)識(shí)
  12. #define FOOD 1
  13. #define BAR 0

  14. sbit SRCLK=P3^6;
  15. sbit RCLK=P3^5;
  16. sbit SER=P3^4;
  17. //按鍵
  18. sbit Left = P3^1;
  19. sbit Right = P3^0;
  20. sbit Up = P3^2;
  21. sbit Down = P3^3;
  22. unsigned int NLL=1;
  23. //u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
  24. unsigned char ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  25. //初始化地圖17*17
  26. unsigned char map[8][8] ={0};
  27. //初始化蛇頭坐標(biāo)
  28. unsigned char snack[20] = {27};
  29. //初始化食物坐標(biāo)
  30. unsigned char food = 17;
  31. //蛇長(zhǎng)
  32. char len = 1;
  33. // 存儲(chǔ)坐標(biāo)數(shù)字與x,y的轉(zhuǎn)化函數(shù)
  34. void tran(unsigned char num,unsigned char *x,unsigned char *y);
  35. //打印游戲
  36. void print_game(void);
  37. // 獲取方向函數(shù)(注意當(dāng)蛇身超過一節(jié)時(shí)不能回頭)
  38. int get_dir(int old_dir);
  39. //移動(dòng)蛇身函數(shù)
  40. void move_snack(int dir);
  41. //生產(chǎn)食物的函數(shù)
  42. unsigned char generate_food(void);
  43. //判斷蛇死活的函數(shù)
  44. int isalive(void);
  45. //移動(dòng)蛇身函數(shù)
  46. /*******************************************************************************
  47. * 函 數(shù) 名         : delay
  48. * 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
  49. *******************************************************************************/
  50. void delay(unsigned int i)
  51. {
  52.         while(i--);        
  53. }

  54. /*******************************************************************************
  55. * 函數(shù)名         : Hc595SendByte(u8 dat)
  56. * 函數(shù)功能                   : 向74HC595發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
  57. * 輸入           : 無
  58. * 輸出                  : 無
  59. *******************************************************************************/
  60. void Hc595SendByte(unsigned char dat)
  61. {
  62.         unsigned char a;
  63.         SRCLK=0;
  64.         RCLK=0;
  65.         for(a=0;a<8;a++)
  66.         {
  67.                 SER=dat>>7;
  68.                 dat<<=1;

  69.                 SRCLK=1;
  70.                 _nop_();
  71.                 _nop_();
  72.                 SRCLK=0;        
  73.         }

  74.         RCLK=1;
  75.         _nop_();
  76.         _nop_();
  77.         RCLK=0;
  78. }

  79. /*******************************************************************************
  80. * 函 數(shù) 名       : main
  81. * 函數(shù)功能                 : 主函數(shù)
  82. * 輸    入       : 無
  83. * 輸    出             : 無
  84. *******************************************************************************/
  85. void main()
  86. {
  87.         int dir = UP,n,i=1;

  88.         while(1)
  89.         {        
  90.                 move_snack(dir);               
  91.                 for(n=0;n<50;n++)
  92.                 {
  93.                         print_game();                        
  94.                         dir = get_dir(dir);        
  95.                 }
  96.                 if(!isalive())
  97.                 {
  98.                         break;
  99.                 }
  100.         }        
  101.                
  102. }
  103. void print_game(void)
  104. {
  105.         int i,j;
  106.         unsigned  int zhi=0;

  107.         for(i = 0;i < 8;i ++)
  108.         {
  109.                 zhi = 0;
  110.                 for(j = 0;j < 8;j ++)
  111.                 {
  112.                         if(map[i][j] == 1)
  113.                         {
  114.                                 zhi=zhi+(0x01<<j);
  115.                         }
  116.                 }
  117.                 P0=ledwei[i];                  //位選
  118.                 Hc595SendByte(zhi);
  119.                 delay(100);
  120.                 Hc595SendByte(0x00);        
  121.                
  122.         }
  123.         
  124. }
  125. void move_snack(int dir)
  126. {
  127.         int last = snack[0],current;
  128.         int i,j;
  129.         int grow = 0;
  130.         unsigned char x,y,fx,fy;
  131.         tran(food,&fx,&fy);
  132.         tran(snack[0],&x,&y);
  133.         switch(dir)
  134.         {
  135.                 case UP:
  136.                         y++;
  137.                         break;
  138.                 case DOWN:
  139.                         y--;
  140.                         break;
  141.                 case LEFT:
  142.                         x--;
  143.                         break;
  144.                 case RIGHT:
  145.                         x++;
  146.                         break;
  147.         }
  148. //        snack[0] = ((x ^ 0) << 4) ^ y;
  149.         snack[0] = x*8+y;
  150.         //蛇吃到食物
  151.         if(snack[0] == food)
  152.         {
  153.                 grow = 1;
  154.                 food = generate_food();
  155.         }
  156.         
  157.         for(i = 0;i < len;i ++)
  158.         {
  159.                 if(i == 0)
  160.                         continue;
  161.                 current = snack[i];
  162.                 snack[i] = last;
  163.                 last = current;
  164.         }
  165.         if(grow)
  166.         {
  167.                 snack[len] = last;
  168.                 len++;
  169.         }
  170.         for(j = 0;j < 8; j ++)
  171.         {
  172.                 for(i = 0;i < 8;i ++)
  173.                 {
  174.                         if(i == 0 || i == 7 || j == 0 || j == 7)
  175.                         {
  176.                                 map[i][j] = 1;
  177.                         }
  178.                         else if(i == fx && j == fy)
  179.                         {                                
  180.                                 map[i][j] = 1;
  181.                         }
  182.                         else
  183.                         {
  184.                                 map[i][j] = 0;
  185.                         }
  186.                                 
  187.         
  188.                 }
  189.         }
  190.         for(i = 0;i < len;i ++)
  191.         {
  192.                 tran(snack[i],&x,&y);
  193.                 if(snack[i] > 0)
  194.                 {
  195.                         map[x][y] = SANKE;
  196.                 }
  197.         }

  198. }
  199. //存儲(chǔ)坐標(biāo)數(shù)字與x,y的轉(zhuǎn)換函數(shù)
  200. void tran(unsigned char num,unsigned char *x,unsigned char *y)
  201. {
  202.         // *x = num >> 4;
  203.         // *y = (unsigned char)(num << 4 ) >> 4;
  204.         *x = num / 8;
  205.         *y = num % 8;        
  206. }
  207. //生產(chǎn)食物的函數(shù)
  208. unsigned char generate_food(void)
  209. {
  210.         unsigned char food_,fx,fy;
  211.         unsigned int in_snack=0,i;
  212. //        srand((unsigned int)time(NULL));
  213.                 srand(NLL);
  214.         do
  215.         {        
  216.                 NLL++;
  217.                 in_snack=0;
  218.                 food_ =        rand() % 64;
  219.                 tran(food_,&fx,&fy);
  220.                 for(i = 0;i < len;i ++)
  221.                 {
  222.                         if(food_ == snack[i])
  223.                         {
  224.                                 in_snack = 1;
  225.                         }
  226.                 }
  227.         }while(fx == 0 || fx == 7 || fy == 0 || fy == 7 || in_snack);
  228.         
  229.         return food_;
  230. }
  231. //獲取方向的函數(shù)
  232. int get_dir(int old_dir)
  233. ……………………

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

所有資料51hei提供下載:

單片機(jī)貪吃蛇.zip

51.13 KB, 下載次數(shù): 22, 下載積分: 黑幣 -5

貪吃蛇.docx

59.47 KB, 下載次數(shù): 7, 下載積分: 黑幣 -5

HC6800-ES V2.0 新版.pdf

759.71 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线一区二区 | 色欧美片视频在线观看 | 91影库 | 日韩视频专区 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 国产精品视频久久 | 91久久精品一区二区三区 | 中文字幕综合 | 国精产品一区二区三区 | 一区二区三区精品视频 | 99久久精品国产一区二区三区 | 天天拍天天操 | 成人免费xxxxx在线视频 | www.久久久久久久久久久 | 久久高清亚洲 | 亚洲国产成人精品女人 | 亚洲毛片在线 | 欧美一级在线观看 | 欧美aaaaa | 日本在线免费观看 | 欧美aaa级 | 国产精品毛片久久久久久久 | 日韩欧美视频在线 | 一级毛毛片 | aa级毛片毛片免费观看久 | 午夜精品久久久久久久99黑人 | 日本小电影网站 | 成人精品一区亚洲午夜久久久 | 99久久国产综合精品麻豆 | 欧美国产一区二区 | 国产一区二区三区久久久久久久久 | 中文字幕在线看第二 | 婷婷综合网 | 蜜桃av鲁一鲁一鲁一鲁 | 国产一区二区精华 | 欧美综合久久久 | 亚洲视频在线免费观看 | 成人乱人乱一区二区三区软件 | 亚洲精品字幕 | 国产一级毛片视频 | 亚洲成人免费电影 |