OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16256|回复: 51

在mini板上也做Flappybird游戏

[复制链接]

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
发表于 2017-1-25 16:18:14 | 显示全部楼层 |阅读模式
本帖最后由 posystorage 于 2017-1-25 16:54 编辑

新人第一次发帖,有点小紧张
首先感谢原作者:http://www.openedv.com/thread-27336-1-1.html
看到原作者microbai搞的Flappybird感觉蛮好玩的
我因为没有战舰板,所以就寻思着一致到mini上来跑。
这是效果










我移植主要是重写了绘图的方法,增加了一些资源。原作者的之前取模的好多图素,基本都保留了。
战舰板因为有外置的sram,所以原作者在外置sram上面建立了好多缓冲,使用的策略是帧缓存再加上每个移动物体其后面的背景的备份
u16 FlappyBird_Frame[320][240] __attribute__((at(0X68000000))); //153600
u16 FlappyBird_Bird_Buff[18][26] __attribute__((at(0X68026000)));//936
u16 FlappyBird_column_Buff[3][259][39] __attribute__((at(0X68028000))) ;//59904
u16 FlappyBird_column_Buff_BG[3][259][39] __attribute__((at(0X68037000)));//59904
这里掐指一算用了136k的ram,足够吧mini板上的RCT6内存爆两遍还有余了。
所以说首先肯定是不能要帧缓存的了,数据只能直接刷到屏里面。
64脚的芯片木有fsmc,只能io模拟。用原子哥的LCD.c里面的函数,就算是快速画点,也是太慢了。所以大概用了下面几个策略来解决。
1、需要移动和反复刷新的图素(鸟,柱子,下方移动的绿色进度条)都给建立了缓存。
因为鸟有两种姿态,一种平飞,另一种是坠落的鸟。实际上就是相互之间的转置,为了节约内存,用来联合来处理。
柱子,则是将柱子本身和两个柱子墩中间的背景,以及柱子右边3个像素宽度的的背景先写入缓存(这样每次柱子可移动1-3像素,下次刷屏之际再下一个位置刷就行,老图像会被覆盖),最后一次性刷到屏里面
u16 FlappyBird_GreenBar_Buff[12][240];
u16 FlappyBird_column_Buff[257][42];//20560
union Bird_Buff
{                  
    u16 normal_Bird[18][26];//正常鸟的缓存
    u16 f_mode_Bird[26][18];//坠落的鸟的缓存
}FlappyBird_Bird_Buff;
2、大面积的图,比如说整个背景,则是先用dma+tim8的方法刷入。
因为lcd的rd引脚在定时器8的通道2上面,所以说用tim8做一个pwm,然后吧定时器的溢出作为dma的使能,(先设置好刷屏窗口,吧cs拉低和rs拉高)由dma直接从flash或者sram吧数据搬到GPIO-ODR,数据使能脚的pwm时间到使能一下,图就进去了。
实测从flash的数据19个时钟周期就能刷到屏幕上,sram的数据16个差不多就可以了。
3、大面积的单色。类似于高速的清屏。
先设置好刷屏窗口,吧cs拉低和rs拉高,16bit数据放在gpiob上,定时器设置做三个周期的pwm(0分频,2溢出)。实测大约3.5ms就刷满全屏,实际使用的时候稍微调整下时间就好(原子哥的LCD_clear大概要30+ms)

因为我只有9325的屏幕,为了快速lcd的函数和游戏的函数有混合
比如说刷柱子的时候用到了这样来处理一部分柱子在屏幕外的情况:
        LCD_WriteReg(lcddev.setxcmd, x);//设置光标位置
        for( j=0; j < 257; j++ )
        {
            LCD_WriteReg(lcddev.setycmd, j);//设置光标位置
            LCD_WriteRAM_Prepare();    //开始写入GRAM
            LCD_CS_CLR;
            LCD_RS_SET;//数据
            for( i = 0; i < 42; i++ )
            {
                if((i+x)>239)break;//超出区域的控制   
                GPIOB->ODR=FlappyBird_column_Buff[j];
                LCD_WR_CLR;
                LCD_WR_SET;
            }
        }
