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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4318|回復: 0
打印 上一主題 下一主題
收起左側

單片機貪吃蛇程序 支持液晶屏,矩陣鍵盤操作

[復制鏈接]
跳轉到指定樓層
樓主
解壓縮,可以查看這個貪吃蛇程序。支持液晶屏,矩陣鍵盤操作


單片機源程序如下:
  1. /*
  2. * 貪吃蛇
  3. *
  4. * author:cole3
  5. * date:2010.11.28
  6. */


  7. #include <reg52.h>
  8. #include <stdlib.h>
  9. #include "lcd.h"

  10. #define LEN_MAX 40

  11. sbit KeyIn1 = P2^4;
  12. sbit KeyIn2 = P2^5;
  13. sbit KeyIn3 = P2^6;
  14. sbit KeyIn4 = P2^7;
  15. sbit KeyOut1 = P2^3;
  16. sbit KeyOut2 = P2^2;
  17. sbit KeyOut3 = P2^1;
  18. sbit KeyOut4 = P2^0;


  19. void key(void);
  20. void rand_dot(void);
  21. void turncount(int length,int position,int row,int page);


  22. int i=4,j=0,length=5,direction=2,k=0,dotx,doty,temx[LEN_MAX],temy[LEN_MAX];
  23. char speed=5, t_flag=0;

  24. main()
  25. {
  26.         unsigned int t,flag=1;

  27.         LCD12864_init();
  28.         TMOD = 0x01;
  29.         TH0 = 0x3C;
  30.         TL0 = 0xB0;
  31.         ET0 = 0;
  32.         TR0 = 0;
  33.         EA = 1;

  34.         printf2lcd(0, 0, "----------------");
  35.         printf2lcd(0, 2, "Gluttonous Snake");
  36.         printf2lcd(0, 4, "----------------");
  37.         printf2lcd(0, 6, "  Made By Kingst");
  38.         for (t=0; t<60000; t++);

  39.         ClearSree(0);

  40.         for (t=0; t<length; t++)
  41.         {
  42.                 change(t,0);
  43.                 temx[t] = t;
  44.                 temy[t] = 0;
  45.         }
  46.         rand_dot();

  47.         ET0 = 1;
  48.         TR0 = 1;

  49.         while(flag)
  50.         {
  51.                 key(); // 按鍵掃描

  52.                 // 是否前行
  53.                 if (t_flag == 1)
  54.                 {
  55.                         t_flag = 0;
  56.                         switch (direction)
  57.                         {
  58.                                 case 0: change(i,--j); break;
  59.                                 case 1: change(--i,j); break;
  60.                                 case 2: change(++i,j); break;
  61.                                 case 3: change(i,++j); break;
  62.                         }
  63.        
  64.                         clear(temx[0], temy[0]);
  65.                         for(t=0; t<length-1; t++)
  66.                         {
  67.                                 temx[t] = temx[t+1];
  68.                         }
  69.                         temx[length-1] = i;
  70.        
  71.                         for(t=0; t<length-1; t++)
  72.                         {
  73.                                 temy[t] = temy[t+1];
  74.                         }
  75.                         temy[length-1] = j;
  76.        
  77.                         if((i == dotx) && (j == doty))
  78.                         {
  79.                                 temx[length] = dotx;
  80.                                 temy[length++] = doty;
  81.                                 rand_dot();
  82.                         }
  83.                 }
  84.                 // 是否撞墻
  85.                 if ((i < 0) || (i > 31))
  86.                 {
  87.                         flag = 0;       
  88.                 }
  89.                 if ((j < 0) || (j > 15))
  90.                 {
  91.                         flag = 0;               
  92.                 }
  93.                 // 是否撞自己
  94.                 for (t=0; t<length-4; t++)
  95.                 {
  96.                         if ((i == temx[t]) && (j == temy[t]))
  97.                         {
  98.                                 flag = 0;
  99.                         }
  100.                 }

  101.                 // 是否晉級
  102.                 if (length == LEN_MAX)
  103.                 {
  104.                         TR0 = 0;
  105.                         ET0 = 0;
  106.                         ClearSree(0);
  107.                         speed--;
  108.                         if (speed < 0)
  109.                         {
  110.                                 printf2lcd(4, 1, "You Win!");
  111.                                 while (1);
  112.                         }
  113.                         else
  114.                         {
  115.                                 printf2lcd(3, 1, "Next level!");
  116.                                 for (t=0; t<60000; t++);
  117.                                 ClearSree(0);
  118.                         }
  119.                         length = 5;
  120.                         direction = 2;
  121.                         i = 4;
  122.                         j = 0;
  123.                         k = 0;
  124.                         for (t=0; t<length; t++)
  125.                         {
  126.                                 change(t,0);
  127.                                 temx[t] = t;
  128.                                 temy[t] = 0;
  129.                         }
  130.                         rand_dot();
  131.                         TR0 = 1;
  132.                         ET0 = 1;
  133.                 }
  134.         }

  135.         // game over
  136.         TR0 = 0;
  137.         ET0 = 0;
  138.         ClearSree(0);
  139.         printf2lcd(3, 1, "Game over!");
  140.         printf2lcd(3, 3, "score:");
  141.         ShowNum(9, 3, (length-5)+(LEN_MAX-5)*(5-speed));

  142.         while(1);                               
  143. }


  144. void key(void)
  145. {
  146.         KeyOut1 = 0;
  147.         KeyOut2 = 1;
  148.         KeyOut3 = 1;
  149.         KeyOut4 = 1;
  150.         if ((KeyIn4 == 0) && (direction != 3))
  151.                 direction = 0;
  152.        
  153.         KeyOut1 = 1;
  154.         KeyOut2 = 1;
  155.         KeyOut3 = 0;
  156.         KeyOut4 = 1;
  157.         if ((KeyIn4 == 0) && (direction != 0))
  158.                 direction = 3;

  159.         KeyOut1 = 1;
  160.         KeyOut2 = 0;
  161.         KeyOut3 = 1;
  162.         KeyOut4 = 1;
  163.         if ((KeyIn4 == 0) && (direction != 2))
  164.                 direction = 1;

  165.         KeyOut1 = 1;
  166.         KeyOut2 = 1;
  167.         KeyOut3 = 1;
  168.         KeyOut4 = 0;
  169.         if ((KeyIn4 == 0) && (direction != 1))
  170.                 direction = 2;
  171. }


  172. void rand_dot(void)
  173. {
  174.           int ii;
  175.        
  176.         while (1)
  177.         {
  178.                 dotx = rand() % 32;
  179.                   doty = rand() % 16;

  180.                   for (ii=0; ii<length; ii++)
  181.                 {
  182.                         if ((dotx == temx[ii]) && (doty == temy[ii]))
  183.                                 break;
  184.                 }
  185. ……………………

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

所有資料51hei提供下載:
貪吃蛇程序.rar (41.5 KB, 下載次數: 16)


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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美一区二区三区在线看蜜臀 | 日韩毛片 | 91九色视频 | 日韩视频在线免费观看 | 美国一级片在线观看 | 中文字幕一区二区三区在线观看 | 亚洲一区二区三区四区五区午夜 | 国产一区二区三区在线视频 | 精品国产一区二区国模嫣然 | 国产ts人妖系列高潮 | 久久爱综合 | 自拍视频在线观看 | 香蕉视频91| 免费av毛片 | 日韩一级免费电影 | 国产成都精品91一区二区三 | 欧美成人自拍 | 国产精品久久av | 成人精品鲁一区一区二区 | 秋霞电影一区二区 | 精品国产伦一区二区三区观看说明 | 欧美精品在线免费 | 久草网站| 国产成人免费 | 成人精品国产一区二区4080 | 在线观看黄色电影 | 99re99| 国产精品亚洲一区二区三区在线 | www.se91| 亚洲第一在线视频 | 亚洲福利精品 | 欧美午夜剧场 | 日韩精品一区二区三区四区视频 | 日韩精品一区二区三区中文在线 | 免费成年网站 | 日本午夜免费福利视频 | 欧美久久一区二区 | 色欧美综合 | 久久国产电影 | 日韩 欧美 二区 | 久久亚洲一区 |