WindowsPhone游戏开发毕业设计

上传人:无*** 文档编号:132488114 上传时间:2022-08-08 格式:DOC 页数:56 大小:1.53MB
收藏 版权申诉 举报 下载
WindowsPhone游戏开发毕业设计_第1页
第1页 / 共56页
WindowsPhone游戏开发毕业设计_第2页
第2页 / 共56页
WindowsPhone游戏开发毕业设计_第3页
第3页 / 共56页
资源描述:

《WindowsPhone游戏开发毕业设计》由会员分享,可在线阅读,更多相关《WindowsPhone游戏开发毕业设计(56页珍藏版)》请在装配图网上搜索。

1、编号 本科生毕业设计Windows Phone游戏开发俄罗斯方块Game Development based on Windows PhoneTetris学 生 姓 名专 业学 号指 导 教 师学 院2012年 6 月 摘要俄罗斯方块是一个老幼皆宜的小游戏。它的核心是各种不同类型的方块,方块由四块正方形的色块组成,然后存储在一个数组的四个元素中。计算机随机产生不同七种类型的方块,然后程序根据这七种方块堆叠成各种不同的模型。如果某一行被方块完全填充,就利用C#类提供的置换方法,将此行中填充的方块数据清除,并增加相应的积分。论文遵循软件工程的知识,从软件问题定义开始,接着进行可行性研究、需求分析、

2、概要设计、详细设计,整个开发过程贯穿软件工程的知识体系。本文设计实现了一个Windows Phone上可运行的俄罗斯方块游戏。文中涉及到了Windows Phone应用程序制作,以及触摸操作、重力感应的实现和XNA技术的掌握等知识,测试运行良好,实现了预期的功能。关键词:俄罗斯方块 Windows Phone 重力感应 消行AbstractTetris is a game for all ages. At its heart is a variety of different types of squares, four square blocks of color, and then sto

3、red in an array of four elements. The computer randomly generated seven types box, and then stacked into a variety of different models procedures based on these seven boxes. If a line is the box completely fill replacement method using C # class, filled squares in this row data cleanup, and increase

4、 the corresponding points.The paper follows the knowledge of software engineering, start from the definition of a software problem, and then conduct a feasibility study, requirements analysis, preliminary design, detailed design, and the entire development process throughout the software engineering

5、 body of knowledge. This article was designed and implemented a Tetris game can run on Windows Phone. Windows Phone applications involved in production, as well as touch operation, the realization of the gravity sensing and XNA grasp of the technology and knowledge, a good test run to achieve the de

6、sired function.Keywords: Tetris; Windows Phone; Gravity sensing; Eliminate line目录摘要IAbstractII目录I第1章 绪论11.1 游戏的意义与内涵11.2 俄罗斯方块游戏11.3 可行性研究11.3.1 设计目的11.3.2 可行性研究前提11.3.3 可行性分析21.3.4 结论21.4 开发环境2第2章 系统开发的平台32.1 C#产生的历史与现状32.2 C#语言的特点42.3 Microsoft Visual studio 201052.4 Windows Phone52.5 XNA Framewor

7、k5第3章 需求分析73.1 引言73.2 总体需求分析73.3 分析规划73.3.1 下坠物及各种变换需求分析73.3.2 正常工作和中断操作的需求分析73.3.3 主界面需求分析83.3.4 记分需求分析9第4章 系统概要设计114.1 游戏设计所要遵循的规范114.2 设计思想114.2.1 游戏总体设计分析114.2.2 方块及地图数据模块的设计114.3 系统功能模块图134.3.1 流程图134.3.2 类的结构图15第5章 系统详细设计165.1 方块与地图模块设计165.2 得到方块175.3 方块的翻转与移动195.3.1 方块的移动195.3.2 方块的翻转205.4 满行

8、消除245.5 升入下一关26第6章 游戏测试296.1 测试的意义及注意事项296.2 测试的步骤296.3 测试结果31总结32参考文献33致谢34附录A35附录B39第1章 绪论1.1 游戏的意义与内涵游戏这个名词一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。1.2 俄罗斯方块游戏俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制

9、作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。但是经过时代的变迁,当初简单却变化无穷的俄罗斯方块游戏如今却已失去了它的市场,究其原因,主要是因为游戏硬件以及技术的革新使得优秀的游戏接二连三地推出,而俄罗斯方块游戏作为一款形式、内容过于简单的游戏势必经受不住时间的冲击的。现在笔者将改写这个固定的游戏模式,通过增加一系列的新功能,开发出一种全新的俄罗斯方块游戏,使游戏用户重新燃起对俄罗斯方块游戏的热爱。1.3 可行性研究1.3.1 设计目的综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工

10、程实践能力,为将来实际工作打下坚实的基础。1.3.2 可行性研究前提l 基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、及时性,及适当的功能扩展。l 主要开发目标:采用结构化设计方法,开发出一个可操作性、美观性、及时性的游戏,并通过此次软件开发过程全面提高自身的综合素质。13l 可行性研究所采用的方法和步骤:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个有一定可玩性的游戏软件。l 评价尺度:本游戏尽量追求游戏操作的合理性及正确性,但是仍不排除会出现一些偶然性的错误;同时游戏也尽量追求界面的