所以说就不支持其他主控的屏幕了(面面俱到的考虑比较费脑力,而且搞了也没法试验对不对),需要其他屏幕玩的童鞋需要移植下。
屏幕驱动需要移植的地方:lcd.c 文件、dma_lcd.c文件和Engine.c文件的FlappyBird_Frame_DrawColumn和FlappyBird_Frame_DrawBird_Play函数

因为带了的图片资源差不多256k,在调试的时候频繁烧入很浪费时间,也比较伤flash所以我固定了资源的地址,且平时不需要烧录,第一次下载,或者更新资源才需要下载,方法是:
在flappybird_pic_map.h文件下有
#define refresh_flash  //如果开启这个define,那么将重新刷写资源进入flash,几乎需要擦写整个片区,同时清零历史成绩记录
//建议第一次烧录的时候将资源烧入,后面关闭开关


另外,理论上需要STM32103RE芯片(图片资源写在了256-512k的地方),但是RC容量和RD容量芯片可以自行尝试(用jlink之类)超区域写入是否有问题(一般没问题),RB和R8就洗洗睡吧,stlink似乎也是可以洗洗睡了

难度有5级可调,新手,简单,困难,非常困难和速度增加(也就是分越高越快)
成绩记录有四个最高排名,这些数据都记录在eeprom里面。
原作者的暂停键我搞不明白有啥用,改成点进去是成绩记录和设置难度了,哈哈。

原作者用的空引脚读adc得到做随机数种子,我改成都内部温度传感器和内部基准的加和了。而且随机数种子只需要一次就可以了,不知道原作为毛每次都做

鸟的姿态除了平飞和垂直下坠,我加了斜上和歇下飞的效果,稍微自然一点了
而且在撞到柱子的时候,也有和手机上一样的加了坠效果机


FlappyBird原子mini板 9325屏幕. ...
1.JPG
3.JPG
4.JPG
5.JPG
22.JPG

FlappyBird原子mini板 9325屏幕.zip

1.03 MB, 下载次数: 1912

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2878
金钱
2878
注册时间
2016-6-17
在线时间
321 小时
发表于 2017-1-25 16:25:02 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2017-1-25 16:27:30 | 显示全部楼层
Guosir 发表于 2017-1-25 16:25
发个源代码  谢谢

第一次在这发帖,还不太会玩,源代码和视频貌似传上去了,为毛图还没上去呢。。。
回复 支持 反对

使用道具 举报

7

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2012-7-16
在线时间
504 小时
发表于 2017-1-25 16:49:13 | 显示全部楼层
顶,非常不错。
回复 支持 反对

使用道具 举报

3

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2878
金钱
2878
注册时间
2016-6-17
在线时间
321 小时
发表于 2017-1-25 17:06:28 | 显示全部楼层
posystorage 发表于 2017-1-25 16:27
第一次在这发帖,还不太会玩,源代码和视频貌似传上去了,为毛图还没上去呢。。。

谢谢
回复 支持 反对

使用道具 举报

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
发表于 2017-1-26 14:39:01 | 显示全部楼层
666666666666666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

VIVILU 该用户已被删除
发表于 2017-2-22 15:57:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

VIVILU 该用户已被删除
发表于 2017-3-5 18:41:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2017-4-15 13:34:41 | 显示全部楼层

应该是9325没初始化的问题吧
回复 支持 反对

使用道具 举报

1

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2017-2-19
在线时间
26 小时
发表于 2017-4-15 15:32:52 | 显示全部楼层
mark 学习
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-15 18:46:30 | 显示全部楼层
楼主非常有钻研精神啊,为这种精神点赞,这个液晶刷屏帧率,简直吊爆了....
很受启发,膜拜下。
没有办不到,只有想不到。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

163

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1214
金钱
1214
注册时间
2016-5-19
在线时间
297 小时
发表于 2017-4-15 20:10:06 | 显示全部楼层
喜欢做个mark.
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-4-17 08:28:08 | 显示全部楼层
楼主有源代码吗?
回复 支持 反对

使用道具 举报

