首页 VC俄罗斯方块毕业论文

VC俄罗斯方块毕业论文

举报
开通vip

VC俄罗斯方块毕业论文VC俄罗斯方块毕业论文 专 业:计算机科学与技术 ABSTRACT 摘要 俄罗斯方块是大多数人都熟悉的一款游戏,它玩法简单,乐趣无穷,一直深受各年龄层的玩家喜爱,经久不衰。而计算机和网络的发展给于了它更大的发展空间。本设计的主要目的是通过使用VISUAL C++进行设计,详细介绍了基于API的俄罗斯方块系统的开发过程。内容包括:Visual C++的特点,系统可行性研究,功能分析,总体设计和详细设计。通过本文读者了解整个俄罗斯方块的开发过程,同时本次设计也可以作为系统再开发时的参考。 关键词:俄罗斯方块;...

VC俄罗斯方块毕业论文
VC俄罗斯方块毕业论文 专 业:计算机科学与技术 ABSTRACT 摘要 俄罗斯方块是大多数人都熟悉的一款游戏,它玩法简单,乐趣无穷,一直深受各年龄层的玩家喜爱,经久不衰。而计算机和网络的发展给于了它更大的发展空间。本 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 的主要目的是通过使用VISUAL C++进行设计,详细介绍了基于API的俄罗斯方块系统的开发过程。内容包括:Visual C++的特点,系统可行性研究,功能分析,总体设计和详细设计。通过本文读者了解整个俄罗斯方块的开发过程,同时本次设计也可以作为系统再开发时的参考。 关键词:俄罗斯方块;游戏;VC ABSTRACT ABSTRACT The Tetris is a game that most people are familiar with。 Its playing method is simple, full of endless joy, well received by the players of all ages all the time, unfailing. And the development of the computer and network is given on bigger development space of its. This design main purpose is through uses VISUAL C++ to carry on the design,Introduced in detail based on the API Tetris system performance history. The content includes: Visual C++ characteristic,System feasibility study, functional analysis, system design and detailed design. Through this article reader understood entire the performance history of Tetris, simultaneously this design also may develops again as the system when the reference. Keywords:Tetris;Game;VC 结论 目录 摘要 .......................................................... I ABSTRACT ..................................................... II 目录 .......................................................... 3 1绪论 ........................................................ 5 1.1 课 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 背景 ................................................ 5 VISUAL C++6.0介绍 ....................................... 5 1.2 1.3 API简介 ................................................ 6 1.4 本章小结 ................................................ 7 2 可行性研究与需求分析........................................ 8 2.1 可行性研究 .............................................. 8 2.2 需求分析 ................................................ 8 2.3 本章小节 ................................................ 9 3 系统的总体设计 ............................................. 10 3.1 总体功能分析 ........................................... 10 3.2 系统功能分析 ........................................... 10 3.3功能模块简介 ............................................ 11 3.4本章小结 ................................................ 11 4 系统的具体实现 ............................................. 12 4.1游戏基本逻辑控制........................................ 12 4.2 菜单命令的代码设计 ..................................... 21 4.3 本章小结 ............................................... 24 结论 ......................................................... 25 参考文献 ..................................................... 26 致谢 ......................................................... 27 ,3, 结论 前言 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。 俄罗斯方块是大多数人都熟悉的一款游戏,它玩法简单,乐趣无穷,一直深受各年龄层的玩家喜爱,经久不衰。而计算机和网络的发展给于了它更大的发展空间,单机版与网络版俄罗斯方块游戏也一直深受人们的喜爱, 经调查,俄罗斯方块在各种版本的游戏领域一直占据着重要地位,这就使得这款游戏的意义更加重要。本设计的主要目的是通过使用Visual C++进行设计,详细介绍了基于API的俄罗斯方块系统的开发过程。内容包括:Visual C++的特点,系统可行性研究,功能分析,总体设计和详细设计。 该俄罗斯方块游戏主要实现以下功能: 1. 每四个小方块可组合成一个方块群。 2(从七个方块群中,随机取一组,并且告诉玩家下一组方块是什么。 3(在游戏框中方块由上方慢慢落下。 4(玩家可以按【?】、【?】移动方块,按【?】加速方块落下的速度,按【?】、空 格键旋转方块,所有的方块都要在游戏框中。 5(方块落下是,当方块组中由一个到达游戏框最底或是下一格有方块时即停止移动, 净将方块移到游戏框底。 6(如果同一行的10格中全部填满小方块,即可消除该行,上面的方块以行为单位, 由上一行一行一行往下移。 7(消除的行数越多,落下的速度越快。 8(如果有方块停住时有方块未在游戏框内,游戏结束。 9(游戏能够在玩的时候给出分数、速度和级别。 ,4, 结论 1绪论 1.1 课题背景 作为一款极为经典的游戏,俄罗斯方块吸引一代代玩家乐此不彼,本例通过使用VISUAL C++进行设计,大量使用了API函数,将书本知识应用到实际程序中,以便于为以后的进一步学习奠定基础。 1.2 VISUAL C++6.0介绍 作为一种C/C++语言的集成开发环境(IDE),产生VC的最早的根源其实要追溯到DOS时代的Borland公司,当初Borland公司开发的Turbo Pascal和Turbo C让程序员们深刻感受到了把编辑器和编译器集成在一起的IDE是多么的方便,微软也看到了这一优点,于是相继开发了Quick C和Microsoft C/C++等多个DOS版本的C/C++集成开发工具。随着Windows的不断成熟,微软决定放弃DOS下的开发工作,正式推出了Windows下的Visual C++ 1.0,早期的VC功能并不什么强大,使用起来也不方便,1.0版和1.5版都是16位编程工具。VC的革命性改变得益于Windows 95的推出,从VC 2.0开始,微软又放弃了16位编程,以后的VC都只用于32位编程开发,为了与MFC类库的版本号保持一致,微软跳过了版本3,直接推出VC 4.0,这个版本及修订版4.2的部分界面风格一直被保留到最新的VC 6.0中。从VC4到VC6,VC的各种功能不断增强,MFC类库的内容也越来越丰富,现在利用VC开发应用程序已经是一件相当轻松的事情了。 现在的C++ Builder也是一个非常优秀的开发工具,但是基于下面的几点原因,使用VC更为现实:首先,VC的核心——MFC类库已是事实上的业界标准;其次,VC与Visual Studio中的其它可视化开发工具紧密集成,可用于开发非常专业的Windows、Web和企业级应用程序;第三,VC的联机帮助已被集成到MSDN(微软开发者网络)库中去了,后者包含了微软大部分产品的技术文档和支持资料,内容相当丰富,是程序员不可多得的参考资料,现在MSDN库随着Visual Studio 6.0一起发行,实在是大家的福音。 在Windows版本系列中,下列特点是始终保持并不断发展的: ?图形化的窗口界面。 ?多任务方式的运行环境。 ?虚拟化的设备接口。 ?以虚拟内存为核心的内存管理。 ?网络功能及应用程序,包括Microsoft网络、通用基础网络 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 等。 ,5, 结论 ?多媒体功能及应用程序,包括图形、图像、声音、动画和开发工具等。 ?功能丰富的用户管理工具和实用软件。 目前VC的最新版本是VC6,属于微软可视化开发套件Visual Studio 6.0中的一项重头戏。VC6引入了多项出色的新功能,例如智能感应(IntelliSense)技术,程序员在键入代码时,VC6的编辑器能自动把属性、参数信息、数据类型信息、代码信息罗列出来,供程序员选择并自动完成输入,这种技术源自于VB5,现在已被应用到了VC6、VJ6和IE5中,有了它之后,程序员无需去记忆复杂的语法、参数和构件属性,从而提高了编程效率。另一项典型的新技术是即编即调(Edit and Continue),现在程序员可以直接在调试过程中编辑代码,而不用象以前那样,需要先退出调试状态,然后编辑,重新编译连接,并启动调试器,再跟踪到发生问题的地方。此外,VC6还具有动态更新类视图、延迟加载、支持IE 4.0通用控件等等众多的新特性。 作为当今流行的开发环境,Visual C++6.0具有如下特点: (1)Visual C++6.0提供了开发Windows环境下的应用程序的简捷 、快速和实用的开发环境。利用Visual C++6.0开发Windows应用程序具有很高的效率。 2)Visual C++6.0提供了MFC类库,开发者只需要做少量的工作就可以得到( 功能齐全的Windows应用程序。 (3)Visual C++6.0提供了高度集成的工具集,使得在开发应用程序的全过程中都保证了较高的效率。集成化便于程序开发,开发者可以在诸如编辑、建立、调试等不同的任务之间快速切换,甚至可以同时进行。 (4)图形化的可视特点使得Visual C++6.0简单易学。 1.3 API简介 微软windows应用程序应用程序接口(Application Programming Interface ,API)是为开发者在开发windows应用程序时,提供给应用程序的接口程序,包括Windows XP,Windows 2000,Windows NT,Winows 95/98,以及Windows ME.windows API 可以被用在所有的以windows为平台的应用程序下面不管是32位的或是64位的Windows系统通常会支持相同的功能函数。 虽然随着软件技术的不断发展,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。但是如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。API函数是构筑整个Windows框架的基石,只有充分理解和利用API函数,才能深入到Windows的内部,充分发挥各种32位平台的强大功能和灵活性,才能成功地扩展和突破类库、控件和可视开发环境的限制。 所有在Win32平台上运行的应用程序都可以调用这些函数。使用Win32 API,应 ,6, 结论 用程序可以充分挖掘Windows的32位操作系统的潜力。 Mircrosoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。使用 Win32 API不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。 在具体编程时,程序实现方式的差异依赖于相应平台的底层功能的不同。最显著的差异是某些函数只能在更强大的平台上实现其功能。例如,安全函数只能在Windows NT操作系统下使用。另外一些主要差别就是系统限制,比如值的范围约束,或函数可管理的项目个数等等。 根据Windows API 函数完成的功能,可将其分为三类: ?窗口管理函数:实现窗口的创建、移动和修改功能。 ?图形设备接口(Graphics Device Interface,GDI):实现与设备无关的图形操作功能。 ?系统服务函数:实现与操作系统有关的各种功能。 1.4 本章小结 本章介绍了软件开发环境VISUAL C++的基础性知识,同时简要介绍了WINDOWS API函数的一些知识,这些知识有助于接下来整个俄罗斯方块游戏的开发与设计。在用Visual C++开发面向对象应用程序时,主要有两种方法:一种是使用Windows提供的API函数,另一种方法是直接使用Microsoft提供的MFC类库。本次设计使用第一种方法。 ,7, 结论 2 可行性研究与需求分析 2.1 可行性研究 问题定义的可行性分析是软件生存周期的第一阶段。可行性研究的目的是使用最少的代价在尽可能短的时间内确定问题是否能够解决。可行性研究的实质是要进行一次系统分析和设计的简化过程,也就是在较高层上以抽象的方式进行系统分析和设计的过程。一般来讲,应该从技术、经济和操作等方面来研究每种解法的可行性。 2.1.1.要求 作为一款极为经典的游戏,俄罗斯方块吸引一代代玩家乐此不彼,本例通过使用VISUAL C++进行设计,大量使用了API函数,将书本知识应用到实际程序中,以便于为以后的进一步学习奠定基础。本例要求大量使用API函数,熟悉消息映射机制的具体实现。 2.1.2 目标 俄罗斯方块游戏的设计目标完成一个比较简单的游戏,使之能够实现俄罗斯方块游戏的基本功能,成为一个比较完整的游戏框架。该游戏作为一个单机版的游戏界面,基本达到俄罗斯游戏的基本功能。通过练习能进一步学习API函数的使用。 2.1.3 可行性研究方法 实行软件的可行性研究方法主要有:成本效益分析,对估算问题的看法,软件的作用范围,软件的成本估算,速度安排等。 2.1.4 决定可行性的主要因素 决定软件可行性的四个主要方面有:经济因素,技术因素,法律因素,不同 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 。由于该游戏本身的规模不大,几乎可以在所有的计算机系统上运行,所以对于硬件和软件没有太苛刻的要求,各种游戏平台,大型电脑、家用游戏机等,甚至连掌上型的小游戏机都可以运行。 2.2 需求分析 俄罗斯方块是一个脍炙人口的游戏,所以我们大家对它都很是熟悉,现在的要求是尽量设计一个合格的俄罗斯方块游戏。作为一个广受关注的游戏,现在有大量的关于俄罗斯方块的资料,我尽量吸取已有的成功的经验,做到精益求精。 ,8, 结论 2.3 本章小节 本章分析了当前开发本系统的形式,并介绍了对计俄罗斯方块游戏系统的可行性 研究的前提及对该系统的需求分析。 ,9, 结论 3 系统的总体设计 总体设计过程首先是寻找实现目标系统的各种不同的方案。要进行系统完善的总体功能分析,首先要确定俄罗斯方块游戏中的不同模块,鉴于API编程的不同,我尽量用比较清晰的思路表达意图。 根据此系统的功能要求,除了要保持整体设计的统一性,还要突出不同模块的特点,使整个系统趋于统一。 3.1 总体功能分析 总体设计过程通常由两个主要阶段组成:系统设计阶段和结构设计阶段。 尽量利用现有的软硬件环境,采用Viusal C++进行俄罗斯方块的设计,由于API函数在Windows设计中的重要性,需要大量使用到API函数,一定程度上增加了难度。 3.2 系统功能分析 系统功能分析是在系统开发的总体任务的基础工业上完成的。该俄罗斯方块游戏主要实现以下功能: 1. 从七个方块群中,随机取一组,并且告诉玩家下一组方块是什么。 2. 在游戏框中方块由上方慢慢落下。 3. 玩家可以按【?】、【?】移动方块,按【?】加速方块落下的速度,按【?】、空 格键旋转方块,所有的方块都要在游戏框中。 4. 方块落下是,当方块组中由一个到达游戏框最底或是下一格有方块时即停止移动, 净将方块移到游戏框底。 5. 如果同一行的10格中全部填满小方块,即可消除该行,上面的方块以行为单位, 由上一行一行一行往下移。 6. 消除的行数越多,落下的速度越快。 7. 如果有方块停住时有方块未在游戏框内,游戏结束。 8. 游戏能够在玩的时候给出分数、速度和级别。 游戏大致的模块可以由主菜单实现控制,主菜单的实现见图3.1 ,10, 结论 主菜单 开暂结退 始 停束出 开开开 始 始 始 图 3.1 控制流程 3.3功能模块简介 由于俄罗斯方块游戏的相对简单,我们将在下一章中具体实现。 3.4本章小结 本章介绍了俄罗斯方块游戏系统的总体设计方案,详细说明了系统实现的功能以 及整个系统的流程分析,并以功能模块图的形式体现出来。 ,11, 结论 4 系统的具体实现 4.1游戏基本逻辑控制 使用API函数编写游戏,首先生成一个应用程序框架,游戏的框架采用标准的windows框架,上面有标题栏、菜单栏,以方便玩家控制游戏,我们先做好这一部分。菜单栏里包括开始、暂停、结束等控制菜单。 我们要设计对菜单操作进行响应,并设计相应的控制游戏,这是需要添加对菜单事件的响应方法。 然后在一个面板上构建游戏的界面,将这个面板嵌入到游戏的大框架中,这样游戏的界面就有了。 在游戏面板构建好之后,应该让游戏能够玩起来,这一部分主要是编写一些算法,用来控制游戏。这里需要增加对键盘事件的响应,让玩家能够玩游戏。 4.1.1显示背景 在Visual C++中,使用Visual C++自带的方法可以读取并显示位图文件。使用API函数的画刷和画笔函数创建画刷和画笔句柄,然后创建一个矩形区域作为俄罗斯方块游戏的执行区域(选择黑色背景和红色方块,以便于区分)。 主要使用到的API函数有: ?GetDC(HWND) 获取设备句柄 ?int ReleaseDC(HWND,HDC) 由GetDC()获取的设备环境必须用ReleaseDC()函数释放 ?SelectObject(HDC,HWND) 应用程序将使用句柄HWND所指的设备进行绘图,直到选入另外的设备为止。使用时一般需要在函数前进行强制类型转换,设定为CPEN、CBRUSH等。 ?BitBlt(int,int,int,int,CDC,int,int,DWORD) CDC::BitBlt执行的操作为将源DC中位图复制到目的DC中。其中前四个参数为目的区域的坐标(x,y)及长度和宽度(Width, nHeight),第五个参数是源DC指针,接下来的参数是源DC中的起始坐标,最后一个参数为光栅操作的类型。 ?BOOL Rectangle(HDC hdc,int x1,int y1,int x2,int y2) 使用当前画笔绘制一个举行区域,并使用当前画刷进行填充。 4.1.2方块的显示与控制 俄罗斯方块游戏中的基本方块有7种,可以通过编写一个结构来存储和显示这些方块。具体代码如下: typedef struct struct_fPoint //点坐标 ,12, 结论 { float x; float y; }FPOINT,*PFPOINT; typedef struct struct_Object //方块结构 { int type; FPOINT center; FPOINT pos[4]; }OBJECT,*POBJECT; 各种形式的方块组组合如下: //实现方块组 pObj->pos[0].x=sx; pObj->pos[0].y=0; pObj->pos[1].x=sx+1; pObj->pos[1].y=0; pObj->pos[2].x=sx; pObj->pos[2].y=1; pObj->pos[3].x=sx+1; pObj->pos[3].y=1; pObj->center.x=0.5; pObj->center.y=0.5; //实现方块组 pObj->pos[0].x=sx; pObj->pos[0].y=0; pObj->pos[1].x=sx; pObj->pos[1].y=1; pObj->pos[2].x=sx+1; pObj->pos[2].y=1; pObj->pos[3].x=sx+1; pObj->pos[3].y=2; pObj->center.x=sx+1; ,13, 结论 pObj->center.y=1; //实现方块组 pObj->pos[0].x=sx+1; pObj->pos[0].y=0; pObj->pos[1].x=sx; pObj->pos[1].y=1; pObj->pos[2].x=sx+1; pObj->pos[2].y=1; pObj->pos[3].x=sx; pObj->pos[3].y=2; pObj->center.x=sx; pObj->center.y=1; //实现方块组 pObj->pos[0].x=sx; pObj->pos[0].y=0; pObj->pos[1].x=sx+1; pObj->pos[1].y=0; pObj->pos[2].x=sx+1; pObj->pos[2].y=1; pObj->pos[3].x=sx+1; pObj->pos[3].y=2; pObj->center.x=sx+1; pObj->center.y=1; //实现方块组 pObj->pos[0].x=sx+1; pObj->pos[0].y=0; pObj->pos[1].x=sx; pObj->pos[1].y=0; pObj->pos[2].x=sx; ,14, 结论 pObj->pos[2].y=1; pObj->pos[3].x=sx; pObj->pos[3].y=2; pObj->center.x=sx; pObj->center.y=1; 实现方块组 // pObj->pos[0].x=sx; pObj->pos[0].y=0; pObj->pos[1].x=sx; pObj->pos[1].y=1; pObj->pos[2].x=sx; pObj->pos[2].y=2; pObj->pos[3].x=sx+1; pObj->pos[3].y=1; pObj->center.x=sx; pObj->center.y=1; //实现方块组 pObj->pos[0].x=sx; pObj->pos[0].y=0; pObj->pos[1].x=sx; pObj->pos[1].y=1; pObj->pos[2].x=sx; pObj->pos[2].y=2; pObj->pos[3].x=sx; pObj->pos[3].y=3; pObj->center.x=sx; pObj->center.y=2; 4.1.2.1创建方块 首先用随机函数定义七种不同的方块组合,然后通过分支语句switch决定出现 的方块组的具体形式。关键代码如下: ,15, 结论 void CreateObj(POBJECT pObj) { „„„„„„„„ srand(::GetTickCount()); pObj->type=rand()%7; switch(pObj->type) { „„„„„„„„ } } 使用的API函数如下: •WINBASEAPI DWORD WINAPI GetTickCount(VOID); GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的秒数,该函数在winbase.h头文件中定义,winbase.h已被包含进windows.h头文件中,所以要使用GetTickCount只需包含windows.h就可以了。 ?void srand(int a) void srand(int a)功能是初始化随机产生器,从而产生比较分散的伪随机数,即rand()函数的初始值,即使把种子的值改成a。 从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列;如何我们想产生不可预见的随机序列,我们利用srand((unsign)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的 ?int rand(void); 该函数包含在头文件stdlib.h中,调用时随机产生一个0到RAND_MAX之间平均分布的整数,RAND_MAX是一个常量(定义为:#define RAND_MAX 0x7fff)。 4.1.2.2 产生新的方块 在判断可以产生下一组方块的时候,程序将产生下一组方块,关键代码如下: void GetNextObj() { „„„„„„„„ BOOL isDead=FALSE; //假设未结束 for(int i=0;i<4;i++) { if(Ev[(int) CurObj.pos[i].x][(int)CurObj.pos[i].y]) isDead=TRUE; } if(isDead) //游戏结束 { ,16, 结论 EndGame(); CreateObj(&NextObj); } 使用的API函数有: ?void *memcpy( void *dest, const void *src, size_t count ); 中, 该函数包含在头文件memory.h或string.h,该函数返回源地址的指针。三个参数 dest表示新缓冲区地址,src 表示源缓冲区地址,count表示源缓冲区大小,该函数 拷贝count指定的源缓冲区的字节到目的缓冲区.如果源和目的地址重复,该函数不能 保证重复的区域里最初的源地址的字节在覆盖前被拷贝. 4.1.2.3在右上角显示下一个产生的方块 该段代码的主要作用是帮助玩家判断下一个出现的方块组合,以便在游戏处理 上作出更有力的判断。主要的设计思想是设定模式,得到下个方块组的产生信息,调 用不同的设备完成设备初始化,然后在右上角实现要求。 关键代码如下: void DrawNext() { „„„„„„„„ SetBkMode(hdc,TRANSPARENT); HPEN hNull = CreatePen(PS_NULL,1,0); HPEN hOldPen = (HPEN)SelectObject(hdc,hNull); HBRUSH hGrayBrush = (HBRUSH)GetStockObject(GRAY_BRUSH) ; HBRUSH hOldBrush = (HBRUSH)SelectObject(hdc,hGrayBrush); SetTextColor(hdc,RGB(255,0,0)); TextOut(hdc,xStart,10,"下一个",6); „„„„„„„„ for(int i=0;i<4;i++) { x=NextObj.pos[i].x-sx; y=NextObj.pos[i].y; Rectangle(hdc,xStart+x*15,30+y*15,xStart+x*15+15,30+y*15+15); } SelectObject(hdc,hOldBrush); ::SelectObject(hdc,hOldPen); ReleaseDC(g_AppData.hWnd,hdc); } ,17, 结论 用到的主要函数有: ?SetBkMode(HDC,TRANSPARENT) 设置背景模式 ?BOOL TextOut(HDC hdc,int x,int y,LPCTSTR lpString,int nCount) 文本输出函数,在以坐标(x,y)为起点,输出字节数为nCount,名为lpString 的字符串。 4.1.2.4实现下落的算法 方块落下,即随着时间推移,方格一格一格的下落。首先判断方块能否下落。 如果可以下落,判断四个小方块的下一个是否有空间,如果有的话将方块基准往下移。 使用的主要函数都是已经定义好的成员函数。 代码如下: void Fall() { „„„„„„„ if(temp[i].y>=MAXY) //可以消去 { for( int n=0;n<4;n++) Ev[(int)CurObj.pos[n].x][(int)CurObj.pos[n].y]=1; SetCruObjZero(); DelDieLine(); GetNextObj(); DrawSence(); DrawNext(); DrawInfo(); return; } } for(i=0;i<4;i++) //如果可以降落 { CurObj.pos[i].x=temp[i].x; CurObj.pos[i].y=temp[i].y; } CurObj.center.y+=1; DrawSence(); return; } ,18, 结论 4.1.2.5 方块移动的算法 关键代码如下: void Move(int step) { „„„„„„„„ for(i=0;i<4;i++) { CurObj.pos[i].x=temp[i].x; CurObj.pos[i].y=temp[i].y; } CurObj.center.x+=step; DrawSence(); return; } 4.1.2.6实现方块翻转 方块翻转是俄罗斯方块游戏中最为关键的一步,我们首先设定一个临时变量,如果下落的方块组是O型,可以不用翻转。如果不是O型,可以对方块组的坐标进行技术处理。当然如果方块在游戏区域边缘无法实现翻转的情况也应该考虑到。翻转算法中最关键的因素是以方块组为基准旋转,计算新的位置。 代码如下: void Flip() { „„„„„„„„ for(i=0;i<4;i++) { cx=CurObj.pos[i].x-CurObj.center.x; cy=CurObj.center.y-CurObj.pos[i].y; temp[i].x=CurObj.center.x+cy; temp[i].y=CurObj.center.y+cx; if(Ev[ int (temp[i].x) ][ int(temp[i].y)] )//Can not Flip return; if(temp[i].x<0||temp[i].x>=MAXX) return; if(temp[i].y<0||temp[i].y>=MAXY) return; } ,19, 结论 for(i=0;i<4;i++) { CurObj.pos[i].x=temp[i].x; CurObj.pos[i].y=temp[i].y; } DrawSence(); return; } 4.1.2.7方块消去 首先判断方块能否进行消去,然后使用消去算法将能消去一行或数行方块消去, 同时刷新工作区。这个方法的算法是这样的:先遍历每一行,对每一行都进行检查是 不是已经填满了方块,如果已经填满了方块,则上面的方块都整体往下移动一格。关 键代码如下: void DelDieLine() { int isDead=1; //判断消去的条件 int DieCount=0; for(int i=0;i<4;i++) DieLine[i]=-1; for(i=MAXY-1;i>=0;i--) { isDead=1; for(int j=0;j=NextScore) //对于高手提高速度 { speed++; if(speed==15) { speed=0; } dtime=time[speed]; DrawInfo(); NextScore+=10000; } Count++; int DestLine; for(i=DieCount-1;i>=0;i--) { for(DestLine = DieLine[i];DestLine>0;DestLine--) for(int j=0;j=0;i--) { for(int j=0;j 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 使用教程 陈明 编著 电子工业出版社 [16] 软件工程导论 张海蕃 编著 清华大学出版社 [17] C++程序设计 钱能 编著 清华大学出版社 ,26, 结论 致谢 在设计过程中由于我的知识浅薄,经验不足,因此,在该系统的设计方面还有很多不足,比如功能过少,界面不够美观等问题,我会在软件的使用过程中,不断地进行修改、完善,争取使该系统慢慢趋向完美。 在本系统的设计过程和论文编写过程中,很多老师、同学和朋友都给予了我许多无私的帮助,尤其是指导老师给我的论文提出了很多宝贵的修改意见,在这里,我向这些无私帮助我的人表示衷心的感谢。在此次毕业设计中,老师对我严格要求、耐心教导,使我顺利完成了设计,并帮我将所学的知识融会贯通、综合应用,特在此表示衷心的感谢~ ,27, 结论 ,28, 结论 ,29,
本文档为【VC俄罗斯方块毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_180829
暂无简介~
格式:doc
大小:134KB
软件:Word
页数:0
分类:
上传时间:2017-10-20
浏览量:21