11、美观性及功能的丰富性,但是基于时间的关系,可能会有极少数的拓展功能不能实现。1.3.3 可行性分析l 管理可行性:本游戏设计的目的只在于提高自身实践水平,并不对外发布,因此完全具有管理可行性。l 经济可行性:由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台电脑便可,所以不用考虑到经济问题。l 技术可行性:可用与本游戏的编程语言据微软称有120多种,考虑到用于编写程序的困难度,和对语言的了解程度,选择C#作为编程语言。需要对图形界面设计、事件处理、多媒体等有一定了解。l 社会可行性:本游戏的开发作为毕业课程

12、设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响,不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。1.3.4 结论综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编。1.4 开发环境作为面向对象的程序设计语言,C#语言有着广阔的应用领域,本系统将采用 Microsoft Visual Studio 2010做软件开发环境,结合微软提供的XNA架构,实现相应的功能。第2章 系统开发的平台 C#产生的历史与现状1999年,微软公司开始研发一种名为Cool的新开发语言,而具体内幕一直是个谜。直到2000年6月26

13、日微软公司在奥兰多举行的职业开发人员技术大会(PDC 2000)上,这个谜底才揭晓,这种新的、先进的、面向对象的开发语言就是C#(发音为C Sharp)。那么微软公司为什么要开发C#,C#究竟能给开发者带来什么好处呢?1995年,Sun公司正式推出了面向对象的开发语言Java,并提出了跨平台、跨语言(Write Once and Run Anywhere)的概念,此后Java逐渐成为了企业级应用系统开发的首选工具,而且使得越来越多的基于C/C+的应用开发人员转向了从事基于Java的应用开发。Java的先进思想使其在软件开发领域大有山雨欲来风满楼之势。10很快,在众多研发人员的努力下,微软公司也

14、推出了自己基于Java语言的编译器Visual J+。Visual J+在最短的时间里由1.1版本升级到了6.0版本。这不仅仅是数字上的变化,集成在Visual Studio 6.0中的Visual J+ 6.0的确有了质的变化:不但虚拟机(JVM)的运行速度大大加快,而且增加了许多新特性,同时支持调用Windows API,这些特性使得Visual J+成为强有力的Windows应用开发平台,并成为业界公认的优秀Java编译器。不可否认,Visual J+具有强大的开发功能,但其主要运用在Windows平台的系统开发中。Sun公司认为Visual J+违反了Java的许可协议,即违反了Jav

15、a开发平台的中立性,因而,对微软公司提出了诉讼,这使得微软公司处于极为被动的局面。11就在人们认为微软公司的局面不可能再有改观的时候,微软公司却另辟蹊径,决定推出其进军互联网的庞大计划-.NET计划和该计划中旗帜性的开发语言-C#。微软公司的.NET是一项非常庞大的计划,也是其此后几年发展的战略核心,在任何时间、任何地点,采用相应的设备以获取所需的信息的梦想并非一朝一夕就能实现。Visual Studio .NET则是微软.NET的技术开发平台,其重要性可见一斑,而C#就集成在Visual Studio .NET中。为了支持.NET平台,Visual Studio .NET在原来Visual

16、Studio 6.0的基础上进行了极大的修改和变更。在Visual Studio .NET 版中你会发现Visual J+消失了,取而代之的就是C#语言。微软公司对C#的定义是:C#是一种类型安全的、现代的、简单的,由C和C+衍生出来的面向对象的编程语言,它牢牢根植于C和C+语言之上,并可立即被C和C+的使用者所熟悉。C#的目的就是综合Visual Basic(简称VB)的高生产率和C+的行动力。这个定义是恰如其分的,因为在Visual Studio .NET中,我们已经可以利用C#极其轻松地开发出强大的企业级分布式应用系统了。2.2 C#语言的特点l 快速应用开发(RAD)功能支持快速应用开

17、发(Rapid Application Development,RAD)可以说是目前开发语言最为重要的一大功能,这也正是C/C+的致命伤。网络时代应用系统的开发必须按照网络时代的速度来进行。支持快速开发可以使得开发人员的开发效率倍增,从而使得他们可以从繁重的重复性劳动中解放出来。C#的RAD功能之一是垃圾收集机制,它将减轻开发人员对内存的管理负担。利用C#的这些功能,可以使开发者通过较少的代码来实现更强大的应用程序,并且能够更好地避免错误发生,从而缩短应用系统的开发周期。2l 语言的自由性用C#编写的程序能最大程度地和任何支持.NET的语言互相交换信息。能够继承和使用任何语言所编写的程序可以称

18、得上是知识的继承,这样做的好处是节省了大量的工作,而不必把COBOL等语言强行改成另一种语言,.NET让各种语言真正地互相交流了。9C#和其他.NET语言有着最好的协作,这点对开发人员非常重要。全球从事编写软件的人当中,大约有50%以Visual Basic作为基本的编程工具。在跨入.NET编程时代的时候,这些人轻松地使用了VB.NET开发Web上的应用程序。想想以后你居然可以和你的那些只懂VB的同事真正在一起共同开发.NET的应用程序,这是不是一件让人轻松和高兴的事情呢?l 强大的Web服务器端组件在C#的Web编程中,最让人兴奋的是Web服务器端的组件,它们不仅包括传统组件,还包括那些能够

