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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4472|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人激情视频在线 | 免费 视频 1级 | 精品九九| 欧美三区视频 | 欧美韩一区二区三区 | 麻豆久久久久久久久久 | 天天影视网天天综合色在线播放 | 久久中文字幕一区 | 久久久久久亚洲精品 | 在线色网 | 一区二区三区四区在线视频 | 国产传媒在线观看 | 国产成人精品一区二区 | 污污免费网站 | 久久精品国产一区二区电影 | 精品一区二区三区四区 | 日韩在线视频免费观看 | 99色播 | 中文字幕一区二区三区不卡 | 亚洲先锋影音 | caoporn国产| 亚洲va欧美va人人爽午夜 | 韩日一区二区三区 | 91成人午夜性a一级毛片 | 欧美日韩一区二区在线 | 精品国产鲁一鲁一区二区张丽 | m豆传媒在线链接观看 | 亚洲一区二区免费 | 国产精品区一区二 | 91xxx在线观看 | 91麻豆精品一区二区三区 | 色综合视频在线 | 中文字幕第100页 | 日韩在线不卡 | 久久爱黑人激情av摘花 | 成人在线国产 | 亚洲精品乱码久久久久久按摩观 | 精品久久久久久红码专区 | 日本一区二区视频 | 久久久做| 天天欧美 |