嵌入式项目之俄罗斯方块

嵌入式项目之俄罗斯方块

 

这款游戏最初是由苏联的游戏制作人Alex Pajitnov 制作的,他看似简单但却变化无穷,令人上瘾,并且可以引发无限遐想。

 

项目背景:

花了几十大洋,买了一本《深入体验C语言项目开发》,第一章就是在Turbo C上开发俄罗斯方块。书中要求必须在TC平台上开发,而且需要使用内的图形函数来实现。主要是因为书中使用了计算机定时器和这个函数头文件来运行,并且在显示器上输出,由于此两条对于学嵌入式方面作用不是很大而且写起来有难度,需要重新学计算机显示函数及定时器函数,最终决定用STM32开发板来实现。

 

项目步骤:

①.功能分析

②.工具选择

③.总体设计

④.数据结构

⑤.算法确定

⑥.具体编码

⑦.测试运行

⑧、项目总结

 

一、功能分析

系统需求分析

a. 下一个方块的预览

b. 按键控制

c. 及时更新显示

d. 记录和显示分数等级

e. 开始菜单

f. 英雄榜记录数据

g. 游戏难易程度选择

二、工具选择

a. 开发软件:keil4

b. 硬件平台:正点原子mini STM32

c. 下载软甲:mcuisp

三、总体设计

1. 板级初始化

2. 中断按键

3. 定时器初始化

4. 方块控制

4.1. 判断是否能否移动

4.2. 清除移动前的方块

4.3. 移动后显示

5. 记录并更新显示

5.1. 清除满行

5.2. 整体下移

5.3. 增加分数(适当时增加游戏级数)

 

四、数据结构:

a、底板数据结构

嵌入式项目之俄罗斯方块_第1张图片 

嵌入式项目之俄罗斯方块_第2张图片 

b、方块数据结构

嵌入式项目之俄罗斯方块_第3张图片 

嵌入式项目之俄罗斯方块_第4张图片嵌入式项目之俄罗斯方块_第5张图片嵌入式项目之俄罗斯方块_第6张图片 

五、算法确定

使用底板的属性:int flag_hold;/*此点是否已被占用【1,占用;0,没有占用】*/ 结合着方块的形状来判断此方块是否能继续移动。每个方块定下来之后,马上更新底板各个点的标志,记录各点的颜色,并做清除满行等工作。

 

 

六、具体编码

书中在TC上开发用了700行代码,而在STM32上开发,核心函数代码300行加主函数代码100行。

a、核心函数

void init_fra_lev(void);/*分数等级显示初始化*/

void update_fra_lev(u32 fraction, u8 level);/*更新分数等级的结果*/

void board_init(void);/*底板初始化*/

void display_box(u8 m, u8 n,struct SHAPE sh);/*在指定位置显示方块*/

void erase_box(u8 m, u8 n,struct SHAPE sh);/*擦除指定方块*/

void preview_display_box(struct SHAPE sh);/*预览位置显示方块*/

void preview_erase_box(void);/*擦除预览位置方块*/

u8 judge_move(u8 m, u8 n, struct SHAPE sh);/*判断能否左右下移动*/

u8 judge_change_move(u8 m, u8 n, struct SHAPE sh);/*判断方块能否变形*/

void record_board(u8 m, u8 n, struct SHAPE sh);/*记录底板数据*/

void update_display(void);/*更新显示底板*/

u8 clean_full_line(void);/*清除满行*/

void menu(void);/*菜单选项*/

void game_over(void);/*游戏结束*/

 

b、主函数中需要生成随机函数来产生下一个方块:

/*生成下一个方块在预览区显示*/

preview = (m*n*key+m+n+key) % 19;

 

七、测试运行

一边测试,一边玩游戏,只能说搞游戏开发好爽啊!!!效果不错,直接上图:

主界面:

嵌入式项目之俄罗斯方块_第7张图片嵌入式项目之俄罗斯方块_第8张图片 


游戏界面:

嵌入式项目之俄罗斯方块_第9张图片嵌入式项目之俄罗斯方块_第10张图片嵌入式项目之俄罗斯方块_第11张图片嵌入式项目之俄罗斯方块_第12张图片嵌入式项目之俄罗斯方块_第13张图片嵌入式项目之俄罗斯方块_第14张图片 


英雄榜:

嵌入式项目之俄罗斯方块_第15张图片嵌入式项目之俄罗斯方块_第16张图片嵌入式项目之俄罗斯方块_第17张图片 


游戏级别设置:

so easy~~~~步步高打火机,那里不会点那里!

嵌入式项目之俄罗斯方块_第18张图片嵌入式项目之俄罗斯方块_第19张图片嵌入式项目之俄罗斯方块_第20张图片 


游戏说明:

按键使用说明

嵌入式项目之俄罗斯方块_第21张图片嵌入式项目之俄罗斯方块_第22张图片嵌入式项目之俄罗斯方块_第23张图片 

 


就是这三个按键:

嵌入式项目之俄罗斯方块_第24张图片

看一下预览区的效果:

下一个将出现的方块和现在的分数及游戏级别!

嵌入式项目之俄罗斯方块_第25张图片嵌入式项目之俄罗斯方块_第26张图片嵌入式项目之俄罗斯方块_第27张图片 

再看一遍,个人觉得好漂亮的说:

嵌入式项目之俄罗斯方块_第28张图片 

 


八、项目总结:

此项目,从最初立项到完成项目报告历时四天三夜,对这个速度还是有点不满意,期间因为算法的问题,想过放弃,但是鄙人最大的毛病就是---猴子掰玉米,搞任何事都坚持不到最后!周末看了两晚上的电影,最终还是决定挑战一下自己,结果还是瞎鼓捣出来了,还是蛮欣慰的!这是第一次给自己指定项目,个人懒散问题等导致醒目进度出奇的慢。在思创和在迈博的两个C语言项目(学生成绩管理系统和万年历)都只花了一个晚上时间就搞定,可能是有双眼睛在后面盯着自己,所以。。。。这毛病一定要改!

还有就是,半个月前听了王总的建议,当晚就看了《实习大叔》。google的工作方式太酷了,我觉得太安逸了不太好。但是我尝试着去体验了一下,在精神高度崩溃的状态下去散散心,提提神,看场电影,晒晒太阳,效果确实好多了。但我觉得还是少一点好,路飞哥说的一句话,我一直记得----现在不玩命,将来命玩你!

 

你可能感兴趣的:(项目开发)