19、自动连接五花八门服务的可编程组件。你可以用C#编写自己的服务器端组件。服务器端组件和标准的HTML提供的服务自然是不一样的,使用它们可以更自由、更容易地进行数据绑定。15更多服务器组件很快会出现,有了这些强大的组件,我们可以设计出功能更加强大的企业级分布式应用系统。l 支持跨平台随着互联网应用程序的应用越来越广泛,人们逐渐意识到由于网络系统错综复杂,使用的硬件设备和软件系统各不相同,因此开发人员所设计的应用程序必须具有强大的跨平台性。C#编写的应用程序就具有强大的跨平台性,这种跨平台性也包括了C#程序的客户端可以运行在不同类型的客户端上,比如PDA、 等非PC装置中。l 与XML的融合由于XM

20、L技术真正融入到了.NET和C#之中,C#的编程变成了真正意义上的网络编程,甚至可以说.NET和C#是专为XML而设计的。使用C#的程序员可以轻松地用C#内含的类来使用XML技术。就这方面而言,C#给程序员提供了更多的自由和更好的性能来使用XML。l 对C+的继承C#继承并保留了C+的强大功能,例如, C#保留了类型安全的检测和重载功能,C#还提供了一些新功能取代了一些原来的ANSI C预处理程序的功能,提高了语言的类型安全等安全性。2.3 Microsoft Visual studio 2010Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环

21、境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。9Visual Studio 2010同时带来了.NET Framework4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview-CTP),并且支持开发面向Windows 7的应用程序。除了Microsoft SQL Server,它还支持IBMDB2和Oracle数据库。 Windows PhoneWindows Phone 是微软新发布的新一代 操作系统,它将微软旗下的Xbo

22、x LIVE游戏、Zune音乐与独特的视频体验整合至 中。142010年10月11日晚上9点30分,微软公司正式发布了智能 操作系统,微软将谷歌的Android和苹果的IOS列为Windows Phone的主要竞争对手。Windows Phone具有桌面定制、图标拖拽、滑动控制等一系列前卫的操作体验。其主屏幕通过提供类似仪表盘的体验来显示新的电子邮件、短信、未接来电、日历约会等,让人们对重要信息保持时刻更新。它还包括一个增强的触摸屏界面,更方便手指操作;以及一个最新版本的IE Mobile浏览器该浏览器在一项由微软赞助的第三方调查研究中,和参与调研的其它浏览器和 相比,可以执行指定任务的比例超

23、过高达48%。3很容易看出微软在用户操作体验上所做出的努力,而史蒂夫-鲍尔默也表示:“全新的Windows 把网络、个人电脑和 的优势集于一身,让人们可以随时随地享受到想要的体验。2.5 XNA FrameworkXNA中的X表示能够在Windows Xbox和合作伙伴之间达到跨平台的强大的软件工具。N表示“下一代(Next-generation)”,A表示“架构(Architecture)”。XNA是基于DirectX的游戏开发环境,是微软对于 Managed DirectX 的修正及扩充版本。XNA Framework 是建置于上,XNA 将DirectX的功能以受控代码的方式封装运作(因

24、此微软终止了Managed DirectX 9.0的开发,所以有人称XNA为Managed DirectX 2.0),另外还加入了一些专注于游戏开发上类别库,在指定的平台上使“程式码重用”达至最大效果。XNA Framework 在一个特别为有管理式游戏运行的通用语言运行库(Common Language Runtime)版本上运行。这个执行层支援Windows XP、Windows Vista、windows 7、windows phone 7、XBox 360和将要到来的Windows 8。由于游戏是开发在执行层上,使得游戏能在所有支持XNA Framework 的平台上只要很少甚至不需要

25、任何更改便能运行。现时所有在XNA Framework 上的游戏必需使用C #和XNA Game Studio Express IDE开发。XNA 的程式都是继承自Game class,它包含了所有重要的游戏组件,比如图形设备(Graphic Device)、窗口设置以及内容管理器,你也可以添加Game Component class到你的Game class。XNA Framework 把所有用作游戏编程的低阶技术封装起来,例如XNA提供了Effect(Basic Effect)类别来处理大部分绘图着色相关的工作,开发人员不需再理会“矩阵变量”相乘,只要指定物件的World、View、Pro

26、jection即可,其相乘效果由Shader档自动处理。Effect 本身还能用于加载和编译Shader, Effect .Current Technique 可用于指定technique, 像是Ambient Light; Effect .Set Value可以用来设定Shader的参数。一个effect包含一个或多个technique,一个technique包含一个以上的pass。在pass里面可能还有Vertex Shader, Pixel Shader,这些元素构成一份effect文件, 这也就是极简化后的HLSL程式码。因此,游戏开发人员就可以专注于游戏内容开发而不用关心游戏移植至不

27、同平台上的问题,游戏只要开发于XNA 的平台上,所有硬件只要支援XNA都能运行。XNA Framework 还内置一些工具,例如XACT以帮助游戏内容开发。这些工具还能帮助开发视觉和听觉效果拟真度很高的模型制作。XNA Framework 同时支持2D 和3D 的游戏开发也支援Xb格式,而且被用来加载纹理(Texture)、3D模型、着色器(Shader)。Shader指令经过编译之后,直接加载到显卡上的GPU来执行。5Xbox Live卖场可以升级开发者的XNA Game Studio Express 以使能把他们开发的游戏用于Xbox 360上。第3章 需求分析3.1 引言对软件需求完全理

