【推箱子游戏的设计与实现13000字(论文)】_第1页
【推箱子游戏的设计与实现13000字(论文)】_第2页
【推箱子游戏的设计与实现13000字(论文)】_第3页
【推箱子游戏的设计与实现13000字(论文)】_第4页
【推箱子游戏的设计与实现13000字(论文)】_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

推箱子游戏的设计与实现【摘要】纵观历史的潮流发展,社会的进步和安定都离不开一定的娱乐项目。作为社会自然人,用户都有自己选择在适当的时间里以一个合适的方式去释放出用户身体中的压力的权力。不过“合适”的程度在每个人的理解里都是不一样的,毕竟在如今的高压状态里无法避开一个点,那就是时间和空间的有效性以及最终目的的可行性。选择出行可能需定性毁掉计划,但如果选择的是游戏就完全没有这些不必要的考虑,用户只需要操心的角色推动箱子到达指定的地点就可以完成通关任务。本次游戏设计的基础语言环境为java,此次的游戏设计所用到的核心模块在于关卡地图的生成、人物的移动控制判断,除了这两点之外还为本次开发配置了额外可供选择的舒缓音乐,让用户在思考的同时可以 1 4 4 41.3课题研究的意义 51.4本文的工作与组织结构 61.4.1开发语言的选择 61.4.2开发平台介绍 72.需求分析 82.1功能性需求分析 92.2非功能性需求 1.软硬件需求 2.3可行性分析 2.3.1经济可行性 12.3.2技术可行性 12.3.3管理可行性 2.3.4社会可行性 3.系统设计 13.1将用户需求转化为设计概念 13.2系统功能模块设计 3.2.1游戏界面的初始化 3.2.2绘图功能的实现 3.2.3人物移动功能的实现 3.2.4箱子移动功能的实现 3.2.5基础功能的实现 4.系统实现 4.1系统开发平台 4.2系统运行软件环境 4.3函数模型说明 5.软件测试 235.1.什么是软件测试? 235.2.为什么要进行软件测试? 23 24 26 26 工欲善其事,必先利其器。对自身条件的掌握程度会在很大一定的影响着我们的行事风格和执行力度,也正是需要先对自身的能力有了清晰的认知后,才能相对应的指定合适的执行计划。所以想要顺利的完成一个任务,把握自身条件、理清逻辑顺序、制定详细执行计划这些步骤都是必不可少的。而系统分析的作用也正是如此,清晰的逻辑思维可以帮助开发者更加顺利的完成任务进度,把原本庞大繁琐的开发问题转化成为一个个并不复杂的小目标,一步一步的去攻克难题。下面将从选择游戏作为开发项目的目的,推箱子游戏的国内外研究背景介绍,开发语言的选择和此次项目开发的环境配置需求以及代码编写过程中的算法基础等方面进行简单的介绍。1.1课题研究背景推箱子的本质上是属于滑块谜题(SlidingPiecePuzzle)的一种,游戏里面核心就是他的难度变化曲线的设计。游戏的难度变化曲线也就是常说的游戏的节奏,而一款休闲益智标签的解谜游戏来说,游戏节奏恰恰是最为重要的一个关键点。人们对解谜类型游戏的节奏把握要求实际上是相对苛刻的,这类的游戏一方面要为玩家设置游戏难度,但他的难度指标又不能超过一定的界限。实现难度设定的方式有很多方向,而推箱子游戏则是能够实现各种不同的解题方向,给玩家留下了很大的思考的空间,往往同一关卡的解谜思路有各种各样,玩家都可以达到通关的目的;而简单性则是要求游戏难度的设计可以满足大多数玩家的水平,如果随便一个人都可以简单的通关,那么人们就无法提起挑战的欲望,市场上很大一部分的游戏都是选择保持稍高节奏来激起人们的胜负欲和挑战心,以此来维持游戏的活力。同样的,推箱子游戏的基本原理还可以延伸到机器人的控制和物品摆放这些实际问题上来帮助人们解决出现在生活中的实际问题,这也是游戏的初始背景。推箱子游戏作为最为经典的几款初级开发游戏佳作之一,从他的设计诞生之初就在世界范围风靡了几十年,当然推箱子的流行推广也启发了很大一批的游戏制作人,他们在推箱子的参考原型下设计出来了许多精彩的解谜游戏。1.2课题现状分析推箱子游戏作为一款经典的单机小游戏,在其诞生之投入了相关方面的研究。在以此为基础的项目开发中,许游戏内容不断涌现,极大的丰富了游戏的饱和度。例=Resynth,推箱子+贪吃蛇=SnokobanDash,推箱子+多消+其他=Polyology。越精美符合人们的审美观,再结合不同的主题风格,还有各种各样的功能如自本次的课题探究也选择从用户角度中出发,着戏内容的提升。此次开发在原有的推箱子游戏基础上优化一、双键盘监听,可以让不同习惯的用户都制,其次是为了更好把控游戏的节奏和进度,对于任何终目的都是用户向的,是为了满足用户的需求,而自由选关就是把游戏节奏的控制权交付给用户,让其自行把握;三、音乐的控制和选择,每一款游戏都有自己的代表性音得用户在登录的第一时间可以拥有一个相对安静的毕业设计,一方面是为了检验在校期间的学的专业能力进一步的进行强化巩固。此次开发选定推箱子游戏作为第一方向的其中一个原因是主观方面对游戏的开发兴趣使算机学习以及初步掌握了代码编写的基本能力,希望运行在自己的双手中跑出来的成果;第二个原因遣娱乐方式,游戏必然有他的迷人之处。人们可以以一个极低的时间成本、空间成本以及消费水平来轻松达到放松缓压的目的,帮助人们释放掉各种负面的情绪,重拾一个阳光健康的心态面对生活。从国家长远发展来看,游戏的精进也是社会发展的必然结果,他的低成本、更高空间利用率都是人们选择的首发。可以预见的是未来的游戏种类会变得愈来愈繁多,科技含金量也会越来越高,可以更好的满足人们的心理需求。或许现在的我们还只是在生活中游戏,而以后的我们可以在游戏中生活。当然这只是现阶段对游戏发展前景的一个美好构想,当前社会的游戏设计的初心还只是停留在吸金引流的初级阶段,缓解压力和释放情绪仍然是他的功能主体。而此次的游戏开发也将是本人迈出的第一步。在实践操作的过程中熟悉掌握开发的相关操作技能,提升自己的编程能力,为今后的社会工作生活打下坚实的1.4本文的工作与组织结构已经学习的语言种类:Java语言作为校内学习的原生开发语言,java语言在代码编写的方面都有各自的优势区间,经过认真的比对思考,最终定下了开发的语言环境。1.简单。Java语言简单易学,稍微有C语言基础的人很容易就可以上手入门。但这并不意味着Java是和C语言直接划等号,Java语相较C语言少掉了很多复杂特性,使得编程的难度和代码量一下子就减轻了很多,具有更强的逻辑性。2.面向对象。Java基于对象的编程方式更加符合普通人的思维模式,这使得人们更容易适应程序编写模式。Java语言引入类的概念,给用户创建对象模板提供与之对应的模板,类包含了被创建对象的状态描述和方法的定义。3.平台无关性。与平台无关是Java语言最大的优势。其它语言编写的程序在不同的操作系统运行可能会出现错误或无法运行。而Java语言的代码经过编译生成的代码则是与计算机硬件结构无关,因此Java代码具有很强的可移植性。4.解释型。Java不像C++,它把程序编译为称做字节码的一个“中间代码”。字节码可以在任何一个安装有Java虚拟机JVM的系统上被解释执行出来。Java语言翻译一句,执行一句,不产生整个的机器代码程序。翻译过程如果没有出现错误,就会持续翻译知道结束,否则就会在报错的地方停止执行。5.多线程。Java支持多线程,可以允许多个任务同时进行。当然这并不是真正意义上的同时完成,目前的计算机处理器在同一时刻依然只能执行一个线程。处理器的处理速度远超过了人们接收信息的反应速度的时候就造成了一种多个任务在同时执行的错觉。6.安全性。我们在网页下载的时候经常会当心有病毒、恶意代码等等,但是在支持Java的浏览器中就不必担心这个问题,它可以有效的限制代码的运行环境,不会对我们的用户造成伤害。Java语言作为如今的高热度编写语言,自然也是我们作为游戏开发语言的绝佳选择。1.4.2开发平台介绍MyEclipse)是对EclipseIDE的扩展,通过MyEclipse可以大大的提高用户在数据库和JavaME的开发、发布以及应用程序服务器的整合方面的工作效率。作为一个功能极其丰富的JavaME集成开发环境MyEclipse拥有完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JMyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse可以支持JavaServlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。几乎囊括了所有主流开源产品。2.MyEclipse常用快捷键3.CTR+L定位在某行4.Ctrl+T快速显示当前类的继承结构5.Ctrl+J正向增量查找(输入的每个字母编辑器都能够快速匹配定位到6.Ctrl+Z撤销当前的修改状态8.Ctrl+D删除当前行9.Ctrl+F8切换到下一个View10.Ctrl+Shift+/自动注释代码12.Ctrl+Shift+O自动引导类包13.Ctrl+Shift+S保存所有未保存的文件。14.Shift+Ctrl+Enter在当前行插入空行(原理同上条)15.Alt+CTRL+↓复制当前行到下一行(复制增加)16.Alt+CTRL+个复制当前行到上一行(复制增加)改一次搞定)1.什么是需求分析?需求分析又称之为软件需求分析、系统需求分析或者需求分析工程等。软件项目的开发人员通过各种途径了解软件的构成,与用户进行深入的沟通,确定并确定软件项目的功能、概念、主题要求等等用户需求,逐步把用户模糊的项目概念和概念集体细化,得到一个具体的开发方向和设计需求。2.为什么要进行需求分析?项目需求分析是所有项目开发环节中必不可少的一个步骤,从历史的项目开发经验中我们可以分析得出需求分析的重要性,许多的项目失败究其根本原因就是开发前期的需求分析没有做到位,与用户的沟通情况并不明朗,没有正确拟定项目的功能结构和细化信息,使得最后开发出来的项目与用户的预期不符合,最终导致项目失败,浪费了许多的时间成本和人力物力成本,造成资源浪费。因此,软件分析对于软件开发人员来说,是极其重要的一个步骤,是所有项目开发的基石。3.软件分析的内容有哪些?软件需求分成:对于项目开发人员而言,系统的设计和代码开发并不是最难的部分,因为这些部分都有自己的理解和网络学习资料可供借鉴,因此技术方面的问题并不是主导项目开发难度的关键因素,恰恰相反,在用户角度三言两语就可以说明的系统内容常常会因为最后完成的软件没有完成用户的需求而导致用户不满,最终还是要回到与用户的功能需求沟通的问题上去,所以说主导项目开发难度的是用户角度的系统需求。用户需求分析要求我们了解以下信息:用户想要达到的效果是什么?用户设计的软件包括那些内容?用户对细微功能的具体要求有哪些以及对软件本身的运行环境有没有具体的要求等等。只有对这些信息有详细的了解,才能在接下来的代码编写过程中不至于束手束脚。例如:在不知道用户的运行环境要求的情况下,开发人员是应该编写一个微软系统的程序呢还是开发一个安卓的移动端应用呢,显而易见的是这两种情况不能互通,这样的情况就会加大开发的难度,造成不必要的损失和浪费。2.1功能性需求分析推箱子游戏作为一款休闲益智的经典小游戏,开发得到的最终项目应该是轻松舒缓,节奏可控的。由于用户对项目的最终目标需求并不明确,需求分析的大致方向由已有的游戏设计为背景,提出了以下设计要求:1.游戏界面:市面的推箱子游戏界面设计大多都比较简洁,这也符合玩家的实际需求,通过简单的配色达到一个舒适的界面效果。其次是需要有一定的功能按钮,方便用户在游戏过程中的快捷操作。2.游戏内容:登录游戏时自动打开地图展示在玩家眼前,玩家通过上下左右/WASD键位来控制人物的移动,将箱体推到合适的位置完成通关任务。为了让玩家可以清晰的找到终点的位置,初始箱体和目标地点的颜色深浅应该明确的区分开来。3.游戏逻辑设计:当玩家将所有的箱子推动到正确的位置上的时候可以正常通关,如果箱子移动到了无法移动的死角则无法顺利过关,可以通过界面的返回上一步或者直接选择重新开始。机带RAM:8G;DriverDataC:\Windows\System32\Drivers\DriverDataJAVA_HOMEJAVA_HOMEC:C:\ProgramFiles2.测试JDK是否安装成功2.3可行性分析2.3.1经济可行性格审核,不涉及商业相关的用途。通过此次的项目设计锻炼开发者java技术和实践相结合悉各种页面跳转变换的操作概念。开发所需要的软件操作环境为MyEclipse,MyEclipse的相2.3.2技术可行性一方面是因为JAVA语言作为后期学习的主要语言,个人使用熟练度较高,对语言的相关操作有较好的基础能力,适合游戏开发的需求。其次是JAVAD的语言环境拥有简洁的操作,2.3.3管理可行性2.3.4社会可行性3.1将用户需求转化为设计概念用户界面需求:简洁、可视化,有相应的功能按钮盘方向键(上、下、左、右键或者W、A、S、D)实现对人物移动的上、下、左、右方向控功能在弹出窗□控件中输入自己想要跳转的关卡数,如果输入的数值在1至50之间,则可以成功跳转,否则将会显示该关卡不存在!选关的功能极大的丰富了游戏的可玩性,玩家能3.2系统功能模块设计基础功能的实现基础功能的实现箱子移动功能实现人物移动功能实现绘图功能的实现游戏界面初始化图3-2-1游戏的功能主体3.2.1游戏界面的初始化图3-2-2游戏的初始界面(1)界面框架与按钮设计推箱子游戏界面设计简单美观,图像的选择贴合游戏的主题设计,具有很“悔一步”:返回上一步用户操作(支持返回连续步数的用户操作,可以返回到初始状态);“上一关”:跳转到当前关的上一关;“下一关”:跳转到当前关的下一关;“第1关”:用户登录的游戏初始关卡默认是第一关,点击此按钮可以方便用户从其它“最终关”:实现功能为跳转到游戏最后一关;“选关”:为用户提供了关卡的自由选择功能,单击此按钮可以在弹出的窗口控件中输“更换音乐”:单机此按钮,用户可以自由选择游戏音乐3.2.2绘图功能的实现地图的设计需要提前将编写好的二维数组储存的地图文件保存在本地的游戏土地文件夹中。以0到9的十个数字对地图内容进行不同的定义:数字0表示:没有定义的空白区域;数字1表示:墙体/障碍物;数字2表示:人物和箱子可到达的区域;数字3表示:箱子的当前区域;数字4表示:箱子的最终目的区域;数字5表示:游戏人物向下移动;数字6表示:游戏人物向左移动;数字7表示:游戏人物向右移动;数字8表示:游戏人物向上移动;数字9表示:箱子已经达到指定位置;图2-1二维地图文件与对应的游戏应界面游戏中对应的游戏地图文件共计50个,这些地图信息都是在开发之前就编写好的二维数据文件,然后在游戏目录下面创建一个专属的map3.2.3人物移动功能的实现墙体和并排的情况时,人物就无法移动。在人物移动的过程中,二维数组中存储的数据也3.2.4基础功能的实现(1)悔步功能;(2)关卡选择功能;(3)音乐控制功能;(4)开发者信息介绍功能.有更多的选择空间,大大提高了玩家的解谜流畅度,也使得游图3-2-3游戏初始状态图3-2-4游戏初始状态悔步图3-2-5游戏移动后状态图3-2-6游戏移动后悔一步图3-2-7游戏移动后重新开始2.关卡选择功能关卡选择功能主要实现了上/下关卡的变换和任意关卡的选择两种状态。两种设计都是从用户游戏体验角度出发,让用户可以随心所欲地选择自己想要的挑战关卡,节约游戏时间成本,优化游戏体验。具体实现代码如下:实现效果如下:图3-2-8游戏选关功能3.音乐控制功能:音乐控制功能主要实现的是音乐的开关控制和播放音乐的选择两个主体功能,两种设计都是从用户游戏体验角度出发,让用户可以随心所欲地选择自己喜欢的游戏环境,可以选择不同的音乐节奏进行游戏,也可以选择关闭音乐播放,营造一个安静的游戏空间,优化用户的游戏体验。具体实现代码如下:音乐控制功能展示:图3-2-9游戏音乐选择功能4.开发者信息介绍功能开发者信息介绍功能是开发者对这款游戏的简介,为初次接触这款游戏的用户介绍游戏的玩法,提供了一些开发者的基本信息介绍,优化用户的游戏体验。具体实现代码如下:JOptionPane.showMessageDial"您可以使用WASD或←个↓→来控制人物的移动,\n最终目标是将全部的箱子推到合适的地方,加油骚年!\n\nJAVA推箱子开发:万永辉");实现效果如下:肖息确定4.1系统开发平台4.2系统运行软件环境4.3函数模型说明函数原型:voidputoutChar(inty,intx,charch,charfc,charbc)该函数实现的功能是将开发者需要显示的字符信息在屏幕上的指定位置上输出出来。其中的x、y表示的是位置的坐标,ch表示需要输出的字符,fc是对字符颜色进行设置,bc是设置背景颜色。函数原型:voidprintWall(intx,inty)该函数实现y表示的是当前墙体的坐标位置。该函数调用putoutChar()进行输出,以黑色为背景绘制绿色墙,用小方块表示墙(ASCII值为219)。函数原型:voidprintBox(intx,inty)该函数实现的功能是在非目的地绘制箱子,参数x、y表示的是绘制箱体的位置。该函数调用putoutChar()进行输出,以黑色为背景白色箱子,(ASCII值为10)的字符表示箱子。函数原型:voidprintBoxDes(intx,inty)该函数实现的功能是在目的地绘制箱子,参数x、y表示的是目的箱子的位置。该函数调用putoutChar()进行输出,以黑色为背景绘制黄色箱子,仍用(ASCII值为10)的字符表示箱子。函数原型:voidprintDestination(intx,inty)该函数实现的功能是绘制目的地,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景绘制黄色目的地,用心型表示(ASCIⅡ值为003)。函数原型:voidprintDestina位置的功能。其中x、y指明目的地的位置,每一关的所有目的地位置存放在结构体structwiner中,形成一条链表,**winer返回链表的头,**pw则指向链表的明绘制的位置。该函数通过软中断来实现,首先设置寄存器AX的高位和低位,设置高位0xa表示在光标位置显示字符;设置低位02(ASCII值),表示输出的字符;然后设置寄存器CX为01,表示重复输出的次数,这里只输出一次;最后产生类型为0x10的中断,表示显示器输出。函数原型:voidinit()该函数实现的功能是初始化屏幕。该函数首先用两个for循环初始化屏幕20*20范围内的状态,初始化为0,以后根据实际情况重新赋值;然后设置屏幕输出状态,设置寄存器AX的高位为0,低位为3,表示以80*25的彩色方式显示;最后移动光标到指定的位置输出操作提示信息以及版权信息。*initStep4()这几个函数分别初始化游戏的第一关到第四关。这些函数的功能和实现步骤相似。首先根据需要在指定的位置绘制墙壁和绘制箱子,在这里可以设置游戏的难度,初始化的墙壁越复杂,箱子越多,则游戏就越难。游戏的第一关目的地和小人。函数返回包含各个目的地位置的链表。voidmoveBoxDestoDes(intx,inty,chara)这几个函数实现的功能分别是人空地移动箱子到空地、从目的地移动箱子到空地、从空地移动箱子到目的地和中从目的地移动箱子到目的地。X、y指明小人当前所处的位置,字符a表示移动的方向,有“u”、“d”、“1”和“r”4个值,分别表示向上、下、左、右移动。这几个函数的实现原理大致相似。对于前面两个函数,首先判断移动的方向,人小人所在的位置沿着移动的方向移动一步绘制小人,移动两步绘制箱子(调用printBox()函数),并设置状态为“b”;对于后面两个参数,首先判断移动的方向,从小人所在的位置沿着移动方向移动一步绘制小人,移动两上在目的地绘制箱子(调用printBoxDes()函数),并设置状态为“i”,表明箱子在目的地上。函数原型:intjudge(intx,inty)该函数实现的功能是根据结构体struct[x][y]中存的值来判断该点的状态。(1)若下一步所在位置的状态为墙壁(“w”),则(2)若下一步所在位置的状态为目的地(“i”函数)、在下一步位置绘制小人(调用printMan()函数)。②若当前位置的状态为非目的地,则输出空格清空当前位置的小人,并在下一步位置绘制小人(调(3)若下一步所在位置的状态为箱子(“b”),则:①如果下下一步位置的状态为“0”,则把箱子从空地移动到空地(调用moveBoxSpacetoSpace()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先绘制目的地(调用predestination()函数))。②如果下下一步位置的状态为目的地,则把箱子从空地移动到目的地(调用moveBoxSpacetoDes()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先绘制目的地(调用(4)若下一步所在位置的状态为箱子在目的地(“i”),则:①如果下下一函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用函数原型:voidreset(inti)该函数实现的功能是重置当前关。该函数首先判设置,初始化屏幕,初始化第一关,并显示操作提示信息和版权信息。然后根数进行(如果按下Esc键,则退出程序)。对于每一关,如果所有的表示目的地5.软件测试过实践运行测试,找到功能实现的不足之处或者是bug,可以及时的修改项目代(2)编制测试大纲。编写大致的测试方向和初步计划。(3)由测试大纲设计、生成测试用例,得到相对应的测试

温馨提示

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

评论

0/150

提交评论