- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
俄罗斯方块mfc实验报告
程序设计实践设计报告课题名称:俄罗斯方块(MFC版)学生姓名:黄嘉慧班 级:2012211113班内序号:27学 号:2012210389日 期:2014.6.1实验概述1.1 课题目标和主要内容。本课题的主要内容是用MFC实现经典游戏俄罗斯方块的编写。目标是能够正常运行,并且无过于严重的问题。使用的平台为MFC(基于对话框)。1.2当分数=50*等级 开始游戏1.2DIAN升级并重新开始游戏结束游戏采用计分升级制来进行游戏。当一次消去一行时,得一分,一次两行得4分,一次3行,得9分,一次4行,得16分。每50分为一个等级,得分足够则升级并重新开始游戏。2. 程序设计2.1 系统总体框架用一个4维数组DiamondStruct[7][4][4][4]来表示所有的方块,用一个POINT类型的DiamondPos来表示方块当前的位置,然后通过一个二维数组BlockPanel[][],来表示整个游戏界面,同时进行障碍的添加。游戏过程中,通过改变DiamondPos来进行方块的下降以及左右移动,通过DiamondStruct[7][4][4][4]中第二个参数的改变来进行方块的变换。2.2系统详细设计【1】模块划分图及描述菜单控制结束游戏重新开始暂停游戏【2】类关系图及描述CWinApp与CDialog为基类。其它为添加的类。【3】程序流程图及描述开始消行操作生成新的下坠物将新的下坠物代替旧的下坠物将旧的下坠物作为当前下坠物到达底部消行操作游戏结束处理下降一个单位否是否是到达底部到达顶部游戏结束结束【4】存储结构,内存分配主要存储结构为数组。同时分配内存的有,画笔,Diamond类的指针,Panel类的指针,Block类的指针,Mill类的指针,Manager类的指针。2.3 关键算法分析【1】bool Diamond::FullLine(){bool IsFull,Full=false;pManager-SeriesLine=0;for(int iy=0;iy=pPanel-nVGridNum;iy++){IsFull=true;for(int ix=0;ix=pPanel-nHGridNum;ix++){if(!pBlock-BlockPanel[ix][iy]) IsFull=false;}if(IsFull){Full=true;pManager-SeriesLine++;for(int jy=iy;jy0;jy--){Sleep(10);for(int jx=0;jx=pPanel-nHGridNum;jx++){pBlock-BlockPanel[jx][jy]=pBlock-BlockPanel[jx][jy-1];}}}}pManager-LineNumber+=pManager-SeriesLine;pManager-Result+=pManager-SeriesLine*pManager-SeriesLine;if(Full)returntrue;elsereturnfalse;}该算法实现的功能为,判断是否已经满行,并且若是满行,进行消行,加分的操作。该算法的时间复杂度为O(n)=【(nVGridNum)^2*nHGridNum.】/2【2】bool Diamond::overlap(){bool bTuFa=false;POINT TexPos;for(int iy=3;iy=0;iy--){for(int ix=0;ix4;ix++){if(DiamondStruct[DiamondType][DiamondState][ix][iy]){TexPos.x=ix+DiamondPos.x;TexPos.y=iy+DiamondPos.y;pPanel-PanelPosToPos(TexPos);TexPos.y+=pPanel-GridSize.cy;if(TexPos.xpPanel-PanelRect.left || TexPos.xpPanel-PanelRect.right|| TexPos.ypPanel-PanelRect.bottom) bTuFa=true;if(pBlock-BlockPanel[DiamondPos.x+ix][DiamondPos.y+iy]) bTuFa=true;}}}if(bTuFa) returntrue;return 0;}该算法的功能为实现判断方块是否与边界或者已有障碍重叠,若是重叠,则返回值0,若没有重叠,返回值1。算法的时间复杂度为O(1)【3】void Block::AddBlock(){for(int iy=0;iy4;iy++)for(int ix=0;ix4;ix++){if(pDiamond-DiamondStr
文档评论(0)