28、解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。3.2 总体需求分析剖析游戏的实质,可以发现:首先,该游戏需要一个良好且可控的界面,能够接受鼠标(手指按下)和键盘(手指滑动或者重力感应)的响应,可以供玩家选择自己想要的游戏级别、背景颜色和是否开启背景音乐,实现个性化设置;其次,由于游戏涉及到许多不同种类的下坠

29、物,所以需要来构造这些下坠物并且设置一种旋转规则实现下坠物的各种旋转;再者,在游戏过程中,必须要处理好下坠物的一些事件,例如自动下落,消除满行,下一个下坠物的显示以及游戏的自主升级。3.3 分析规划3.3.1 下坠物及各种变换需求分析本游戏需要有7种下坠物,而每种下坠物还可以进行旋转。每种下坠物每行每列最多只有4个小下坠物。可以将它们放在一个n*m的区域内,该区域可以看作是有许多个等面积小下坠物构成的区域,而这些区域的状态只有两种,被下坠物占据或空闲,因此,对于整个游戏区域的空间是占据或空闲,可以用一个函数来标识。对于7种下坠物和它们旋转后的形态我们可以用不同的标识进行标记。对于旋转,游戏中所

30、有下坠物都是按照逆时针旋转的规则进行的,而且在旋转过程中它们不会因为旋转而下降,总会保持在同一高度。任何下坠物经过一个旋转周期还会变回原型。3.3.2 正常工作和中断操作的需求分析在无人操作时,游戏开始后会随机产生一个下坠物,先显示在界面右上角的显示区域,然后转到游戏区域,右上角又随机产生一个新的下坠物,当该下坠物下落到底后,新的下坠物再次进入游戏区域,如此循环,直到游戏结束暂停,这就是游戏的正常工作。上述过程是在无人操作时游戏自动运行的,当用户进行一定的操作交互的时候,运行程序可以根据用户的操作指示进行当前下坠物的控制。而这些操作都是响应相关的功能键而执行的,所以这里可以把它看成一种“中断”

31、的操作。在中断过程中,可以通过键盘包括按某些键进行操作。为了便于用户操作,用户可以自主选择操作键,但他们的作用不变。但还是应该设置默认键来方便操作。例如:光标向上键(手指向上滑动),光标向下键(手指向下滑动),光标向左键(手指向左滑动、 左边框向下),光标向右键(手指向右滑动、 右边框向下),空格键。l 按光标向上键 此事件产生下坠物旋转操作,下坠物并非任何情况都能旋转,如果旋转后与小方格矩阵显示的下坠物有冲突或超出边界时,均不能发生旋转。因此首先要判断是否有足够的空间进行旋转,然后选择是否旋转。l 按光标向下键此事件产生下坠物加速下落操作,如果下坠物已经到达游戏区域底部或者已经有其他方块遮挡

32、,则下坠物停止下降。l 按光标向左键此事件产生下落下坠物左移操作。首先要判断此下坠物是否能够发生左移,当越界或被其他显示下坠物阻挡时,则不能左移。l 按光标向右键此事件产生下落下坠物右移操作。首先要判断此下坠物是否能够发生右移,当越界或被其他显示下坠物阻挡时,则不能右移。l 按空格键此事件产生下坠物一键到底的操作,如果下坠物已经到达游戏区域底部或者其下方已经有其他方块遮挡,则下坠物不能再下降。3.3.3 主界面需求分析主界面需求分析主要包括界面的显示,快捷键的使用。首先,根据游戏本身的需要,应该在游戏界面里设置三个选项,分别为游戏、选项和帮助,在“游戏”里应该同时设置开始游戏、游戏暂停、游戏结

33、束、游戏设置和退出系统五个选项,以便于玩家轻松的控制这个游戏。而在“选项”里应该根据玩家对这个游戏的掌握程度的不同设置不同的游戏级别,大致设想分为六级,即入门级、初级、中级、中高级、高级和顶级,这样玩家就会根据自己的情况选择不同的级别。同时在这个“选项”里还有其他选项,以供用户实现个性化设置。例如玩家可根据喜好选择是否要开启背景音乐,是否在游戏中开启音效,还可以根据自己喜欢的颜色选择背景颜色等。在“帮助”的菜单项里应该有对游戏的文字描述和设计者的一些情况,这样可以极大方便从来没玩过此游戏的玩家。如果玩家对游戏规则有任何不理解,在这里可以找到相应的用户帮助。其次,我们为了方便玩家还应该为这个游戏

34、增加了一个放置常用功能的快捷键,以便用户可以通过鼠标点击而直接对相应的选项功能进行实现。这些常用功能选项可以分别是游戏的“开始”、“暂停”、“结束”、“设置”,这样就简化了用户的操作,为了美观,我们还应对按键添加相应的按钮图标。最后,我们还应该会在界面的右方出现游戏的具体信息,例如当前游戏的级别、目前所得的分数和游戏区域设置。并会在界面的右上方出现下一个将要下落下坠物的形状,这样可以方便玩家更轻松的完成这个游戏。l “开始”按钮点击“开始”,游戏即开始运行。区域右上角随机显示下一个下落的下坠物还有级别、分数、区域大小。另外,应该把“开始”和“设置”菜单设置成灰色,“暂停”和“结束”菜单恢复显示

