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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機+ILI9163 TFT設計的經典懷舊游戲貪吃蛇源碼

[復制鏈接]
跳轉到指定樓層
樓主
利用51單片機設計經典懷舊游戲貪吃蛇。


ILI9163液晶屏+單片機源程序如下:
  1. /**************************************************************************

  2. mini80 或者 mini80E 按鍵,上 s6,下 s14,左 s11, 右 s9, s4 重新開始

  3. 可以按照自己需要重新定義鍵盤掃描程序中的值,在key_sweep.h 中


  4. ****************************************************************************/

  5. #include "reg52.h"
  6. #include "KEY_SWEEP.H"
  7. #include "SNAKE.h"
  8. #include "9325tp.h"


  9. //=========================================主程序========================================//
  10. main()
  11. {
  12.      ILI9325_Initial();
  13.         Init_SNAKE();
  14.         while(1)
  15.         {
  16.         Run_SNAKE();
  17.         Key();
  18.         }
  19. }
復制代碼
  1. /***********************************************************************************
  2. /* 文件名稱:        SNAKE.c
  3. /* 功         能:        貪吃蛇游戲代碼
  4. /* 署         名:        張先永(原作者)
  5. /* 時         間:        2009年10月11日
  6. /* 備         注:
  7. /*               游戲按鍵由于需要快速的響應,所有按鍵通過線與擴展為中斷按鍵
  8. /*               LCD 液晶顯示器在PO口 需要上拉電阻
  9. /***********************************************************************************/

  10. #include <reg52.H>  
  11. #include <KEY_SWEEP.H>
  12. #include"9325tp.h"
  13. #include "SNAKE.h"


  14. #define uchar unsigned char
  15. //=================================================================
  16. //    使用結構體定義變量   使程序的名稱更加的清楚
  17. //=================================================================
  18. struct
  19. {
  20.         uchar X;
  21.         uchar Y;                        
  22.         uchar Yes;
  23. }Food;        //食物結構體

  24. #define SNAKE_Max_Long 20                 //最大長度
  25. struct
  26. {
  27.         uchar X[SNAKE_Max_Long];
  28.         uchar Y[SNAKE_Max_Long];
  29.         uchar Long;  
  30.         uchar Life;
  31.         uchar Score;                                        //蛇的分數
  32.         uchar Level;                                        //蛇的等級              
  33. }Snake;        //蛇結構體

  34. uchar Key_V_temp=0;                                     //取出上次按鍵值

  35. //=================================================================
  36. //函數功能:1ms延時函數
  37. //晶    振:11.0592        M
  38. //入口參數:n
  39. //出口參數:無
  40. //=================================================================
  41. void Delay_1mS(unsigned int n)
  42. {
  43.         unsigned int  i;
  44.         unsigned char j;
  45.         
  46.         for(i=0;i<n;i++)
  47.                 for(j=0;j<120;j++)         ;
  48. }

  49. //=================================================================
  50. //函數名稱:void Init_time0 (void)
  51. //函數功能:初始化定時器1  用于產生隨機數種子 ,用于放置實物
  52. //入口參數:無
  53. //出口參數:無
  54. //=================================================================
  55. void Init_time0 (void)
  56. {
  57.         EA=1;
  58.         ET1=1;
  59.         TMOD|=0x10;
  60.         TH1=0X00;
  61.         TL1=0X00;
  62.         TR1=1;
  63. }
  64. void time1 (void) interrupt  3
  65. {
  66.         TH1=0X00;
  67.         TL1=0X00;
  68. }


  69. //=================================================================
  70. //函數名稱:Trun_On_Point     Trun_Off_Point (uchar x,uchar y)
  71. //函數功能:點亮或者熄滅 一個點。用于顯示蛇身體
  72. //入口參數:無
  73. //出口參數:無
  74. //特別說明:此 Trun_On,函數換成其他的就可以兼容其他的液晶
  75. //          入8*8 點陣   12864 等
  76. //=================================================================
  77. void Trun_On_Point (uchar x,uchar y,uchar color)
  78. {
  79.         Bar((4*(x+2)),(4*(y+2)),(4*(x+3)),(4*(y+3)),color);
  80. }

  81. void Trun_Off_Point (uchar x,uchar y)
  82. {
  83.         Bar((4*(x+2)),(4*(y+2)),(4*(x+3)),(4*(y+3)),0xBE5F);        
  84. }

  85. //=================================================================
  86. //函數名稱:void Init_SNAKE(void)  
  87. //函數功能:繪制游戲界面,初始化游戲等級等參數
  88. //入口參數:無
  89. //出口參數:無
  90. //=================================================================
  91. void Init_SNAKE(void)   
  92. {
  93.         uchar i;

  94.         Init_time0();
  95.         //***********繪制游戲界面********************//
  96.         CLR_Screen(0xBE5F);
  97.         Rectangle(8,8-1,85,120,0xaa);//繪制一個矩形框, 0-127
  98.          LCD_PutString(88,8,"Score",0x00ff,0xBE5F);
  99.         LCDShow_uCharNumber(96,24,Snake.Score,0x00ff,0xBE5F);
  100.          LCD_PutString(88,81,"LEVEL",0x00ff,0xBE5F);
  101.         LCDShow_uCharNumber(96,97,Snake.Level,0x00ff,0xBE5F);

  102.         //***********初始化蛇參數********************//
  103.         Snake.Long=2;                                    //定義初始化蛇的長度
  104.         Snake.Life=0;                                    //初始化蛇還活著
  105.         Snake.Score=0;
  106.         Food.Yes=1;                                       
  107.         Key_Value=0;
  108.     Key_V_temp=0;

  109.         for(i=0;i<Snake.Long;i++)                //將蛇給賦值
  110.         {
  111.                 Snake.X[i]=i+2;
  112.                 Snake.Y[i]=2;
  113.         }                                                        
  114.         for(i=0;i<Snake.Long;i++)                //將蛇給畫出來
  115.         {
  116.                 Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
  117.         }                                                        
  118. }
  119. //=================================================================
  120. //函數名稱:void Display_dead(uchar i)
  121. //函數功能:顯示死亡界面
  122. //入口參數:無
  123. //出口參數:無
  124. //=================================================================
  125. void Display_dead(void)
  126. {

  127.         LCD_PutString(10,40,"GAME OVER",0x00ff,0xBE5F);
  128.         while(Key_Value!=Key_Enter)
  129.              {
  130.                   Key();
  131.                  }
  132.         Init_SNAKE();
  133. }

  134. //=================================================================
  135. //函數名稱:void Display_Pass(uchar i)
  136. //函數功能:顯示過關界面
  137. //入口參數:無
  138. //出口參數:無
  139. //=================================================================
  140. void Display_Pass(void)
  141. {
  142.         Snake.Level++;        
  143.         LCD_PutString(18,40,"You are",0xcc88,0xBE5F);
  144.         LCD_PutString(34,56,"WIN!",0xcc88,0xBE5F);
  145.         while(Key_Value!=Key_Enter)
  146.              {
  147.                   Key();
  148.                  }
  149.         Init_SNAKE();
  150. }
  151. //=================================================================
  152. //函數名稱:void Run_SNAKE(void)
  153. //函數功能:蛇運動函數 (游戲精華)
  154. //入口參數:無
  155. //出口參數:無
  156. //=================================================================
  157. void Run_SNAKE(void)
  158. {
  159.         uchar i=0;

  160.         /*********************根據按鍵選擇蛇的運動方向*******************/
  161.         if((Key_Value==Key_Right&&Key_V_temp!=Key_Left)||(Key_Value==Key_Left&&Key_V_temp==Key_Right))
  162.         {
  163.                 Trun_Off_Point(Snake.X[0],Snake.Y[0]);                //先把蛇尾給熄滅掉

  164.                 for(i=0;i<Snake.Long-1;i++)                    //蛇身都是它前一段的蛇身的位置
  165.                 {
  166.                         Snake.X[i]=Snake.X[i+1];
  167.                         Snake.Y[i]=Snake.Y[i+1];
  168.                 }

  169.                 Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+1;
  170.                 Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+0; //蛇頭向你要求的方向移動
  171.                
  172.                 for(i=0;i<Snake.Long;i++)                                    //這個讓蛇顯示出來的函數
  173.                 {
  174.                         Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
  175.                 }
  176.                 Key_V_temp=Key_Right;
  177.         }

  178.         if((Key_Value==Key_Left&&Key_V_temp!=Key_Right)||(Key_Value==Key_Right&&Key_V_temp==Key_Left))
  179.         {

  180.                 Trun_Off_Point(Snake.X[0],Snake.Y[0]);                    //先把蛇尾給熄滅掉
  181.                
  182.                 for(i=0;i<Snake.Long-1;i++)                     //蛇身都是它前一段的蛇身的位置
  183.                 {
  184.                         Snake.X[i]=Snake.X[i+1];
  185.                         Snake.Y[i]=Snake.Y[i+1];
  186.                 }
  187.                
  188.                 Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]-1;
  189.                 Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+0; //蛇頭向你要求的方向移動
  190.                
  191.                 for(i=0;i<Snake.Long;i++)                                    //這個讓蛇顯示出來的函數
  192.                 {
  193.                         Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
  194.                 }
  195.                 Key_V_temp=Key_Left;
  196.         }
  197.         if(( Key_Value==Key_Up&&Key_V_temp!=Key_Down)||( Key_Value==Key_Down&&Key_V_temp==Key_Up))
  198.         {
  199.                 Trun_Off_Point(Snake.X[0],Snake.Y[0]);                   //先把蛇尾給熄滅掉
  200.                
  201.                 for(i=0;i<Snake.Long-1;i++)                   //蛇身都是它前一段的蛇身的位置
  202.                 {
  203.                         Snake.X[i]=Snake.X[i+1];
  204.                         Snake.Y[i]=Snake.Y[i+1];
  205.                 }
  206.                
  207.                 Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+0;
  208.                 Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]-1; //蛇頭向你要求的方向移動
  209.                
  210.                 for(i=0;i<Snake.Long;i++)                                   //這個讓蛇顯示出來的函數
  211.                 {
  212.                         Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
  213.                 }
  214.                 Key_V_temp=Key_Up;
  215.         }
  216.         if(( Key_Value==Key_Down&&Key_V_temp!=Key_Up)||( Key_Value==Key_Up&&Key_V_temp==Key_Down))
  217.         {
  218.                 Trun_Off_Point(Snake.X[0],Snake.Y[0]);                  //先把蛇尾給熄滅掉
  219.                
  220.                 for(i=0;i<Snake.Long-1;i++)                  //蛇身都是它前一段的蛇身的位置
  221.                 {
  222.                         Snake.X[i]=Snake.X[i+1];
  223.                         Snake.Y[i]=Snake.Y[i+1];
  224.                 }
  225.                
  226.                 Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+0;
  227.                 Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+1; //蛇頭向你要求的方向移動
  228.                
  229.                 for(i=0;i<Snake.Long;i++)                                   //這個讓蛇顯示出來的函數
  230.                 {
  231.                         Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
  232.                 }
  233.                 Key_V_temp=Key_Down;
  234.         }
  235.         

  236.         /****************根據按鍵選擇蛇的運動程序結束*******************/
  237.         /////////////////////////////////////////////////////////////////

  238.         
  239.         /************************判斷蛇是否死亡***********************/
  240.         if(Snake.X[Snake.Long-1]>=19||Snake.Y[Snake.Long-1]>=28)//判蛇頭是否撞到墻壁
  241.         {
  242.                 Snake.Life=1;
  243.         }
  244.         for(i=3;i<Snake.Long;i++)//從第三節開始判斷蛇頭是否咬到自己
  245.         {
  246.                 if(Snake.X[i]==Snake.X[0]&&Snake.Y[i]==Snake.Y[0])
  247.                 {
  248.                         Snake.Life=1;
  249.                 }
  250.         }
  251.         if(Snake.Life==1)          //if the snake over
  252.         {
  253.                
  254.                 Display_dead();
  255.         }
  256.         /******************判斷蛇是否死亡程序結束***********************/
  257.         /////////////////////////////////////////////////////////////////


  258.         /************************判斷蛇是否最長了**********************/
  259.         if(Snake.Long==SNAKE_Max_Long)
  260.         {
  261.                
  262.                 Display_Pass();
  263.         }
  264.         /////////////////////////////////////////////////////////////////                                                                                   

  265.         /*************************判蛇是否吃到食物**********************/               
  266.         if(Snake.X[Snake.Long-1]==Food.X&&Snake.Y[Snake.Long-1]==Food.Y)//
  267.         {
  268.                 //Trun_Off_Point(Food.X,Food.Y);                  //消隱食物
  269.                 Snake.Long++;//蛇節數加1
  270.                 Snake.X[Snake.Long-1]=Food.X;
  271.                 Snake.Y[Snake.Long-1]=Food.Y;
  272.                 Snake.Score+=10;
  273.                 LCDShow_uCharNumber(96,24,Snake.Score,0x00ff,0xBE5F);
  274.                 Food.Yes=1;  //食物標志置1
  275.         }
  276. ……………………

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


