资源描述:
《arm课程设计俄罗斯方块》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、目录1.设计任务及要求12.总体设计思路及功能描述12.1设计思路12.2功能描述22.3程序流程图23.各部分程序功能及详细说明33.1游戏界面函数33.2方块显示基本函数游戏界面函数43.2.1绘制方块43.2.2擦除方块43.2.3随机生成一个方块53.3方块处理基本函数游戏界面函数53.3.1左移函数53.3.2变形函数63.3.3碰撞函数63.3.4消行函数74.调试的步骤及调试过程中出现的问题以及解决方法84.1碰撞函数调试方块84.2其它函数调试方块94.2.1随机生成一个方块变形函数94.2.2变形函数94.2.3消行函数与得分、等级计算105.设计心得体会
2、10附录:11(一)源程序(主函数)11(二)参考文献131.设计任务及要求本实验主要是用arm实验箱实现一个简单的游戏设计,我选择的是设计一个俄罗斯方块小游戏,主要任务是实现方块的移动、变形、随机出现下一个方块、触屏控制、停止、嵌套、消行、计分等功能。要求:良好的方块形状设计,绘制七种常见的基本图形(方形、长条形、7形、反7形、Z形、反Z形、T形),各个方块要实现它的移动、变形;良好的用户界面,有关分数和等级显示等。2.总体设计思路及功能描述2.1设计思路1)整个游戏界面的设计和控制:设计一个左边是10X15带有框格的游戏界面。右边为控制和显示的界面,控制自然是绘制按键图
3、案通过触屏控制来实现。显示的内容有下一个、得分、等级。2)方块的移动:通过定时器1,改变方块左右移动的地址来实现。3)方块的变形:可通过运用三维数组储存7个基本方块形状,采用线性代数转置的思路改变数组的值并设定一个缓冲区储存变形数组,从而达到变形的效果。4)方块的碰边处理:可设定一个二维数组储存整个游戏界面的最新状态,有方块为1,没有则为0,并在游戏界面周围填入1,通过方块地址和数组位置的转换判定数组中的值,为0说明可走,为1则不能通过,从而实现碰边处理。5)方块的嵌套:与碰边原理相似,可将之前停止在界面上的方块位置对应数组中的值赋1,再判断当前方块每一列的最后一行下是否有
4、方块,实现方块嵌套。6)方块的随机出现:当方块到达最后一行或嵌套成功后停止,然后将出现下一个方块,可通过定时器取出末尾三位实现随机性。并在右边显示下一个方块的形状。7)消行处理:可通过处理界面的数组判断某一行是否都为1,若为1就执行将上一行赋给下一行,并将第一行赋为0。8)分数及等级的计算:当方块到达最后一行或嵌套成功后停止分数加1分,当消行成功加10饭呢,当分数超过100分时等级加1。132.1功能描述a)左、右、下移动;b)方块变形;c)随机出现下一个方块;d)触屏控制界面(左、右、下、变形、开始、暂停、结束)e)左右碰撞检测;f)嵌套停止判断g)消行h)得分等级显示2
5、.2程序流程图图2-1程序流程图131.各部分程序功能及详细说明3.1游戏界面函数本实验设计了一个左边是10X15附有框图的游戏界面。右边为控制和显示的界面,分别有显示下一个方块、开始、结束、暂停、变形、向左、向右、向下、得分、等级等,并且大部分都是通过触屏控制达到相应效果。voidInitGame(){U16i,j;Set_Color(GUI_BLACK);//设定背景颜色APIFill_Rect(0,0,639,479);//填充底色for(i=0;i<10;i++)//10x15格游戏界面for(j=0;j<15;j++){Set_Color(GUI_BLACK);D
6、raw_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*4
7、0+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,60);//开始、结束、暂停Fill_Rect(14*40-20,80,15*40,120);Fill_Rect(14*40-20,140,15*40,180);Fill_Circle(12*40,7*40+20,40);//变形、左、右、下Fill_Circle(10*40,9*40+10,40);Fill