35、。l “结束”按钮应该将当前程序中止,并将状态恢复至初始状态。l “暂停”按钮暂停即要停止当前下坠物的下落,将程序状态保存。同时应该使“暂停”菜单变成灰色,“开始”菜单恢复显示。l “设置”按钮为了方便操作,可以添加这样一个按钮,从而可以进行区域大小,游戏级别,下坠物样式,背景音乐,任意键的设置。而且它的进行必须在开始游戏之前,在游戏中不可以对其进行设置。3.3.4 记分需求分析计分需求主要是描述游戏中的得分规则以及英雄榜的排列规则,得分要看具体一次的消行数X,根据公式X*(X*100)来计算。消除一行100分,消两行400分,消三行900分,消四行1600分。级数可以根据玩家的初始选择和玩家

36、的表现共同决定。游戏的级数选择可以有入门级、初级、中级、中高级、高级、顶级。通过每一个级别的关卡后,游戏应该会自动为其升级,游戏会自动进入下一级。升入下一级后,速度自然加快,经过分析,速度通过设置一个触发器在根据不同的级别选择选择方块下落的间隔时间。当升到最高级后,程序不再为其升级,但分数将会继续累加。为了方便用户,游戏可以不设置通关,玩家可以玩到尽兴。为了吸引玩家,在游戏过程中,我们应该为不同的游戏情况增添了有不同的音效。例如,下坠物销行时,会产生一个特别音效;下落时会产生另一个特别音效;在游戏晋级时,也会产生一个“祝贺”的音效。我们还应设置俄罗斯方块英雄榜,它可以纪录得分最高的前八名,记分

37、榜保存在一个文件当中。当游戏结束后,如果玩家的得分进入前八名,游戏会请玩家输入他的姓名并且显示他的得分,录入成绩后游戏会自动进行排名,记分显示在游戏界面的上方。每次在玩家开始于游戏之前,玩家可以通过菜单栏打开一个对话框来查看榜单记录情况。第4章 系统概要设计4.1 游戏设计所要遵循的规范一个良好的程序,在编写之前,必须要制定各种编写规范,以便组内各成员协调工作。当然,本游戏只是一个小程序,过多的规范制定显得没有必要,但是,也必须制定一个对于变量的命名规则,这有利于设计出一个可读性高的程序。本程序变量的命名规则为:l 所有变量一律使用相应的英文单词命名l 如果同一类中需要创建多个同一类型,功能相

38、似的变量,变量的前缀应使用统一的英文单词,后缀为下划线“_”加数字。比如,从JButton对象创建开始按钮,可以命名为:startbutton。再如,创建多个道具按钮,可以命名为toolbutton_1,toolbutton_2等等。l 方法命名尽量使用能够描述本方法功能的英文单词。比如,游戏初始化可以用gameinitial。l 类名的命名也应当使用能够描述本类功能的英文单词。比如方块类,可以用class block。4.2 设计思想 游戏总体设计分析C#为纯面向对象的程序语言,它的诸多优点在此就不作论述了。从面向对象的观念出发,本程序主要可分为以下几个模块:l 方块及地图数据模块l 游戏操

39、作模块l 系统运行支撑模块l 配置模块分析对象的技巧在于它的功能的扩展性及维护效率。试想,如果因为外部环境或者用户需求的变化需要对程序进行功能扩展或者维护,就要对代码作大幅度的更动甚至重写,这样就失去了面向对象的优势,所以在本程序分析时将独立性高的模块作为一个对象,以提高程序的可扩展性和可维护性。4.2.2 方块及地图数据模块的设计这是俄罗斯方块游戏最基本的功能模块,本游戏的设计思想是只要有客户端控制器及方块地图数据模块,就能实现游戏的基本功能。本模块其实可以分开为方块和地图两个模块,但考虑到二者联系紧密,需要共享数据结构,属于公共耦合,耦合性过高,将二者分开也有悖于作者设计的游戏算法,增加了

40、程序的编写难度,故把它们并作了一个对象。l 方块数据方块数据存储了七种不同形态的方块,以及每个方块的四种形态,可用一个7x4x4x4的四维数组表示,例如,定义一个四维数组block7444,数组block的第一维表示七种不同形态的方块,第二维代表方块的四种不同翻转状态。数组的第三维和第四维代表某一种形态的方块的某一状态。假定,block00ij的值如以下:1,1,0,00,1,0,00,1,0,00,0,0,0则,block00ij代表“7”字型的方块。当方块翻转时,只需改变第二维的下标即可,即,block00ij变为block01ij。而如果更改方块形态,就改变数组第一维坐标。 l 地图数据

41、本游戏的游戏地图为25x15格,故应当用一个25行15列的二维数组存储游戏地图数据,但是考虑到本游戏嵌入了方块越界自动纠正功能,而方块越界,实际上就是游戏地图数组越界。假定,方块数据有以下数据模式,代表长条形的一种方块:0,0,0,10,0,0,10,0,0,10,0,0,1当以上数据模式所代表的方块处在游戏的左边界区,并且发生翻转时,方块可能翻出游戏地图外,在这种情况下,就发生了游戏地图数组越界,C#异常处理系统会抛出Array Index Out Of Bounds Exception,为避免这种情况的发生,游戏地图数组应当适当增大,故本游戏将地图数组长度和宽度各扩大了三个单位,定义成为2