所有資料51hei提供下載:
2.4 貪吃蛇實驗.rar (186.78 KB, 下載次數: 26)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区在线观看国产 | 久久精品黄色 | av片免费 | 久久久一区二区三区 | 国产精品美女在线观看 | 免费观看av| 日韩精品1区2区 | 在线看片国产精品 | 久久99久久| 精品91| 亚洲一区二区三区免费视频 | 久久久久成人精品免费播放动漫 | 亚洲精品乱码久久久久久9色 | 久久国产视频一区 | 91社影院在线观看 | 亚洲精品国产第一综合99久久 | 九九热精品视频在线观看 | a级大片免费观看 | 91精品国产综合久久久久 | 久久中文字幕在线 | 视频一区二区中文字幕日韩 | 91在线精品播放 | 亚洲一区二区三区在线播放 | 第一福利社区1024 | 国产欧美视频一区二区三区 | 97国产一区二区 | 北条麻妃一区二区三区在线观看 | 欧美精品久久久久久久久久 | 91久久综合| av毛片| 欧美在线日韩 | 亚洲成人黄色 | 国产精品视频在线观看 | 欧美一级毛片久久99精品蜜桃 | 亚洲 中文 欧美 | 99精品视频一区二区三区 | 99国产精品久久久久 | 亚洲一区亚洲二区 | 欧美二区在线 | 国产69精品久久99不卡免费版 | 伊人影院99|