12

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2014-9-18
在线时间
47 小时
发表于 2017-4-18 08:52:36 | 显示全部楼层
厉害
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-5 19:40:00 | 显示全部楼层
请问楼主9325是什么尺寸的?几个排针啊?
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2017-5-6 00:52:33 | 显示全部楼层
jacquelinehe 发表于 2017-5-5 19:40
请问楼主9325是什么尺寸的?几个排针啊?

2.4寸。接口直插原子哥的所有开发板
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-7 14:37:08 | 显示全部楼层
posystorage 发表于 2017-5-6 00:52
2.4寸。接口直插原子哥的所有开发板

谢楼主~
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-11 12:59:39 | 显示全部楼层
代码烧到板子里结果屏幕这样是啥原因啊?C:\Users\Samsung\Desktop\QQ图片20170511125737
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-11 13:01:07 | 显示全部楼层
一条白一条乱彩色
回复 支持 反对

使用道具 举报

9

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-4-26
在线时间
64 小时
发表于 2017-5-11 14:43:23 | 显示全部楼层
厉害。顶一个。
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2017-5-11 23:40:06 | 显示全部楼层

图像 资源少进去了么?
回复 支持 反对

使用道具 举报

4

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2017-3-9
在线时间
63 小时
发表于 2017-5-12 19:46:15 | 显示全部楼层
mark                             
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-13 23:11:41 | 显示全部楼层
posystorage 发表于 2017-5-11 23:40
图像 资源少进去了么?

没有吧,源代码没有做任何删减直接烧到mini板里的。屏幕是一条白一条花
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2017-5-14 00:38:52 | 显示全部楼层
jacquelinehe 发表于 2017-5-13 23:11
没有吧,源代码没有做任何删减直接烧到mini板里的。屏幕是一条白一条花

1、拍个效果图给看看
2、在flappybird_pic_map.h文件下有
#define refresh_flash  //如果开启这个define,那么将重新刷写资源进入flash,几乎需要擦写整个片区,同时清零历史成绩记录
//建议第一次烧录的时候将资源烧入,后面关闭开关
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-14 12:54:16 | 显示全部楼层
posystorage 发表于 2017-5-14 00:38
1、拍个效果图给看看
2、在flappybird_pic_map.h文件下有
#define refresh_flash  //如果开启这个defin ...

屏幕上是乱的
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-14 12:55:02 | 显示全部楼层
posystorage 发表于 2017-5-14 00:38
1、拍个效果图给看看
2、在flappybird_pic_map.h文件下有
#define refresh_flash  //如果开启这个defin ...

屏幕上是乱的
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-14 13:37:07 | 显示全部楼层
posystorage 发表于 2017-5-14 00:38
1、拍个效果图给看看
2、在flappybird_pic_map.h文件下有
#define refresh_flash  //如果开启这个defin ...

不知道有没有上传成功,烧录进去显示不出来
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2017-5-14 19:55:43 | 显示全部楼层

没看见图,我也不知道 具体情况哇
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-8-3
在线时间
9 小时
发表于 2017-5-17 17:50:17 | 显示全部楼层
posystorage 发表于 2017-5-14 19:55
没看见图,我也不知道 具体情况哇

吧LCD.c换成原子哥的文件,编译通过烧在板子上显示不出来游戏开始键、难度调节,但是点击是可以进入游戏的,进去以后柱子的颜色是白的这是咋回事
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2017-5-18 01:12:11 | 显示全部楼层
jacquelinehe 发表于 2017-5-17 17:50
吧LCD.c换成原子哥的文件,编译通过烧在板子上显示不出来游戏开始键、难度调节,但是点击是可以进入游戏 ...

仔细再读一遍帖子。
因为我只有9325的屏幕,为了快速lcd的函数和游戏的函数有混合
比如说刷柱子的时候用到了这样来处理一部分柱子在屏幕外的情况:
        LCD_WriteReg(lcddev.setxcmd, x);//设置光标位置
        for( j=0; j < 257; j++ )
        {
            LCD_WriteReg(lcddev.setycmd, j);//设置光标位置
            LCD_WriteRAM_Prepare();    //开始写入GRAM
            LCD_CS_CLR;
            LCD_RS_SET;//数据
            for( i = 0; i < 42; i++ )
            {
                if((i+x)>239)break;//超出区域的控制   
                GPIOB->ODR=FlappyBird_column_Buff[j];
                LCD_WR_CLR;
                LCD_WR_SET;
            }
        }