42、8x18模式的数组。l 建立游戏的坐标系统俄罗斯方块,最终是要将方块绘到游戏地图中,如何确定方块在地图上的位置,就需要一个方块数组与游戏地图数组的映射关系。建立一个合理的坐标系统,对于游戏的设计有莫大的方便。结合C#的坐标系统,综合游戏设计上的考虑,本程序最终确定了将游戏地图的左上角坐标表示为(0,0),同样,方块在游戏地图中表示为记录方块左上角在游戏地图中的坐标。l 对方块数据和游戏数据的操作确定了方块数据与地图数据的映射关系,对方块和游戏数据的操作就变得简便了。对方块的操作包括方块的左移、右移、下移等,当方块左移时,只需将方块数组左上角的坐标往左方向移动一个单位即可,同理,方块右移、下移时

43、,只需将坐标往右、往下移动一个单位。如果以X代表方块左上角的横坐标,以Y代表纵坐标,方块左移,执行的操作是X-,方块右移,执行的操作是X+,方块下落,执行的操作是Y+。l 游戏绘图俄罗斯方块具有七种不同形态的方块,而方块又分别有正在下落和已经落下固定两种不同状态,如何在游戏地图中实现静态和动态地绘制出七种不同形态的方块,具有一定的挑战性。经过反复思考论证,本游戏决定采用不同的绘制模式来分别实现绘制动态和静态方块。l 游戏地图数组实现坠下方块的消行绘制当坠下的方块有满行需要重新绘制时,需要进行消行绘制。首先,可用一个数值代表游戏地图数组的某一个区域是否有方块填充,假定这个数值是2,即如果地图数组

44、中某一个元素的值为2,则表示这个元素所代表的地图区域存在方块。进行消行绘制时需要判断地图数组的某一行是否全为2,如果全为2,则可以认为这行被方块填满,需要进行消行,然后再继续往下判断下一行,直到所有满行被消除为止。 系统功能模块图 流程图图4-1 时钟处理流程图图4-2 主窗口处理流程4.3.2 类的结构图图4-3 类列表图4-4 Block类图图4-5 BasePage类图图4-6 Button类图第5章 系统详细设计5.1 方块与地图模块设计方块与地图模块是游戏中最主要的模块,本模块存储了游戏最重要的两个数据结构方块四维数组和地图坐标二维数组,以及对这两个数据结构的操作。这些操作就构成了游

45、戏中最基本也是最主要的功能,如得到方块、方块的翻转移动、满行消除等等。本模块中方块的数据结构用一个四维数组存储,数组的第一维代表方块的形态,即是哪一种方块,第二维代表某种方块的一个翻转状态,第三和第四代表的是具体的方块。例如,定义一个四维数组,int blockblocktypeturnstateij,这就是七种方块、四种状态,一共二十八个方块的模型。当然,这其中,有一些方块的几种翻转状态是一样的,比如,长条形的方块,只有两种翻转状态,田字形的方块,只有一种翻转状态,这些方块在方块数组中存储的多种状态也就是一样的。4如何将方块绘制到地图中去,可以说是游戏主模块中最大的难题,有了良好的方块数据结

46、构和地图数据结构,这个难题也就变得简单了。只要得到方块数组在游戏地图中的坐标,然后遍历方块数组,将方块数组中值为1的地方绘上一个单位的正方形格子,方块数组遍历完毕后,也就在地图上绘制出了形状不规则的方块。良好的数据结构让方块的移动,满行消除等操作变得简单。方块的移动和满行消除,涉及到的是对游戏地图数据的操作,例如方块往下移,需要将游戏地图的横坐标也随着往下移动一个单位,往左往右移动也同样如此。方块满行消除,需要遍历游戏地图数组,发现某一行数值全为2,即认为这一行被方块填满,应该消去,行消去之后,应该把这行以上的数据全部向下移动一行,然后再继续往下检测,有满行就消行,再把上面的数据整体往下移动一

47、行,如此重复,直到将所坠下方块占据的行数检测完为止。最后得到的就是消行之后方块的堆积状况和游戏地图数据了。本模块的主流程图如图5-1所示:图5-1 方块和地图数据模块流程图5.2 得到方块如图5.1所示,游戏中得到方块分两种,一是当方块落下后得到一个新方块,显示在游戏地图中,接着得到一个NEXT方块,显示在NEXT方块画布中。这里,将要解决的问题就是怎么得到一个新方块,怎么得到一个NEXT方块,又怎么将NEXT方块作为下一个新方块。方块是有模型和颜色的,在得到一个方块前,还得先得到要出现的方块的模型和颜色,然后才能在画布中绘制出指定模型、指定颜色的方块。l 方块的模型每得到一个新方块,都是随机

