毕业论文-基于Java语言推箱子游戏的设计与实现.doc_第1页
毕业论文-基于Java语言推箱子游戏的设计与实现.doc_第2页
毕业论文-基于Java语言推箱子游戏的设计与实现.doc_第3页
毕业论文-基于Java语言推箱子游戏的设计与实现.doc_第4页
毕业论文-基于Java语言推箱子游戏的设计与实现.doc_第5页
已阅读5页,还剩45页未读 继续免费阅读

VIP免费下载

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

文档简介

北京邮电大学毕业设计基于Java语言推箱子游戏的设计与实现摘 要社会在进步,人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求,java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。具有操作简单,易于上手的特点。推箱子游戏的玩法十分简单控制人物绕过障碍物,到达目的地。此次试验基于java语言。将游戏地图做成通用的关卡设计,关卡用文本实现在文本文件里设置好关卡, 游戏核心模块中图片随机生成采用了数字和图片绑定,运用随机函数以及数组交换的算法,实现了游戏图片初始化状态,有效的解决了图片排布问题,方案简单易行。充分运用堆栈的存储特点实现悔棋功能。用迭代计算小人和箱子的移动,一个计算人是否能到达某一个格子 一个是计算箱子是否能到达相邻的某一个格子。舒缓的音乐配合有趣的步骤,相信能引起很多人的兴趣。作为一个具有悠久历史的游戏,也能够引起人的怀念和共鸣。关键词 压力;游戏;java;多功能iJava implementation of the Sokoban gameAbstractSocial progress, quality of life is also increasing. High-intensity pressure also follow. The emergence of new social urgently needed an effective way to relieve peoples stress. This is designed to meet the needs of the community, java Sokoban game allows people in her spare time, experience the fun of the game. With simple operation, easy to use features.Sokoban game play is very simple - control the character around obstacles to reach the destination. The test is based on java language. The game map made generic level design, checkpoints set up checkpoints to achieve with a text in a text file, the game core module uses a randomly generated digital images and pictures binding, using a random array of functions and algorithms exchange to achieve a game pictures initialization state, effectively solve the problem of picture arrangement, the program is simple. Make full use of the storage characteristics of the stack to achieve undo function. Mobile computing and boxes of iterative villain, a calculation whether one can reach a certain grid is to calculate whether a case can reach a neighboring lattice. Soothing music with interesting step, which will hopefully lead to a lot of peoples interest. As a game with a long history, but also can cause people to miss and resonance.Key Words Pressure; games; java; multifunctionii目 录摘 要iAbstractii引 言11 系统分析21.1 技术可行性分析21.1.1 可行性目的21.1.2 可行性研究前提21.1.3 算法可行性分析21.1.4 平台选择41.2 需求分析81.2.1 引言81.2.2 游戏需求81.2.3 软硬件需求91.2.4 接口控制91.3 方案论证91.3.1 C+语言的优点91.3.2 Java语言的优点101.3.3 C语言的优点111.3.4 方案选择132 概要设计152.1 游戏设计分析152.1.1 地图文件的引用152.1.2 程序运逻辑152.1.3 绘图152.1.4 显示平台152.2 注意事项152.3 游戏流程图162.4 函数模型163 详细设计203.1 游戏总体结构与代码203.2 选关模块213.3 地图的绘制形成223.4 小人与箱子移动的算法243.5 小人上下移动模块263.6 悔棋模块273.7 音乐控制284 游戏测试304.1 软件测试304.1.1 软件测试简介304.1.2 测试方法304.1.3 测试步骤314.2 游戏系统性能分析31结 论32参考文献33致 谢34原 文35翻 译42北京邮电大学毕业设计引 言策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手,在节奏越来越快的生活中,游戏如清风般扑来,丰富了人们的生活,随着时代的进步,游戏产业逐渐壮大,成为人们生活中不可或缺的一部分。推箱子游戏起源于日本,在游戏中人们可以提高逻辑思维能力。它的玩法也非常简单。控制人物不停的移动将箱子推到目的位置。难点在于移动的位置,以及箱子到达指定位置的顺序,只有多加思考才能获得游戏的胜利。反复推敲,锻炼了人们的耐性。本次的开发尽量多的设置了关卡数目,增强游戏的耐玩性,同时在画面上有所提高,借鉴了许多达人的经验和技术,引发了我对游戏的热爱,丰富了个人生活,相信推箱子游戏在今后的社会总会越来越引人注目。1 系统分析1.1 技术可行性分析1.1.1 可行性目的通过推箱子游戏中使用的java技术,让我能够更加熟练的使用myeclipe。同时了解相关运行环境的配置。将理论知识和实际操作结合起来。达到学以致用的目的。网上资料的查询极大的提高了我的自学能力。希望经过此次设计,锻炼自己的思考,解决问题的能力。对系统开发的流程有更深层次的理解,检验学习成果和实际动手能力,对底层知识有更深的了解。为今后的工作打好基础。1.1.2 可行性研究前提基本需求:通过规范的开发流程,采用面向对象的分析设计方法实现游戏美观,易玩,及时等特性。操作性方面主要通过键盘的借口实现,操作键位是上,下,左,右。主要开发目标:通过此次研究熟练java的相关知识和技术的应用,界面美化的工作需要同学的的帮助,了解团队和合作的重要,熟悉不同领域相关技术的交叉,完成java推箱子游戏的基本功能。条件假定和限制:java相关技术的使用不是很熟练,如果有些游戏bug没有及时发现,相关升级版本需要之后弥补,更正。可行性研究所采用的方法和步骤:通过研究分析推箱子小游戏所需要的功能以及实现的方法、确定主体结构。利用所学到的知识,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。评价尺度:实现基础的推箱子功能,如输赢判定,人物的移动位置,箱子的移动位置,同时加强画面的优化,音乐的选定等基础功能。更强的优化需要以后的升级和修改,实相关功能就达到目标。1.1.3 算法可行性分析管理可行性:此次设计基于java,有面向对象,可移植性,安全性,并发机制,支持可视化图形界面等特点。易于管理。经济可行性:本次设计注重游戏功能的实现,达到设计目的,不用于其他的商业用途。通过此次设计增强java技术和实践的结合。同时了解可视化界面,设计操作界面和页面的跳转更换。操作环境需要MyEclipse。相关资料可以上网查询。硬件方面可以使用HP笔记本。所以易于操作。技术可行性:对于本游戏,可以使用如VB,Java,Delphi等相关的编程语言,但是考虑到编写程序的难易程度以及对编译语言的了解程度,本游戏选择JAVA程序语言作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化等,然后就可以进入游戏,处理游戏过程中的各种操作。社会可行性:本次设计基于学习的需要,所做毕业设计的内容不会在社会上进行商业运作。网上所查的资料以及相关的知识的引用,属于学术交流,不涉及版权,以及法律责任。同时不会对社会产生负面的影响,不存在不可行性。现建立一个二维常数队列(a0,b0),将所有位置对应于二维队列中的一个位置。将石头的位置上设定数字2,箱子的位置上设定数字1,空地的位置上设定数字0,将任务初始的位置上设定数字3。这样就完成了初始化的过程。将人物可以直接到达的箱子周围的空地算出来(个人认为这一步深度优先比较好),存入另一个数列中。将人物和箱子的当前位置记入变量i,j中,人物移动到每个位置上后,人物与箱子的位置差绝对值一定为1。用这个差值算出如果箱子可以移动时的下一位置的当前状态,当状态不为0时,舍弃这个位置,即此路不通,这路算法结束;若状态为0,则将箱子的位置和人物位置全部移动到下一位置,这个时候将箱子位置和人物位置记入新的二维常数队列(a1,b1)中。这时再用上一个判断加上这个判断:当变量i,j与二维常数队列(a1,b1)中记录的对应位置一致时认定该路不通,这样用深度优先循环下去。直到得到最终的位置m,n。当然这是一个箱子的算法,要是是两个箱子就将常数列用(a0,b0,c0)代替,然后将第二个箱子的位置写在c0中就可以了。这实际上是一个寻路问题,最简单的用一个广度优先搜索就可以找到最短路径。从角色当前位置开始,每次向所有可能方向展开一层,如下图直到扩展到目标位置。根据节点的父子关系能反推出移动步骤。如下图1-1所示:图1-1推箱子地图演示输出结果很简单,从当前栈底到栈顶,每个元素代表一步移动。由于移动步骤只记录了主角推动箱子的位置,可以根据上一个问题的解决办法,能得到当前主角位置到主角推动位置的路径。要判断当前局面是否在之前的移动步骤上出现过,这个问题到现在我还没有想出特别好的方法。容易想到最笨的方法的是从上到下访问当前栈内所有元素,恢复出之前的所有状态逐一比较,包括主角是否在同一封闭空间。聪明一点的话可以根据关卡状态计算出某种唯一的特征值记录在压栈数据中,只要比较该特征值就可以了。仍然使用问题1的广度优先扩展,容易找出所有和主角所在空间相邻的箱子,判断箱子是否可以从主角所在空间推动也不难,先看是哪一面相邻,再看箱子另一面是否为空。1.1.4 平台选择一、 首先我们需要做到MyEclipse到底是什么?下面允许我做一些简要的介绍:应该大家都知道Eclipse优点:免费、程序代码排版功能、有中文化包、可增设许多功能强大的外挂、支持多种操作系统(Windows、Linux、Solaris、Mac OSX).等等,而MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。在结构上,MyEclipse的特征可以被分为7类:1. J2EE模型。2. WEB开发工具。3. EJB开发工具。4. 应用程序服务器的连接器。5. J2EE项目部署服务。6. 数据库服务。7. MyEclipse整合帮助。对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。二、接着既然我们已经知道了这个软件,那么她又可以帮我们作些什么呢?这里我作一些简要的介绍(由于myeclipse相继推出不同的版本,每个版本又有其各自的特点,在此我只介绍我当前在用的整个版本6.XGA)总结起来讲这个版本支持这些以下功能:1平台和安装支持(1)兼容Eclipse 3.3/Europa 1.0。(2)支持Java 5 & Java 6。(3)可运行在Windows (XP, Vista)、Linux、 Mac操作系统。2.改进了Java EE 5 和 Spring功能部件。 (1)提高EJB3.0工程项目的灵活度,从数据库模式直接产生bean,你可以结合sybase开发工具PowerDesigner来生成相应当实体bean,这样给我们带来了不少便利之处!(只是要提醒的是她生成的实体bean的对OR映射功能的支持很差,需要我们手动去做一些修改)。(2)支持Java持久化结构开发。(3)对Spring 2.0升级,增强配置管理功能。升级Hibernate,这些对开发企业级的应用是多么大的一个佳音啊(4)Spring-JPA高度集成。3.支持AJAX开发和测试,这门技术是近几年大家一致看好的技术,而该软件给她提供了支持,给开发人员带来了不少便利之处。(1)支持美国Apple公司所有的AJAX特征能在Mac操作系统上运行。(2)改进了AJAX Web 浏览器。(3)改进了AJAX工具。(4)增强了JavaScript调试,这点我的体会很深刻,该软件提供的调试机制,如果你充分用起来你会发现你的开发效率会大幅度的提高。4.支持RAD Web 开发。5.具备Matisse4MyEclipse可视化Swing设计器。快速Java EE部署和测试,感触颇深,如果你的电脑性能不差,部署的速度非常快,与传统的方式比他的优势是如此的明显,相信只要你一用你就不想再想用传统的方式了,但有点不尽人如意的是只要你的代码修改了你就要重新部署你所打的软件包,比如当你在JBOSS服务器里部署EJB3.0运用的时候,如果你的一些Bean类变化或者修改,你就不得不要去重新部署,但是还是不影响你的效率的。(1)项目自动部署和启动服务:根据指定的调试和运行模式,自动配置项目和启动服务器;在配置前,自动停止运行的服务器;在现有的应用程序配置中可以重新配置。 (2)MyEclipse Tomcat 6 服务器就地集成,启动只要一秒钟。(3)MyEclipse Derby 服务器:自动进行JDBC连接;可配置的启动选项。上述仅仅是做了一些我在开发一些小项目的时候用到的一些功能,有兴趣的同学可以去到MyEclipse学习中心在那里可以找到帮助和学习资料. 包括: 1)包含Java EE项目源代码. 2)一键安装MyEclipse Java EE示例项目。三、 1. 常用的MyEclipse 快捷键(方便快捷)。(1)Ctrl+M切换窗口的大小。(2)Ctrl+Q跳到最后一次的编辑处。(3)F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。F3跳到声明或定义的地方。F5单步调试进入函数内部。F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的。F7由函数内部返回到调用处。F8一直执行到下一个断点。(4)Ctrl+Pg对于XML文件是切换代码和图示窗口。(5)Ctrl+Alt+I看Java文件中变量的相关信息。(6)Ctrl+PgUp对于代码窗口是打开“Show List”下拉框,在此下拉框里显示有最近曾打开的文件。(7)Ctrl+Shift+/ 加上段注释。Ctrl+Shift+ 取消段注释。Ctrl+/ 在代码窗口中是这种/注释。Ctrl+Shift+/ 在代码窗口中是这种注释,在JSP文件窗口中是。(8)Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显,并且窗口的右边框会出现白色的方块,点击此方块会跳到此标记处。(9)右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。(10)Ctrl+I格式化激活的元素Format Active Elements。Ctrl+Shift+F格式化文件Format Document。(11)Ctrl+S保存当前文件。Ctrl+Shift+S保存所有未保存的文件。(12)自动汇入所需要的类别:Ctrl+Shift+M Ctrl+Shift+O 好象使用Ctrl+Shift+O 也可以按new Remote Site,Name填 svn , URL填/update,一直next到finished为止。(13)Ctrl+Space提示键入内容即Content Assist,此时要将输入法中Chinese(Simplified)IME-Ime/Nonlme Toggle的快捷键(用于切换英文和其他文字)改成其他的。Ctrl+Shift+Space提示信息即Context Information。(14)双击窗口的左边框可以加断点。(15)Ctrl+D删除当前行。(16) Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。Ctrl+Shift+O作用是缺少的Import语句被加入,多余的Import语句被删除。(17) 快速执行程序:Ctrl + F11第一次执行时,它会询问您执行模式,设置好后,以后只要按这个热键,它就会快速执行。2.用过eclipse的同学应该做到Eclipse本身很快的,但是加上了myeclipse后,就狂占内存,而且速度狂慢,那如何让Eclipse拖着myeclipse狂飚呢?解决方法:第一步: 取消自动validation -validation有一堆,什么xml、jsp、jsf、js等等,我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下,速度立马提升好几个档次!取消方法: windows-perferences-myeclipse-validation,除开Manual下面的复选框全部选中之外,其他全部不选。手工验证方法:在要验证的文件上,单击鼠标右键-myeclipse-run validation第二步: 取消Eclipse拼写检查。1拼写检查会给我们带来不少的麻烦,我们的方法命名都会是单词的缩写,他也会提示有错,所以最好去掉,没有多大的用处。windowsperferencesgeneralvalidation-editors-Text 。Editors-spelling。第三步:取消myeclipse的启动项。myeclipse会有很多的启动项,而其中很多我们都用不着,或者只用一两个,取消前面不用的就可以windowsperferencesgeneralstartup and shutdown。第四步:更改jsp默认打开的方式。安装了myeclipse后,编辑jsp页面,会打开他的编辑页面,同时也有预览页面,速度很慢,不适合开发。所以更改之。windowsperferencesgeneraleditors-file associations。第五步:更改代码提示快捷键。现在的代码提示快捷键,默认为ctrl+space,而我们输入法切换也是,所以会有冲突。谁叫myeclipse是外国人做的呢。根本不需要切换输入法。windowsperferencesgeneralKeys更改 content assist 为 alt+/同时由于alt+/已经被word completion占用,所以得同时修改word completion的快捷键值2. 有时点击myeclipse里的struts的xml配置文件,会报错:Error opening the editorUnable to open the editor ,unknow the editor id.把这个窗口关闭后才出正确的xml文件显示,这个我们这样改:windowsperferencesgeneraleditors-file associations选择*.xml,选择myeclipse xml editor点default,ok。3. js中有alert(中文);可以ctrl+shift+f,但是这样以后只有运行才知道alert的是什么,而且js中如果有英文注释也还是保存不了,点击右键“properties”在text file encoding中点oth-er 选择GBK。 4如果是myeclipse5以下的版本,有时会出现这样的问题:在断点调试的时候没有绿色的条显示,断点走到另外一个文件的时候视图里也不自动跳转到那个页面,这样调试起来很麻烦,需要手动的点击跟到断点位置看变量的值!解决办法:在eclipse Window-Preferences- Tomcat-Source Path中左侧,中要跟踪的工程后Apply,ok。然后重启 Tomcat;这项在myeclipse6中是没有的,貌似myeclipse6中没出过这样的问题; 今天又碰到一个问题,补充一下:修改了一个文件,比如添加了一句打印: System.out.println(11111111),执行时发现不打印,把class反编译,发现这句确实已经添加上了,重启tomcat,这句没问题了,但是再做修改还是不生效,最终发现是在Window-Preferences- MyEclipse-InterNet Tools-cache中取消了勾选disable caching,重新勾选就好用了。5设定breakpoints查找代码中空指针是哪一行产生的,并调试:在Debug视图中,选择 Breakpoints 在其下一行有 Add Java Exception Breakpoint图标在Choose an exception中输入 NullPointerException 即可,不用的时候我们可以把那个断点点掉不要删除。1.2 需求分析1.2.1 引言对软件需求分析特别重要。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中的一个简单步骤,但在过去十多年中越来越多的人认识到它是整个过程中最关键的一个过程。只有通过软件需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。许多大型应用系统的失败,最后均归结到需求分析的失败:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。软件设计的需求的作用大于程序的设计。1.2.2 游戏需求玩家是通过对小人的移动操作来控制推动箱子的,并且玩家需要避过障碍物以及死角,才能将其推放到指定位置从而达到过关的目的。如果玩家将箱子推入死角导致箱子无法移动或不能移动到指定位置则闯关失败,可以通过悔步或重新开始等操作来重新挑战本关。游戏功能需求如下所示:游戏界面需求:简洁美观的用户界面,可以带给用户自然清晰的画面。游戏内容需求:良好的小人与箱子设计,可以给玩家带来更真实的感觉。小人需要前、后、左、右四张图片,移动中的箱子与终点上的箱子要所有区别,因此需要两不同的图片以示区别。键盘处理事件:控制小人与箱子的移动,可通过键盘方向键(上、下、左、右键)对小人进行上、下、左、右的移动,并且能够推动箱子。显示需求:当所有箱子都到达指定位置后即可过关,若进入死角则无法过关,需要进行悔步或重新开始的操作。可以由玩家喜欢选择关卡进行游戏。1.2.3 软硬件需求硬件环境需求:CPU:PentiumIII 600;内存:3G;内存剩余资源:500M;软件环境:JDK 1.5及其以上的版本。MyEclipse10。1.2.4 接口控制使用键盘的接口控件操作,上下左右相关键位控制小人的移动。1.3 方案论证学校开设的关于学习编程语言的课程有C语言、C+语言、Java程序语言等,皆可用于编写推箱子小游戏的程序。1.3.1 C+语言的优点软件需求分析特别重要。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中的一个简单步骤,但在过去十多年中越来越多的人认识到它是整个过程中最关键的一个过程。只有通过软件需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。许多大型应用系统的失败,最后均归结到需求分析的失败:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。C+语言支持几乎所有的面对象程序设计特征。可以说,C+语言集中体现了近20年来在程序设计和软件开发领域出现的新的思想和新技术,这主要包括: (1)抽象数据类型。(2)封装和信息隐藏。(3)以继承和派生方式实现程序重用。(4)以运算符重载和虚函数来实现多态性。(5)以模版来实现类型的参数化。C+是程序员和软件开发者在实践中创造的一般的高级程序设计语言是由计算机科学家在科研和教学环境中设计出来的,然而,C+语言却是由从事实际系统开发的程序员在实践中创造。因此,C+往往从编写实际程序的角度出发,为了程序员提供了各种各样、灵活、高效的语言特性。正是这些良好的特性使得C+在很多领域,特备是大规模系统程序开发的开发方面,得到广泛应用。目前,许多成功的大型软件都是使用C+编写的。C+是C语言的超集所谓“C+是C语言的超集”是指包含C+中包含C语言的全部语法特征。因此,每一个用C语言编写的程序都是一个C+程序。C+程序的设计宗旨就是在不改变C语言语法规则的基础上扩充新的特性。实际上,能够很好地兼容C语言正是C+取得成功的原因之一,这是因为:(1)C+继承了C语言简明、高效、灵活等众多优点。(2)以前使用C语言编写的大批软件可以不加任何修改,直接在C+开发环境下维护。(3)C语言程序员只需要学习C+扩充的新特性,就可以很快地使用C+编写程序。由于具有以上特点,C+已经开始取代C语言工作,被广泛地应用于各行领域的程序设计工作中。时间表明,对于中型和大型程序的开发工作,使用C+的效果要比C言语好的多。C+正在从软件的可靠性,可重用性,可扩充性,可维护性等方面体现出它的优越性。1.3.2 Java语言的优点Java语言的流行除了因为它能够编制嵌入HTML文件中的Applet外,还在于Java语言本身的面向对象、简单、平台无关性、安全性、多线程等特点。Java语言的结构与编写方式,与c语言类似,因此学习Java语言,不仅要了解Java语言独有的编程特点,同时还要有程序设计基础和面向对象的概念。 Java语言的主要特点如下: 1.简单、高效。 Java语言与C类似,如果用户了解C和面向对象的概念,就可以很快编写出Java程序;此外,Java又不同于诸如C语言提供的各种各样的方法,它只提供了基本的方法,这样就减少了编程的复杂性,例如去掉了头文件、指针变量、结构、运算符重载、多重继承等复杂特性。Java语言虽然简单,却很高效,它可以用面向对象的方法来描述用户的每一个动作。 2.面向对象。 Java语言是一种新的面向对象的程序设计语言,它除了几种基本的数据类型外,大都是类似c中的对象和方法,程序代码大多体现了类机制,以类的形式组织,由类来定义对象的各种行为。Java同样支持类继承,这样也减少了程序设计的复杂性。 3.平台无关性 。Java语言经编译后生成与计算机硬件结构无关的字节代码(Bytecode),这些字节代码被定义为不依赖任何硬件平台和操作系统。当Java程序在运行时,需要由一个解释程序对生成的字节代码解释执行。这体现了Java语言的与平台无关性,使得Java程序可以在任何平台上运行,如MS-DOS, Windows,Unix等,因此具有很强的移植性。 4.交互式特性。 Java是面向对象的网络编程语言,由于它支持TCPIP协议,使得用户可以通过浏览器访问到Internet上的各种动态对象。并且在网络上用户可以交互式地进行各种动作,而多线程技术的引入使得这种交互式操作更为容易。 5.多线程机制。 Java语言支持多线程机制,多线程机制使得Java程序能够并行处理多项任务。Java程序可以设计成具有多个线程,例如让一个线程负责数据的检索、查寻,另一个线程与用户进行交互,这样,两个线程得以并行执行。多线程机制可以很容易地实现网络上的交互式操作。 6.动态的内存管理机制。 Java语言采用了自动垃圾回收机制进行内存的管理。在C语言中,程序员在编写程序时要仔细地处理内存的使用,例如当某个内存快使用完毕时,要及时释放,以供其它程序使用,一旦内存管理不当,就有可能造成内存空间浪费或程序运行故障。 在Java系统中包括了一个自动垃圾回收程序,它可以自动、安全地回收不再使用的内存块,这样,程序员在编程时就无需担心内存的管理问题,从而使Java程序的编写变得简单,同时也减少了内存管理方面出错的可能性。 7.安全性。 在类似Internet的这种分布式网络环境中,安全性是个不容忽视的问题。Java语言在安全性方面引入了实时内存分配及布局来防止程序员直接修改物理内存布局;通过字节代码验证器对字节代码的检验,以防止网络病毒及其它非法代码侵入。此外,Java语言还采用了许多面向对象的异常处理机制,负责对一些异常事件进行处理,如内存空间不够,程序异常中止等的处理。 以上介绍了Java语言的一些主要特点,除此之外它还具有动态性、类库丰富、高性能等特点,这些都使得Java语言在各个方面得以成熟和完善,成为大众日益青睐的程序设计语言之一。1.3.3 C语言的优点C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。在C的基础上,一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C+。 C+进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C+目前流行的最新版本是Borland C+, Symantec C+和Microsoft VisualC+。 C+提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度优点:1. 简洁紧凑、灵活方便。 C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2.运算符丰富。 C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。 3.数据类型丰富。C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。同时对于不同的编译器也有各种 4.C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 5.语法限制不太严格,程序设计自由度大。虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。 允许直接访问物理地址,对硬件进行操作。 由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。 6.生成目标代码质量高,程序执行效率高。 一般只比汇编程序生成的目标代码效率低1020%。 7.适用范围大,可移植性好。C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX、windows 98windows NT;也适用于多种机型。C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。1.3.4 方案选择面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。C+语言和Java语言在面向对象这方面都比较强,C+语言为了与C语言兼容,其是包含了些面向过程的成分;Java语言除了C+语言中非面向过程的部分,其程序编写过程就是设计、实现类,定义其属性、行为的过程。还有Java语言特有的“沙箱”机制是其安全性的保障,同时它去除了C+语言中易造成的错误指针,增加了自动内存管理等措施,保证了Java程序运行的可靠性。对于变量声明、参数传递、操作符、控制语句等方面,Java使用了与C、C+相同的风格,使得熟悉C、C+的程序员能很方便地进行编程。同时,Java为了实现其简单、强壮、安全等特性,也去掉了C和C+中许多不合理的内容。Java语言和C语言、C+语言的 区别有: 1.全局变量.Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。Java对全局变量进行了更好的封装。而在C语言和C+语言中,依赖于不加封装的全局变量常常造成系统的崩溃。 2.不采用Goto语句.Java不支持C语言/C+语言中的Goto语句,而是通过例外处理语句Try、Catch、Finally等来代替,并处理遇到错误时跳转的情况,使程序更可读且更结构化。3.指针 Java不支持C语言/C+语言中的指针,因为由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C+中的私有成员,从而破坏安全性,造成系统的崩溃。Java对指针进行完全的控制,程序员不能直接进行任何指针操作,例如把整数转化为指针,或者通过指针释放某一内存地址等。因此,经过再三比较三种语言之后,采用了Java语言来编写推箱子小游戏的程序代码。各类语言使用热度如下图1-2所示:图1-2 编程语言使用热度排行2 概要设计2.1 游戏设计分析从面向对象的观念出发,本程序可分为以下几个对象:1.地图文件的引用。2小人与箱子的移动。3.程序运算逻辑。4.绘图。5.显示平台。分析对象的技巧在于它的重复利用及维护效率。如果要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如地图文件、小人与箱子的移动以及程序的运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。2.1.1 地图文件的引用在设计游戏程序时,通常都是把游戏的画面布局数据存放在一个地图文件中。程序通过读取地图文件中的数据来获取画面的布局安排。地图文件是20*20的变量数组文件,在地图不同的数字代表不同的意义。把这组数据保存到一个文件中,这个文件就是地图文件了。2.1.2 程序运逻辑程序中逻辑运算包含小人与箱子的移动、键盘事件的响应、保存数据以实现悔步以及重新开始的操作等等。2.1.3 绘图绘图主要是用于在小人与箱子的移动后,原位置由草地填补,以此来表示小人与箱子的移动以及其画面的连贯性。2.1.4 显示平台“可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。2.2 注意事项小游戏在设计时要注意绘图部分的设计代码,还要注意通过输入流读取地图文件与图像文件部分的设计代码等等。2.3 游戏流程图系统功能模块初始化模块绘图模块移动小人模块移动箱子模块功能控制模块图3-1系统功能模块本程序包括5个模块,分别是初始化模块、画图模块、移动箱子模块、移动小 模块和功能控制模块,如图1所示。各个模块的功能描述如下: (1)初始化模块。该模块包括屏幕初始化和游戏第一关的初始化。屏幕初始化用于输出欢迎信息和操(2)画图模块。该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。 (3)移动箱子模块。 该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。 (4)移动小人模块该模块用于控制小人移动,从而推动箱子到目的地。 (5)功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。2.4 函数模型1.putoutChar() 函数原型:void putoutChar(int y,int x,char ch,char fc,char bc) putoutChar()函数在屏幕上的指定位置输出指定的字符。其中,x、y指明输出的位置,ch表示输出的字符,fc表示输出的字符颜色,bc 表示背景色。 2.printWall() 函数原型:void printWall(int x,int y) printWall()函数用于画墙壁,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画绿色墙,用小方块表示墙(ASCII值为219)。 3.printBox() 函数原型:void printBox(int x,int y) printBox()函数用于在非目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景白色箱子,用ASCII值为10的字符表示箱子。 4.printBoxDes() 函数原型:void printBoxDes(int x,int y) printBoxDes()函数用于在目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色箱子,仍用ASCII值为10的字符表示箱子。 5.printDestination() 函数原型:void printDestination(int x,int y) printDestination()函数用于画目的地,传入参数x、y指明位置。该

温馨提示

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

评论

0/150

提交评论