找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2711|回复: 3
收起左侧

正点原子stm32精英版的flappy bird源码

[复制链接]
ID:298809 发表于 2018-12-26 11:35 | 显示全部楼层 |阅读模式
2l贴图片
2.jpg

flappy bird.rar

403.71 KB, 下载次数: 17, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:298809 发表于 2018-12-26 11:39 | 显示全部楼层

  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"
  7. #include "tpad.h"
  8. #include "stdlib.h"

  9. #define a 7    //小鸟的长和宽
  10. #define b 15   

  11. #define width 60   //柱子宽度
  12. #define high 80    //柱子缺口高度

  13. void DrawDird(u16 x,u16 y,int fly)      //画小鸟
  14. {
  15.         int x1,y1,x2,y2,x3,y3,x4,y4;
  16.        
  17.         if(fly==0)   //下落
  18.         {
  19.         x1=x-a;y1=y-b;
  20.         x2=x+a;y2=y+b;
  21.         x3=x-b;y3=y-a;
  22.         x4=x+b;y4=y+a;
  23.                
  24.        
  25.                
  26.         }
  27.         else if(fly==1)   //飞翔
  28.         {
  29.         x1=x+a;y1=y-b;
  30.         x2=x-a;y2=y+b;
  31.         x3=x-b;y3=y+a;
  32.         x4=x+b;y4=y-a;
  33.                
  34.        
  35.                
  36.         }
  37.        
  38.         LCD_Draw_Circle(x,y,5);     //小鸟的身体
  39.         LCD_DrawLine(x1,y1,x3,y3);
  40.         LCD_DrawLine(x1,y1,x4,y4);
  41.         LCD_DrawLine(x2,y2,x3,y3);
  42.         LCD_DrawLine(x2,y2,x4,y4);

  43. }
  44.   
  45. void DrawBar(u16 x,u16 y)    //画柱子
  46. {
  47.         int x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8;  
  48.         //POINT_COLOR=color;
  49.        
  50.         x1=x,y1=0;
  51.         x2=x+60,y2=0;
  52.         x3=x,y3=y;
  53.         x4=x+60,y4=y;
  54.         x5=x,y5=y+100;
  55.         x6=x+60,y6=y+100;
  56.         x7=x,y7=500;
  57.         x8=x+60,y8=500;
  58.        
  59.        
  60.         LCD_DrawLine(x1,y1,x2,y2);
  61.         LCD_DrawLine(x1,y1,x3,y3);
  62.         LCD_DrawLine(x2,y2,x4,y4);
  63.         LCD_DrawLine(x3,y3,x4,y4);
  64.        
  65.         LCD_DrawLine(x5,y5,x6,y6);
  66.         LCD_DrawLine(x5,y5,x7,y7);
  67.         LCD_DrawLine(x6,y6,x8,y8);
  68.         LCD_DrawLine(x7,y7,x8,y8);
  69.        
  70.        
  71.        
  72. }



  73. int main(void)
  74. {         int i = 0;     //游戏进程
  75.          u8 score=0;     //分数
  76.         u8 num[12];      //存放分数字符串
  77.          
  78.          
  79.          u16 barx=300;   //柱子x
  80.          u16 bary=100;   //柱子y
  81.         u16 birdx=150;   //小鸟x
  82.         u16 birdy=200;   //小鸟y
  83.          
  84.          
  85.          //以下是背景
  86.         u16 firex=300;       //火焰x
  87.         u16 firey=200;       //火焰y
  88.         u16 waterx=300;       //水x
  89.         u16 watery=150;       //水y
  90.         u16 gx=300;       //gx
  91.         u16 gy=150;       //gy
  92.         u16 hx=300;       //hx
  93.         u16 hy=150;       //hy
  94.        


  95.         delay_init();                     //延时函数初始化          
  96.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  97.         uart_init(115200);                 //串口初始化为115200
  98.         LED_Init();                             //LED端口初始化
  99.         LCD_Init();
  100.        
  101.   TPAD_Init(6);                        //初始化触摸按键         
  102.   
  103. while(1)
  104. {       
  105.        
  106.           POINT_COLOR=BLACK;   
  107.        
  108.        
  109.         DrawDird(birdx,birdy,TPAD_Scan(1));  //画鸟*********************************
  110.        

  111.         birdy = birdy + 15;    //下落
  112.        
  113.         if(barx==92) {score++;}   //得分
  114.        
  115.         sprintf((char*)num,"SCORE:%d",score);   //将分数存储在字符串里
  116.        
  117.         LCD_ShowString(30,30,200,16,16,num);    //打印分数
  118.        
  119.         if(i>20)                            //游戏开始后稍等一段时间
  120.         {
  121.         DrawBar(barx,bary);                  //画柱子*********************************
  122.         barx = barx-8;   //柱子移动
  123.         if(barx==4)    //柱子刷新
  124.                 {barx = 300;
  125.                 bary = rand()%350;}
  126.         }
  127.        
  128.         /****************************背景的移动与渐变************************************************/
  129.         POINT_COLOR=0x0000+i;
  130.         LCD_Draw_Circle(firex,firey,2*i);
  131.         POINT_COLOR=0x0000+2*i;
  132.         LCD_Draw_Circle(waterx,watery,3*i);
  133.         POINT_COLOR=0x0000+3*i;
  134.         LCD_Draw_Circle(gx,gy,i);
  135.         POINT_COLOR=0x0000+3*i;
  136.         LCD_Draw_Circle(hx,hy,6*i);
  137.         POINT_COLOR=BLACK;
  138.         /**********************************************************************************************/

  139.        
  140.         /*******************************背景的刷新***********************************/       
  141.         firex = firex-30;
  142.   if(firex==0)   
  143.                 {firex = 300;
  144.                 firey = rand()%350;}       
  145.                
  146.         waterx = waterx-50;
  147.   if(waterx==0)   
  148.                 {waterx = 300;
  149.                 watery = rand()%350;}
  150.                
  151.         gx = gx-15;
  152.   if(gx==0)   
  153.                 {gx = 300;
  154.                 gy = rand()%350;}       
  155.                
  156.         hx = hx-5;
  157.   if(hx==0)   
  158.                 {hx = 300;
  159.                 hy = rand()%350;}       
  160.         /*******************************************************************************/       
  161.        
  162.                
  163.         if(birdy>=490) break;  //摔死
  164.         if(birdy<=50) birdy =60;//不能飞太高
  165.         if(TPAD_Scan(1))        //成功捕获到了一次上升沿(此函数执行时间至少15ms)
  166.                 {
  167.                         birdy = birdy - 35;                //跳
  168.                 }
  169.                
  170.         if(barx<150&&barx>90)      //撞死在柱子上
  171.                 if(bary>birdy||bary<birdy-100) break;
  172.        

  173.                
  174.        
  175.   if(i%2==0) LCD_Clear(WHITE-1*i);  //渐变色清屏
  176.        

  177.         i++;   //游戏进程
  178. }

  179. while(1)  //game over
  180. {



  181. LCD_ShowString(110,200,210,24,24,"GAME OVER");
  182.         LCD_ShowString(120,300,200,16,16,num);
  183.        
  184. }
  185. }
复制代码


回复

使用道具 举报

ID:298809 发表于 2018-12-26 11:40 | 显示全部楼层
论坛的发帖功能真蛋疼啊
回复

使用道具 举报

ID:1 发表于 2018-12-26 15:40 | 显示全部楼层
1912193931 发表于 2018-12-26 11:40
论坛的发帖功能真蛋疼啊

是指哪方便?我们好改进一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表