所以说就不支持其他主控的屏幕了(面面俱到的考虑比较费脑力,而且搞了也没法试验对不对),需要其他屏幕玩的童鞋需要移植下。
屏幕驱动需要移植的地方:lcd.c 文件、dma_lcd.c文件和Engine.c文件的FlappyBird_Frame_DrawColumn和FlappyBird_Frame_DrawBird_Play函数
回复 支持 反对

使用道具 举报

1

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2016-10-17
在线时间
98 小时
发表于 2017-7-8 17:08:46 | 显示全部楼层
厉害,膜拜
回复 支持 反对

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-9
在线时间
14 小时
发表于 2017-7-9 01:46:22 | 显示全部楼层
6666666
回复 支持 反对

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-7-9
在线时间
14 小时
发表于 2017-7-9 01:46:37 | 显示全部楼层
运行流畅吗
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-8-3
在线时间
16 小时
发表于 2017-7-27 17:38:05 | 显示全部楼层
厉害
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2017-7-28 11:32:19 | 显示全部楼层

看视频,个人认为相当流畅了
回复 支持 反对

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
发表于 2017-7-29 15:07:51 | 显示全部楼层
6666666
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-4-11
在线时间
16 小时
发表于 2017-7-29 16:06:16 | 显示全部楼层
必须赞二十一个!!!加油!!!厉害!!!
回复 支持 反对

使用道具 举报

32

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1049
金钱
1049
注册时间
2012-3-30
在线时间
321 小时
发表于 2017-7-31 06:20:40 | 显示全部楼层
蛮灵格,不简单。
回复 支持 反对

使用道具 举报

1

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2017-8-21
在线时间
32 小时
发表于 2017-8-21 11:42:41 | 显示全部楼层
真的很不错
回复 支持 反对

使用道具 举报

13

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2017-3-7
在线时间
63 小时
发表于 2017-9-17 16:47:20 | 显示全部楼层
真心6
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-1-28
在线时间
0 小时
发表于 2018-1-28 16:16:15 | 显示全部楼层
为什么用正点原子精英版下载后显示不出来?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-1-28
在线时间
0 小时
发表于 2018-1-28 16:18:34 | 显示全部楼层
irukanji 发表于 2018-1-28 16:16
为什么用正点原子精英版下载后显示不出来?

屏幕都是一样的
回复 支持 反对

使用道具 举报

57

主题

316

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1344
金钱
1344
注册时间
2018-1-11
在线时间
156 小时
发表于 2018-1-28 16:31:45 | 显示全部楼层
666,学习学习学习
回复 支持 反对

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
 楼主| 发表于 2018-1-29 16:25:17 | 显示全部楼层

精英是用fsmc驱动的吧。我这个是io模拟驱动的。
回复 支持 反对

使用道具 举报

6

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2018-4-10
在线时间
13 小时
发表于 2018-5-5 11:54:34 | 显示全部楼层
好厉害啊,我是一个五子棋游戏,不知道怎么设计成这样的界面,小白摸索太难了,不知道要不要一个一个看视频学习了,零基础
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2018-10-13
在线时间
42 小时
发表于 2018-10-20 10:45:54 | 显示全部楼层
厉害了,谢谢分享。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-10-23
在线时间
5 小时
发表于 2018-10-24 13:00:55 | 显示全部楼层
厉害,学习了
回复 支持 反对

使用道具 举报

1

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2018-11-7
在线时间
16 小时
发表于 2018-11-8 23:08:35 | 显示全部楼层
学习了,帮顶一个!!
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手入门

积分
0
金钱
0
注册时间
2018-11-10
在线时间
1 小时
发表于 2018-11-11 12:48:51 | 显示全部楼层
ennnnnnnn
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2018-1-3
在线时间
44 小时
发表于 2018-11-16 20:44:43 | 显示全部楼层
看不懂,我还是要多学
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 17:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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