- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录
1. 设计任务及要求 1
2. 总体设计思路及功能描述 1
2.1 设计思路 1
2.2 功能描述 2
2.3 程序流程图 2
3. 各部分程序功能及详细说明 3
3.1 游戏界面函数 3
3.2 方块显示基本函数游戏界面函数 4
3.2.1 绘制方块 4
3.2.2 擦除方块 4
3.2.3 随机生成一个方块 5
3.3 方块处理基本函数游戏界面函数 5
3.3.1 左移函数 5
3.3.2 变形函数 6
3.3.3 碰撞函数 6
3.3.4 消行函数 7
4. 调试的步骤及调试过程中出现的问题以及解决方法 8
4.1 碰撞函数调试方块 8
4.2 其它函数调试方块 9
4.2.1 随机生成一个方块变形函数 9
4.2.2 变形函数 9
4.2.3 消行函数与得分、等级计算 10
5. 设计心得体会 10
附录: 11
(一)源程序(主函数) 11
(二)参考文献 13
设计任务及要求
本实验主要是用arm实验箱实现一个简单的游戏设计,我选择的是设计一个俄罗斯方块小游戏,主要任务是实现方块的移动、变形、随机出现下一个方块、触屏控制、停止、嵌套、消行、计分等功能。要求:良好的方块形状设计,绘制七种常见的基本图形(方形、长条形、7形、反7形、Z形、反Z形、T形),各个方块要实现它的移动、变形;良好的用户界面,有关分数和等级显示等。
总体设计思路及功能描述
设计思路
整个游戏界面的设计和控制:设计一个左边是10X15带有框格的游戏界面。右边为控制和显示的界面,控制自然是绘制按键图案通过触屏控制来实现。显示的内容有下一个、得分、等级。
方块的移动:通过定时器1,改变方块左右移动的地址来实现。
方块的变形:可通过运用三维数组储存7个基本方块形状,采用线性代数转置的思路改变数组的值并设定一个缓冲区储存变形数组,从而达到变形的效果。
方块的碰边处理:可设定一个二维数组储存整个游戏界面的最新状态,有方块为1,没有则为0,并在游戏界面周围填入1,通过方块地址和数组位置的转换判定数组中的值,为0说明可走,为1则不能通过,从而实现碰边处理。
方块的嵌套:与碰边原理相似,可将之前停止在界面上的方块位置对应数组中的值赋1,再判断当前方块每一列的最后一行下是否有方块,实现方块嵌套。
方块的随机出现:当方块到达最后一行或嵌套成功后停止,然后将出现下一个方块,可通过定时器取出末尾三位实现随机性。并在右边显示下一个方块的形状。
消行处理:可通过处理界面的数组判断某一行是否都为1,若为1就执行将上一行赋给下一行,并将第一行赋为0。
分数及等级的计算:当方块到达最后一行或嵌套成功后停止分数加1分,当消行成功加10饭呢,当分数超过100分时等级加1。
功能描述
左、右、下移动;
方块变形;
随机出现下一个方块;
触屏控制界面(左、右、下、变形、开始、暂停、结束)
左右碰撞检测;
嵌套停止判断
消行
得分等级显示
程序流程图
图 2-1 程序流程图
各部分程序功能及详细说明
游戏界面函数
本实验设计了一个左边是10X15附有框图的游戏界面。右边为控制和显示的界面,分别有显示下一个方块、开始、结束、暂停、变形、向左、向右、向下、得分、等级等,并且大部分都是通过触屏控制达到相应效果。
void InitGame ()
{
U16 i,j;
Set_Color(GUI_BLACK); //设定背景颜色API
Fill_Rect(0,0,639,479); //填充底色
for(i=0;i10;i++) //10x15格游戏界面
for(j=0;j15;j++)
{
Set_Color (GUI_BLACK);
Draw_VLine(10+i*32, 15, 480);//竖线
Draw_HLine(15+j*30, 10, 10+11*32); //横线
Set_Color (GUI_WHITE); //填充白色
Fill_Rect(10+i*32+1, 15+j*30+1,10+(i+1)*32-1,15+(j+1)*30-1);//填充
}
Set_Color(GUI_GREEN);
Set_Font (CHINESE_FONT16);
Disp_String (CN_start下一个CN_end,9*40-20,27);
Disp_String (CN_start得分CN_end,9*40-10,5*40+10);
Disp_String (CN_start等级CN_end,13*40-10,5*40+10);
Set_Color(GUI_YELLOW);
Fill_Rect(14*40-20,20,15*40,6
文档评论(0)