48、从七种形态的方块中选取一种。由概要设计中可以得出分析,可以定义一个变量,代表新方块的模型。比如定义int型变量blocktype代表方块模型,方块的模型只有七种,所以blocktype的取值也只有七个,可以设定blocktype取值从0到6。即,0=blocktype=6那么,当方块落下需要得到新方块时,只需随机得到一个blocktype值,然后再把这个blocktype值赋给方块数组的第一维即可。剩下的问题就是应该怎么随机到一个blocktype?C#语言包中的Math类提供了一个换取随机数的方法random(),调用这个方法会产生一个值在0-1之间的双精度浮点数。所以每次要得到新方块时,只

49、需调用一次这个方法,得到一个0-1的双精度浮点数,然后把这个数乘以一个稍大的整数,比如1000,得到的结果除以7,然后取余,最后将余数取整,取整后的结果就是一个大于等于0,小于等于6的blocktype值了。l 方块的颜色如果游戏中只有一种单色的方块,游戏未免显得过于单调,因此本游戏期望能够设计出彩色的方块。对于色彩值的得到,也可以用上面的方法,比如可以预先定义几种颜色,然后随机得到某一个数,这个数代表其中一种颜色,但是这样游戏的色彩还是显得有些单调。本游戏的期望是设计出色彩缤纷的方块,这个色彩缤纷甚至可以是整个游戏中出现的方块颜色都可以不一样。为了达到这个目的,在每次构造一个新方块时,就需要

50、从颜色库中构造一个新颜色。我们知道,颜色其实是由红、绿、蓝三种颜色复合成的,这三种颜色复合时每一种颜色分量的不同,都会产生一种不同视觉效果的颜色。所以,在构造颜色时,我们可以分别给红、绿、蓝随机出一个不同的颜色值。C#抽象窗口工具包中提高了Color颜色类,其中有一个构造方法,是通过指定红绿蓝三种颜色分量来构造一个新color,有了这个构造方法,再利用Math类中的random方法,就可以达到“色彩缤纷”的效果了。7l 如何得到一个新方块在随机出一个新的blocktype值后,要得到新方块就变得非常简单了,只需要将blocktype值传递给方块数组的第一维,同时把随机出的Color对象也传递过

51、去,这样,就可以用得到的颜色画出指定形状的方块了。l 如何得到NEXT方块同样NEXT方块的形状和颜色也可以用上面的方法,然后在NEXT画布中绘制出得到的方块。剩下的任务就是怎么将现在的NEXT方块变成下一次出现的新方块的问题。既然NEXT方块的blocktype值和color值已经得到,这个问题其实也就不难解决了。在得到新方块时,只需要将NEXT方块的blocktype值赋给新方块的blocktype,将NEXT方块的color值赋给新方块的color,然后再改写NEXT方块的blocktype和color,这个问题就解决了。图5-2是得到方块的算法流程图:图5-2 方块生成算法流程图5.3

52、 方块的翻转与移动方块的翻转与移动比较容易实现,方块移动只需要改变方块的横坐标或纵坐标,然后重新绘制方块即可。方块翻转也只需要改变方块数据第二维turnstate的值,然后重新绘制方块即可。但是,这里边也会出现一个问题,这何种时候,方块不能再翻转和移动?5.3.1 方块的移动很显然,当方块移动到地图的左右边界处,或者落下去后,不能再继续移动;另一种情况就是,当方块要移动的方向被其他方块挡住时,方块不能再移动。确定方块移动的规则后,接下来就是如何将这种规则用算法表示的问题了。比如,当方块移动的左边界处时,方块不能再继续往左移动了,这个时候,肯定有一个条件成立,那就是方块的横坐标必定是小于或者等于

53、零的。如果方块的横坐标等于0,方块就不能再移动,那么方块数组的第一列至少有一个值为1,这种情况比较简单,但是,如果方块数组的第一列全为0时,也就是说,当方块数组有1的那列碰到边界时,方块才不能移动,这个时候,首次出现1的那列的横坐标为0,而方块数组的横坐标肯定已经小于0了。假定我们以x记录方块数组的横坐标,以j记录方块不能移动时,方块数组中首次出现1的那列,当方块不能移动时,x+j的值必定是等于0的。同理,当方块到达右边界不能移动时,我们可以从方块数组的右边开始检测,记录下首先出现1的那列的值,这个时候,x+j一定是等于14的。当方块落下后,方块同样不能再移动。这又分为两种情况,一种是要坠下的

54、地方还没有方块,这个时候,只要可以记录下方块数组中最后出现1的那一行,假定那是第i行,这样,只要y+i等于24,就可以认定方块已经落到游戏地图的底部,不能再继续下落。6当要方块下边或者左右有方块时,可以确定下边有方块的那一格在游戏地图中的纵坐标是横坐标或纵坐标是x+j+1或者y+i+1,假定那一格的纵坐标坐标或者横坐标为y或x,那么游戏地图数组中x+j+1y或者xy+i+1这个元素的值必定是2。综合以上几种情况,我们可以列出方块移动条件判定表,如表5-1所示:表 5-1 方块移动条件判定表12345678是否有阻隔TTTTTTTF条x+j=0|gameareay+ix+j+1=2TFTTTFT

55、件x+j=14|gameareay+ix+j-1=2FTFTFTTy+i=24|gameareay+i+1x+j=2FFFFTTT动左移动作右移动下移动5.3.2 方块的翻转大多数的俄罗斯方块游戏的翻转判定条件都比较简单,即方块处在边界处时就不能再翻转,因为这种时候翻转会发生数组越界错误。试想一下,当方块移动到边界处,甚至还没有到边界处时,就不能再翻转了,无疑会给操作带来大大地不方便性。方块翻转的另一个问题就是,当方块下落过程中,左右两边都有方块,周围的空间不能再容许它翻转,往往很多游戏没有注意到这一点,这就导致,方块翻转之后把原来存在的方块给挤掉了,这个问题本质上也是翻转越界。为了解决以上问

56、题,游戏设计中应该增加一个对于方块能否翻转的判定以及翻转越界纠正功能。l 方块翻转判定如上所述,在两种情况下一种是方块落下去固定住以后,第二种是周围的空间不允许它进行翻转。第一种情况好办,只要参考方块落下去后不能够再移动的判定即可。对于第二种情况,在每次方块翻转前,必须首先计算出方块周围的空间,如果空间允许则翻转,否则,不能翻转。这里面又出现一个棘手的问题,因为七种方块是不规则的,每种方块要求的翻转空间都是不一样的,甚至是在它的不同翻转状态下,所要求的翻转空间也是不一样的,首先想到的自然就是为每一种方块,方块的每一种状态都写一个判定条件,然后根据当前的blocktype和turnstate值,

57、选择哪种判定条件进行判定,但是这样做未免过于麻烦。根据观察,不难发现,七种形态的方块,长条形的方块如果以横条的形态下落,则只有能够下落,就能翻转,如果以竖条的形态下落,那么它翻转后所处的位置必须要有4x1个格子的空间才能够翻转;对于田字形的方块,只有能够继续下坠,就一定能够翻转,所以田字型的方块只要没有落下,就一直能够翻转;而其它五种形态的方块,又有一个共同点,就是它们都有两种翻转状态横向占三个格子的空间,竖直方向占两个空间,另外两种翻转状态横向占两个格子的空间,竖直方向占三个格子空间,如果他们是以横向占三个格子的状态下落,那么只要能下落,就一定能够翻转,如果是以横向两个格子的状态下落,那么在

58、翻转后,周围必须要有3x2个格子的空间。所以,方块翻转的判定,要分三种情况。第一种情况是方块落下去后不能翻转;第二种情况是对竖直状态出现的长条形的方块进行翻转判定;第三种情况是对除长条形和田字形之外的其它五种以横向占两个格子的状态出现的方块进行翻转判定。何种情况下方块能够翻转的问题解决了,接下来,我们就应该解决方块翻转后所处的位置的问题了,因为只有事先知道方块翻转后所处的位置,才能够对那个位置的空间范围进行判定,判定它是否能够容纳方块。可以确定的是,无论方块怎么翻转,都处在方块数组中,也就是说方块必定是在游戏地图中某一4x4个格子的空间范围内。方块数组在游戏地图中的坐标是确定的,不确定的是方块

59、翻转后到底处在方块数组的哪个位置,为了解决这个问题,我们可以限定方块在方块数组中的存储原则是靠左、靠上,这样,无论翻转怎么翻转,方块数组中第一行和第一列都是有方块的,这样也就确定了方块在方块数组中的位置,也就可以得知方块翻转后在游戏地图中的位置了。假定方块数组的横纵坐标是x和y,那么,这个位置就是,长条形的方块翻转后所处的那一行是游戏地图的第y行,所占的列是第x到x+3列,长条形和田字形以外的五种方块翻转后的所占的行数是游戏地图的第y和第y+1行,所占的列是第x到x+2列。所以,如果以上空间有空格子,方块就能够翻转。据此,我们可以列出方块翻转的条件判定表,如表5-2所示:表5-2 方块翻转条件

60、判定表12345678落下TFFFFFFF田字形方块T 所长条形方块1x4形态TT有4x1形态T条其它五种2x3形态TT件方块3x2形态T第y行, x、x+3列空TF第y、y+1行x、x+2列空TF所有翻转动作不能翻转l 翻转越界纠正由上述判定表可以看出,只要方块翻转后所处的空间足够,方块就能够翻转,但是,如果方块翻转后所处的空间不足够,而在它的另一边却有足够的空间呢?比如,一个方块在它左边正好差一个格子的空间才能够翻转,但是它的右边恰好有一个格子的空间,这种情况,如果方块不能够翻转,就不方便用户操作,如果能够翻转,就会发生越界,将已经存在的方块挤占掉。要想实现翻转又不发生越界,那么,就应该在

61、方块翻转后把它往右边移动一个格子,然后再绘制方块,这样,方块就不会挤占掉其它已经固定住的方块了。同样,方块在边界处时,翻转后不仅可能翻出地图外,还可能发生数组越界,当然,只需要将地图数组定义得大一些,就能够避免数组越界错误,对于方块越界,如果在它的另一边有足够空间,那么,就应该把方块往另一个方向移动适当的单位,纠正方块越界错误。结合上述判定表,可以列出方块翻转-越界纠正判定表,如表5-3所示:表5-3 方块翻转-越界纠正判定表落下TFFFFFFFFFF田字形方块T 长条形方块1x4形态TTTT所4x1形态T有其它五种2x3形态TTTT条方块3x2形态件第y行, x、x+3列空TFFF第y、y+1行x、x+2列空

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!