下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 基于java的吃豆子小游戏开发

基于java的吃豆子小游戏开发.doc

基于java的吃豆子小游戏开发

近在咫尺间的距离
2017-09-06 0人阅读 举报 0 0 暂无简介

简介:本文档为《基于java的吃豆子小游戏开发doc》,可适用于职业岗位领域

学号:(届)题目学生学院专业班级校内指导教师专业技术职务校外指导老师专业技术职务二一二年六月基于java的吃豆子小游戏开发摘要:在现今电子信息高速发展的时代电子游戏已经深入人们的日常生活成为老少皆宜的娱乐方式。吃豆子游戏是一款具有活动元素的经典游戏它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。自年Namco(南梦宫)发布吃豆子这款游戏后余年一直被众玩家传玩着经久不衰。它看似简单但却变化无穷令人上瘾。现在联众又将重新掀起这股让人沉迷的吃豆子游戏的风潮。对一般用户来说它的规则简单容易上手且游戏过程变化无穷。本论文主要介绍如何利用图片工具PhotoshopJava语言编程环境JDK游戏开发平台Eclipse和音乐转换工具Winamp以及如何使用这些工具实现吃豆子游戏的游戏总体及构成模块。吃豆子游戏总体是有界面、控制和音乐三个主要部分组成。吃豆子游戏的界面分为图片制作和位图载入两方面。图片采用了整体界面图片制作和区块图片制作两种方法。位图的载入是使用游戏库中的画图精灵实现的。画图精灵除了可以载入位图还可以让界面产生图层效果吃豆子游戏中的控制方法分为键盘控制和定时器控制两种。键盘控制是由玩家从键盘输入控制命令对游戏进行控制而定时器控制是使用定时器对游戏进行时间控制。键盘控制包括游戏的开始与退出控制、游戏菜单的选择与确定控制和吃豆者的行动方向控制。定时器控制包括吃豆者的持续移动控制、道具的出现时间控制和道具有效时间的控制。在游戏音乐方面分为背景音乐和特殊音效两种。背景音乐使用了循环播发模式特殊音效使用了触发播放模式。关键词:Java游戏开发画图精灵IBasedontheJavaPacMandevelopmentAbstract:Inthecurrentofrapiddevelopmentofelectronicinformation,electronicgameshavebecomeanimportantpartofpeople'sdailylifeIthasbeenapopularformofentertainmentforallagesPacmangameisaclassicgamewithelementsofactivityIthascausedtheeconomicvalue,whichcanbesaidtobeagreatthinginthehisto的插件组成核心本身仅仅负责基本环境的后台处理工作和提供标准的用户导航模型而插件则专注于自身任务的处理。基于如此优良的设计及体系结构就可以用插件在Eclipse第页共页常州大学本科生毕业设计(论文)中实现任何想要实现的功能。通过安装插件扩展已有软件功能的现象在日常生活中并不陌生。例如Web浏览器IE、Firefox任意一个都可以其插件和Eclipse插件非常相似都是要解决扩展性问题的。如果想既能浏览Flash动画又能浏览PDF文件还可以播放音乐就需要不同的插件保证不同内容能在Web浏览器中正确显示。而在Eclipse中可能需要编译HTML问价、设计数据库、开发Java程序或者编写C文件因此就需要为实现这些功能安装不同的插件即自定义需要的插件。插件的运行方式是动态的即在真正使用到这个插件的时候这个插件才会被调入内存而当插件不在被使用时它就会在恰当的时候被清理出内存。因此不必担心随着插件安装数量的增加Eclipse运行时占用的内存也会增加。运行时内核:运行时内核负责所有已安装插件的发现和启动并且常见关于插件的注册信息。内核在实际需要某种插件是才加载该插件。除了内核外其他每样东西都是作为插件来实现的。内核使用扩展点来支持开发者添加其他文件类型并且提供对定制安装的支持插件使用描述清单向系统描述自身。工作空间:工作空间是负责管理用户资源的插件。这些资源包括用户创建的项目和其中的文件以及文件变更和其他资源。工作空间还负责同志其他插件关于资源变更的信息比如文件创建、删除或更改。工作台:工作台为Eclipse提供用户操作各种工具的界面其目标是通过为创建、管理和导航“工作台”资源提供公共范例来获得无缝的工具集成。它是使用标准窗口工具包(SWT)和一个更高级的API(JFace)来构建的SWT是Java的SwingAWTGUIAPI的非标准替代者JFace则建立在SWT移植版本已经可用。Eclipse对SWT的使用只会影响Eclipse自身的可移植性使用Eclipse构建的任何Java应用程序都不会受到影响除非它们使用SWT而不是SwingAWT。团队支持:团队支持组件负责踢狗版本控制盒配置管理支持。它根据需要添加视图使用户可以与其所使用的任何版本控制系统(如果有的话)交互。大多数插件都不需要与团队支持组件交互除非插件提供版本控制服务。小组开发的支持与工作台之间实现了无缝集成Eclipse中提供了支持小组开发的透视图以及各种版本和配置管理的透视图。帮助:帮助组件具有与Eclipse平台本身相当的可扩展能力。与插件像Eclipse添加功能相同帮助提供一个附加的导航结构允许工具以HTML文件的形式添加文档。Eclipse良好的体系结构非常值得借鉴尤其是在开发高扩展性、通用性好的应用程序、软件以及系统的过程中。第页共页常州大学本科生毕业设计(论文)c)Eclipse是开放源代码的软件开放源代码软件是这样一种软件它们在发布时附带了旨在确保将某些权利授予用户的许可证。当然最明显的权利就是源代码必须可用以便用户能自由地修改和再分发该软件。这种用户权利的保护是通过一种称为copyleft的策略来完成的:软件许可证主张版权保护除非明确授予用户这样的权利否则用户不得分发该软件。copyleft还要求同一许可证涵盖任何被再分发的软件。这实际上倒置了版权的目的使用版权来授予用户权利而不是为软件的开发者保留版权copyleft经常被描述为保留所有版权rdquo。曾经四处蔓延的对开放源代码软件的许多恐惧、担忧和疑虑都与某些copyleft许可证的所谓的病毒、性质有关如果使用开放源代码软件作为您开发的程序的一部分您将失去自己的知识产权因为该许可证将传染给开发的专有部分。换句话说该许可证可能要求与开放源代码软件一起打包的所有软件都必须在相同的许可证之下发布。虽然这对最著名的copyleft许可证来说可能是事实当时还有其他许可证在商业化和社区考虑之间提供了较好的平衡。开放源代码计划(OpenSoftwareInitiative)是一家非营利机构它明确定义了开放源代码的含义及满足其标准的认证许可证。Eclipse是在OSI认可的通用公共许可证(CPL)版之下被授予许可证的CPLldquo旨在促进程序的商业化使用。为Eclipse创建插件或将Eclipse用作软件开发应用程序基础的开发人员需要发布他们在CPL下使用或修改的任何Eclipse代码但是他们可以自由决定自己添加的代码的许可证授予方式。与出自Eclipse的软件一起打包的专有代码不需要作为开放源代码来授予许可证该源代码也不需要提供给用户。JDK环境JDK(JavaDevelopmentKit)java开发工具包其实学习java除了学习面向对象的思维就是学习这些工具包了这里面的类接口等等都给你准备好了写程序的时候拿来用~简单的说:jdk为我们所编写的Java程序提供编译和运行的核心环境。JDK包含的基本组件包括:javac–编译器将源程序转成字节码jar–打包工具将相关的类文件打包成一个文件javadoc–文档生成器从源码注释中提取文档jdb–debugger查错工具java–运行编译后的java程序(class后缀的)appletviewer:小程序浏览器一种执行HTML文件上的Java小程序的Java浏览器。Javah:产生可以调用Java过程的C过程或建立能被Java程序调用的C过程的头文件。第页共页常州大学本科生毕业设计(论文)Javap:Java反汇编器显示编译类文件中的可访问功能和数据同时显示字节代码含义。Jconsole:Java进行系统调试和监控的工具Applet基础JavaApplet是一类特殊的Java程序通常称为Java小应用程序它被嵌入在HTML语言中一般具有解释Java能力的浏览器都可以运行如:InternetExplorer和Netscape。含有Applet的网页被称为Java支持的网页它提供了一种一旦用户需要客户端软件时就可以自动地从服务器分发客户端软件给用户的方法。当用户获取了最新版本的客户端软件时并不会有错误产生而且也不需要很麻烦的重新安装过程。a)Applet的工作原理:在浏览包含JavaApplet的特点主要在于其执行方式的不同Java应用程序的入口是main()方法而JavaApplet则不需要包含标准的main()方法。如图所示:图Applet的工作原理图b)JavaApplet类的继承关系:Applet继承自AWT重的Panel类。因此我们可以通过Applet程序实现图形的绘制、字体和颜色的变化以及动画和声音等效果的实现等。Applet类为小应用程序的执行提供了所有必要的支持。它还提供了装载和显示图像的方法以及装载和播放语音片段的方法。如图所示:javalangObjectjavaawtComponentjavaawtContainer第页共页常州大学本科生毕业设计(论文)javaawtPaneljavaappletApplet图Applet类的继承关系表Applet定义的方法方法描述AccessibleContextgetAccessibleContext()为调用对象返回可访问的上下文AppletContextgetAppletContext返回与此小应用程序相关的上下文关系StringgetAppletInfo返回一个描述该小应用程序的字符串AudioClipgetAudioClip(URLurl)返回一个AudioClip对象它封装了在由url所指定的地方找到的音频片段AudioClipgetAudioClip(URLurl,Sting返回一个AudioClip对象它封装了在由urlclipName)所指定的地方找到的名为clipName的音频片段URLgetCodeBase()返回与调用小应用程序相关的URLURLgetDocumentBase()返回调用此小应用程序的HTML文档的URLImagegetImage(URLurl)返回一个Image对象它封装了在由url、所指定的位置找到的图像ImagegetImage(URLurlStringimageName)返回一个Image对象它封装了在由url所指定的地方找到的名为imageName的图像LocalgetLocal()返回一个Local对象它被许多对位置敏感第页共页常州大学本科生毕业设计(论文)的类和方向使用StringgetParameter(StringparamName)返回与paramName相关的参数。如果所指定的参数未能找到的话则返回StringgetParameterInfo()返回一个描述由该小应用程序所识别的参数的String二位数组。数组中的每一条必须包含三个字符串分别包含了参数名类型或范围描述以及用途说明BooleanisActive()如果小应用程序已经启动则返回true。如果小应用程序被终止则返回falsestaticfinalAudioClip返回一个AudioClip对象它封装了在url所指定的位置找到的音频片段。此方法类似于newAudioClip(URLurl)getAudioClip()除了它是静态的且无需Applet对象就可执行voidplay(URLurl)如果在url指定的位置能找到一个音频片段的话则此片段被播放voidplay(URLurlStringclipName)如果在url设定的位置能找到一个音频片段且音频片段名为clipName的话则此片段被播放voidresize(Dimensiondim)根据dim指定的尺寸调整小应用程序的大小。dimension是一个存储在javaawt中的类。它包含了两个整数域:width和heightvoidresize(intwidth,intheight)根据width和height设定的尺寸调整小应用程序大小FinalvoidsetStub(AppletStudstubObj)使stubObj成为小应用程序的存根。此方法由实时运行系统使用并且通常不被小应用程序和浏览器之间的连接的小段化码viodshowStatus(Stringstr)在浏览器或小应用程序阅读器的状态窗口显示str。如果浏览器不支持状态窗口则无任第页共页常州大学本科生毕业设计(论文)务动作发生c)Applet的生命周期JavaApplet的生命周期中共有四种状态以及个方法它们分别是:int()、start()、stop()和destroy()。init()方法:在小应用程序开始执行时被调用它是任何小应用程序被调用的第一种方法是初始化变量的地方。在JavaApplet生命周期中该方法只执行一次。该方法与构造方法有些类似可以被重载。start()方法:多次执行,当浏览器从图标恢复成窗口,或者是返回该主页时执行该方法是Applet的主体。其中可以执行一些任务或者启动相关的线程来执行任务。stop()方法:当Web浏览器刘凯包含小应用程序的HTML文件时系统都会调用stop()方法由此可见和start()方法相同该方法也是可能被多次调用的。当用户不在关注Applet时调用stop()方法可以停止部分小号系统资源的工作以提高系统的运行速度。destroy()方法:当用户关闭浏览器时小应用程序需要从内存中完全移除系统就会调用destroy()方法释放小应用程序用到的资源。读者应该已经注意到stop()方法和destroy()方法的关系正如start()方法与init()方法的关系在Applet整个生命周期中destroy()方法仅仅被调用一次。图是Applet的生命周期图和继承关系图:图Applet的生命周期图d)Applet的安全问题Applet是指在Web浏览器中运行的小程序。Applet是作为网页的一部分被自动下载的。第页共页常州大学本科生毕业设计(论文)当Applet被激活时它便开始执行程序。Java设计者在设计小应用程序时考虑到它是从一个远程站点下载、在本地执行的因此安全成为人们不可忽视的问题。Applet沙盒:Applet的限制执行环境常常称作“沙盒”。Applet在沙盒中运行也就是在计算机中预先划定的区域执行不能更改或探查用户的系统不能够从银盘中读写文件。当Applet在沙盒中运行时:Applet不能读写所在主机的文件系统Applet不能运行任何本地可执行程序Applet只能获得所在主机的一下信息:当前使用的Java版本操作系统的名字和版本用来分离文件、路径以及行的字符Applet不能修改系统的属性Applet弹出的所有窗口与标准窗口不同都会带有一个警告消息告诉用户这是一个Applet因为Java解释器会检查所有的危险指令和程序区域安全管理器会对其进行监督所以一个带有敌意的Applet不能覆盖系统内存、改变操作系统赋予的特权或者使计算机崩溃。为Applet签名:由于Applet沙盒的存在很多Applet程序在客户端被禁止直行某些操作比如读写文件或者链接局域网等由此看来在某些情况下这些限制显得过于严格。为允许在不同情况下使用不同的安全级别Java引入了签名Applet:JavaPlugin的发布使Applet签名的过程变得更加简单和标准化。使用标准的Java工具为Applet签名已经成为了相当简单的工作。Plugin不仅为Applet的签名和部署提供了标准方法而且还通过自动安装证书使得最终用户使用起来更第页共页常州大学本科生毕业设计(论文)需求分析对软件需求分析就是通过调查研究建立系统的数据模型、功能模型、行为模型用户和开发人员在“系统必须做什么”这个问题上实现相互理解达到共识从而形成双方认可的软件产品的需求规格说明书。这样有益于提高软件开发过程中的能见度便于对软件开发过程中的控制与管理便于采用工程方法开发软件提高软件的质量便于开发人员、维护人员、管理人员之间的交流、协作并作为工作成果的原始依据并且在向潜在用户传递软件功能、性能需求使其能够判断该软件是否与自己的需求相关。游戏需求游戏设计中需要有个良好的用户界面。因此本游戏设计了三个界面一是用于主游戏区的游戏画布用来显示游戏时吃豆者和敌人的移动二是用于控制游戏的各种控件以及显现游戏信息的一些组件这是一个面板三是进行网络对战时用以显示游戏的得分和生命值信息的面板。根据游戏运行时的控制要求本设计选择通过键盘方向键(上、下、左、右键)对吃豆者进行向上,向下、向左、向右的移动方式。而对于在运行时需要显示其得分我们根据吃豆者吃豆子的个数和消灭敌人的个数对其进行分数统计其次还需要有关于吃豆者生命值的显示当敌人在攻击到吃豆者是必须降低吃豆者的生命值。由于当声音进入画面可以加强画面内容使画面上的视觉形象更加生动。声音可以交代故事情节还可以通过声音表现动作刻画人物的心态这样更有利于烘托环境气氛使静止的画面活动起来。因此为了加强游戏的动态性需要给游戏配备音音乐效果所以需要播放背景音乐和发生相应操作时的音效的功能。为了增加游戏的趣味性可以具备几种道具的使用功能比如这些道具可以是某些特殊的形态比如可定义一种大豆子让吃豆者吃了之后可以反击敌人定义一些水果让吃豆者吃了之后提升生命值或者移动速度延长游戏时间。编程环境需求一个游戏的开发应有一个调试可集成的系统开发平台。根据时代的发展计算机的飞速发展我们考虑了用户投资技术支持等诸多因素故而选择java是一个相对较好的选择。它方便、简捷并且易学易懂。对此提出一个最低编程环境要求:)硬件需求,内存:M以上,CPU:p处理器以上,硬盘:GB以上第页共页常州大学本科生毕业设计(论文),显存:M以上,交互工具:鼠标键盘)软件需求,操作系统:windowsXP,编程语言:Java,软件运行环境:jdk、eclipseSDKwin,浏览器软件:IE接口控制本游戏通过键盘进行操作在Windows的操作系统下利用键盘的上、下、左、右键对方块进行移动变形要使用键盘的接口事件。第页共页常州大学本科生毕业设计(论文)概要设计游戏模块划分吃豆子游戏的程序由文件Walljava、Goldjava、Playerjava、Enemyjava、Tickerjava、和Packmanjava六个文件组成。()Walljava包含名为Wall的public类其主要功能为根据墙的位置绘制其图形。并通过其中的方法。返回墙壁的位置等属性。()Goldjava包含名为Gold的public类其主要功能为根据豆子的位置绘制其图形包括体积大和体积小的两种类型。并通过其中的方法返回豆子的位置等属性。()Playerjava包含名为Player的public类其主要功能为初始化吃豆者的位置张合角度以及前进速度。通过draw方法根据吃豆者在运动过程中的角度变化以及移动后的位置坐标绘制吃豆者通过move方法计算吃豆者的位置通过ChangeDirection方法改变吃豆者的运动方向通过stop方法令吃豆者停止运动通过dead方法令游戏结束。()Enemyjava包含名为Enemy的public类其主要功能为根据位置状态初始化敌人。通过move方法确定敌人的移动方式包括正常状态和失去放抗能力两种情况通过draw方法绘制敌人。()Tickerjava包含名为Ticker的线程类控制游戏的起始。()Packmanjava包含名为Packman的public类其主要功能为初始化图形界面的布局声音的播放确定游戏规则。如图所示为本课题划分的六个模块:第页共页常州大学本科生毕业设计(论文)图系统模块图游戏流程图根据游戏运行顺序绘制流程图见图:图游戏流程图第页共页常州大学本科生毕业设计(论文)游戏地图算法流程图有关图片的算法流程如图所示:(a)图像发送流程(b)图像接收流程图图像发送和接收流程图第页共页常州大学本科生毕业设计(论文)游戏音乐算法流程图背景音乐播放控制的算法流程如图所示:开始背景音乐播放控制线程否是否处在是否接受到暂停状态恢复信息是否是播放背景音乐接受到停止信息结束图背景音乐播放控制流程图第页共页常州大学本科生毕业设计(论文)详细设计主界面设计由于这个程序的界面并不是很复杂所以用到的控件也不多主要核心内容还是后台的代码设计。根据数组元素值来显示图片。色彩上:总结人们的视觉习惯和色彩对眼睛的健康影响决定对于画布采用黑色背景神秘而大方左边的控制区中墙体采用类似砖头的颜色的图片配合左边纯黑的背景是的空间显得更大更有立体感。功能上:背景就是窗体右侧是一个groupbox控件用来显示生命值和得分情况游戏主界面截图如图所示:图开始界面游戏主界面的程序代码如下:publicclassPackmanextendsJAppletimplementsKeyListener,ActionListener{privateTickert定义了一个ticker的对象tprivateImageoffScreenImage定义了一个图片对象offScreenImage定义吃豆者privatePlayerplayer定义四个敌人privateEnemyRed,Cyan,Pink,Orangeprivateinthealth,Scores健康值与分数privatebooleangameover游戏是否结束第页共页常州大学本科生毕业设计(论文)privatebooleangameStarted游戏是否开始privateintalarmTime敌人失去反抗的时间privatebooleanalarm是否失去反抗能力privatebooleanUPTYPED,DOWNTYPED,LEFTTYPED,RIGHTTYPED是否能够向上向下向左向右privateImageWALL定义墙privateAudioClipSOUND定义音乐privateWallwall定义墙的数组privateGoldgold定义豆子的数组privateintgameFlowprivatebooleanlevelComplete是否升级gsetColor(Colorwhite)设置颜色为白色gdrawString("生命:"health"",,)gdrawString("积分:"Scores,,)if(!gameStarted){游戏没开始gsetColor(Colorcyan)绘制开始这几个字的颜色gdrawString("按空格开始",,)}if(gameovergameFlow>){gsetColor(Colorred)gdrawString("游戏结束",,)}}publicvoidkeyPressed(KeyEvente)定义一个键盘输入if(egetKeyCode()==KeyEventVKSPACE){SOUNDplay()gameStarted=true点击“空格”游戏开始}if(egetKeyCode()==KeyEventVKUP){playerChangeDirection()点击方向键执行相应的操作UPTYPED=trueDOWNTYPED=falseLEFTTYPED=falseRIGHTTYPED=false第页共页常州大学本科生毕业设计(论文)}if(egetKeyCode()==KeyEventVKDOWN){playerChangeDirection()UPTYPED=falseDOWNTYPED=trueLEFTTYPED=falseRIGHTTYPED=false}if(egetKeyCode()==KeyEventVKLEFT){playerChangeDirection()UPTYPED=falseDOWNTYPED=falseLEFTTYPED=trueRIGHTTYPED=false}if(egetKeyCode()==KeyEventVKRIGHT){playerChangeDirection()UPTYPED=falseDOWNTYPED=falseLEFTTYPED=falseRIGHTTYPED=true}}publicvoidkeyReleased(KeyEvente){}publicvoidkeyTyped(KeyEvente){}publicvoidupdate(Graphicsg){GraphicsoffScreenGraphicsif(offScreenImage==){offScreenImage=createImage(,)返回创建一幅用于双缓冲的、可在屏幕外绘制的图像。如果组件是不可显示的则返回值可能为。}offScreenGraphics=offScreenImagegetGraphics()offScreenGraphicssetColor(Colorwhite)offScreenGraphicsfillRect(,,,)第页共页常州大学本科生毕业设计(论文)paint(offScreenGraphics)gdrawImage(offScreenImage,,,this)}本游戏的模块设计墙体绘制模块设计通过Wall的public类根据x、y数组和图片索引构造实现墙体的绘制见图代码如下:publicWall(inta,intb,intc){xPos=ayPos=bIndexOfImage=cwall=newRectangle(xPos,yPos,,)}***返回墙的边界*publicRectanglegetWallBorder(){returnwall}***返回图片索引构的值*publicintgetImageIndex(){returnIndexOfImage}publicintgetxPos(){returnxPos}publicintgetyPos(){returnyPos}}第页共页常州大学本科生毕业设计(论文)图墙体图豆子绘制模块设计通过Gold的public类根据x、y数组来设置中心位置和豆子的类型构造一个豆子的对象从而实现豆子的绘制见图代码如下:publicvoiddraw(Graphicsg){gsetColor(Coloryellow)普通的小豆子if(goldSpecies==){gfillOval(xPos,yPos,,)}可以使敌人失去防抗能力的大豆子if(goldSpecies==){gfillOval(xPos,yPos,,)}}publicRectanglegetBorder(){returngold}图使敌人丧失战斗力的大豆子和普通小豆子图片第页共页常州大学本科生毕业设计(论文)吃豆者的绘制模块设计通过Player的public类根据x、y数组来设置中心位置以及对吃豆者外观设置要求从而实现吃豆者的绘制见图代码如下:publicPlayer(){xPos=yPos=xVPos=xPosyVPos=yPosdirection=构造一个新的Rectangle其左上角被指定为(xPos,yPos)而其宽度和高度为(,)。player=newRectangle(xPos,yPos,,)吃豆者的初始张开角度为度mouthDegree=初始张合状态:张开mouthOpen=truespeed=}publicvoiddraw(Graphicsg){intDirectionAngle=gsetColor(Coloryellow)if(direction==)DirectionAngle=if(direction==)DirectionAngle=if(direction==)DirectionAngle=if(direction==)DirectionAngle=if(dead)第页共页常州大学本科生毕业设计(论文)DirectionAngle=填充覆盖指定矩形的圆弧或椭圆弧。得到的弧由(mouthDegreeDirectionAngle)并跨越(mouthDegree)角度。弧的中心是矩形的中心此矩形的原点为(xPos,yPos)大小为(,)gfillArc(xPos,yPos,,,mouthDegreeDirectionAngle,mouthDegree)gfillArc(xPos,yPos,,,DirectionAngle,mouthDegree)}图吃豆者图片敌人绘制模块设计通过Enemy的public类根据x、y数组来设置中心位置并敌人进牢笼和没进牢笼的两种状态需要有不同的颜色来以示区别的要求来实现对敌人的绘制代码如下:if(gameFlow<){intxPoints={xPos,xPos,xPos,xPos,xPos,xPos,xPos,xPos,xPos,}第页共页常州大学本科生毕业设计(论文)intyPoints=newint{yPos,yPos,yPos,yPos,yPos,yPos,yPos,yPos,yPos,}Ghost=newPolygon(xPoints,yPoints,xPointslength)}if(!alarm!ghost){用图形上下文的当前颜色填充由指定的Polygon对象定义的多边形Ghost。gfillPolygon(Ghost)}如果敌人没有失去反抗能力则用蓝色进行填充敌人的整体用白色填充敌人的眼睛。if(!alarm||ghost){填充敌人眼睛的白色部分gsetColor(Colorwhite)gfillOval(xPos,yPos,,)gfillOval(xPos,yPos,,)填充敌人眼睛中的蓝色十字部分gsetColor(Colorblue)if(direction==){使用当前颜色填充外接指定矩形框的椭圆。gfillOval(xPos,yPos,,)gfillOval(xPos,yPos,,)}第页共页常州大学本科生毕业设计(论文)if(direction==){gfillOval(xPos,yPos,,)gfillOval(xPos,yPos,,)}if(direction==){gfillOval(xPos,yPos,,)gfillOval(xPos,yPos,,)}if(direction==){gfillOval(xPos,yPos,,)gfillOval(xPos,yPos,,)}}如果敌人失去反抗能力if(alarm){gsetColor(Colorblue)当敌人即将恢复攻击能力时将其颜色显示为蓝色if(alarmTime>=alarmTime>)gsetColor(ColorlightGray)gfillPolygon(Ghost)gsetColor(Colorwhite)gfillOval(xPos,yPos,,)gfillOval(xPos,yPos,,)在此图形上下文的坐标系统中使用当前颜色(灰色)在点(xPos,yPos)和(xPos,yPos)之间画一条线。gdrawLine(xPos,yPos,xPos,yPos)gdrawLine(xPos,yPos,xPos,yPos)gdrawLine(xPos,yPos,xPos,yPos)gdrawLine(xPos,yPos,xPos,yPos)gdrawLine(xPos,yPos,xPos,yPos)gdrawLine(xPos,yPos,xPos,yPos)第页共页常州大学本科生毕业设计(论文)}图敌人图片移动控制模块设计使用键盘方向键对吃豆者的移动进行控制其代码如下:if(egetKeyCode()==KeyEventVKUP){playerChangeDirection()控制键盘向上移动的操作UPTYPED=trueDOWNTYPED=falseLEFTTYPED=falseRIGHTTYPED=false}if(egetKeyCode()==KeyEventVKDOWN){playerChangeDirection()控制键盘向下移动的操作UPTYPED=falseDOWNTYPED=trueLEFTTYPED=falseRIGHTTYPED=false}if(egetKeyCode()==KeyEventVKLEFT){playerChangeDirection()控制键盘向左移动的操作UPTYPED=falseDOWNTYPED=falseLEFTTYPED=trueRIGHTTYPED=false}if(egetKeyCode()==KeyEventVKRIGHT){playerChangeDirection()控制键盘向右移动的操作UPTYPED=false第页共页常州大学本科生毕业设计(论文)DOWNTYPED=falseLEFTTYPED=falseRIGHTTYPED=true}}publicvoidkeyReleased(KeyEvente){}publicvoidkeyTyped(KeyEvente){}publicvoidupdate(Graphicsg){GraphicsoffScreenGraphicsif(offScreenImage==){返回创建一幅用于双缓冲的、可在屏幕外绘制的图像。如果组件是不可显示的则返回值可能为。offScreenImage=createImage(,)}offScreenGraphics=offScreenImagegetGraphics()offScreenGraphicssetColor(Colorwhite)offScreenGraphicsfillRect(,,,)paint(offScreenGraphics)gdrawImage(offScreenImage,,,this)}水果模块设计通过fruit包的public类利用x、y数组来实现带水果的绘制代码如下:interval=*((int)(Mathrandom()*))}间隔时间的计算水果移动if(direction==canMoveUp)yPos=if(direction==canMoveDown)yPos=if(direction==canMoveLeft)xPos=if(direction==canMoveRight)xPos=第页共页常州大学本科生毕业设计(论文)if(direction==xPos<)xPos=if(direction==xPos>)xPos=Fruit=newRectangle(xPos,yPos,,)inta=(xPos)intb=(xPos)if(b<)b=if(b>)b=if(b<b>)b=xVPos=a*bintc=(yPos)intd=(yPos)if(d<)d=if(d>)d=if(d<d>)d=yVPos=c*d}publicvoiddraw(Graphicsg){doubley=yPos*(Mathsin(*appearTime))gsetColor(newColor(,,))gfillOval(xPos,(int)(y),,)gsetColor(newColor(,,))gfillRect(xPos,(int)(y),,)gfillRect(xPos,(int)(y),,)水果的绘制和出现时间的设计第页共页常州大学本科生毕业设计(论文)}HTML文件引用模块设计Pacmanhtml文件是引用HTML文件其代码如下:<!DOCTYPEHTML><HTML><HEAD><HEAD><BODY><BODYBGCOLOR=”BLACK”><center><APPLETCODE=”Packmanclass”CODEBASS=””WIDTH=HEIGHT=><APPLET><center><BODY><HTML>音乐播放和墙体图片设计音乐播放设计音频文件的播放涉及到IO操作不管是何种系统对于IO操作都是比较慢的如果当程序运行到需要播放音效时再从文件中取得音频数据然后播放很可能会造成一种“卡”的感觉影响用户体验。基于此经过反复论证本游戏决定采用以剪辑的方式来播放音频文件。Java语言中的剪辑Clip是一种在播放之前就提前加载于内存中的特殊的音频数据流当需要用时只需直接从内存中调出即可省去了IO读取所需的大量时间而且剪辑播放完毕后仍旧存储在内存中对于游戏的背景音乐及音效这类需要反复多次播放的音频这种方式是非常有用的。单单采用剪辑还是不够的音频文件的播放应当另外开启线程来控制这样既可以更方便地控制音频的播放、暂停等操作也不会程序执行其它的操作。音效播放在游戏开始、暂停方块落下及消行时添加相应的音效既可以提醒用户发生某种变化又能增强程序的表现效果。音效相对来说是比较小的音频文件对于音效可选取wav格式的音频文件不但音频质量好在系统支持、存储性方面也占有优势。根据多线程及剪辑的思想首先在程序初始化时应该把音效载入内存游戏开始后开启一个线程当满足音效播放的条件时即播放音效音效播放完毕后应当将相应的音频文件的剪辑位置重新置为开始处。背景音乐播放同音效的播放背景音乐的播放也应当采用剪辑的形式以方便音乐的循环多次播放同样背景音乐播放可能是贯穿于整个游戏过程背景音乐的播放必须采用单独的线程控第页共页常州大学本科生毕业设计(论文)制以不影响程序执行其它操作。因为背景音乐采用单独线程播放这里面会出现一个问题当用户选择暂停背景音乐播放时背景音乐播放线程是进入wait状态还是以另一种方式实现暂停,如果背景音乐进入wait状态则当用户取消暂停播放时必须再创建一个线程去唤醒它新建一个线程只是控制背景音乐播放不免浪费资源而且也增加程序编写难度。考虑到背景音乐极可能在玩家的整个游戏过程中都处在播放状态当暂停时玩家也随时会取消暂停故而在游戏结束之前本程序会将背景音乐播放线程一直处在执行状态如果玩家暂停音乐播放则让线程转去处理检测玩家是否取消暂停当检测到暂停取消后继续播放音乐。游戏地图设计游戏地图的绘制是用一个二维数组来存放地图信息本设计使用个不同的数他们分别代表了地图中的各类元素通过一个双循环来判断出在屏幕的哪些位置上应该绘制哪些元素为了使游戏界面简约朴素视觉舒适本设计中使用更加立体的砖块墙体配合黑色的背景色看起来非常好看。根据游戏设计需要考虑到本游戏嵌入了吃豆者越界自动纠正功能而吃豆者越界实际上就是游戏地图数组越界。当发生翻转时吃豆者可能移动至游戏地图外在这种情况下就发生了游戏地图数组越界Java异常处理系统会抛出为避免这种情况的发生游戏地图数组应当适当增大故本游戏将地图数组长度和宽度各扩大了三个单位。本游戏的墙体图片是根据对于接收端接收到的数据包可以先从数据包中提取出图像然后将图像画到游戏画布中。游戏界面截图图游戏开发类图第页共页常州大学本科生毕业设计(论文)图游戏开始界面图游戏运行界面图游戏结束界面第页共页常州大学本科生毕业设计(论文)软件测试吃豆子游戏的测试内容软件测试是软件工程中及其重要的一个环节目的是保证软件的质量。测试的好坏将直接影响软件的好坏进行测试可以找出其中的错误及不足加以改进从而得到一个高效、可靠的系统。进行软件测试主要作用有以下几点:)软件测试是为了发现程序中的错误而执行程序的过程。)好的软件测试方案是极可能发现尚未发生错误的方法。)程序的测试是发现了至今尚未发现的错误。软件应从多角度进行测试和分析这样才能找出其中错误的地方。测试的时间最好找一些与设计系统无关的人员或者分析人员。因为在开发软件的时候开发人员已经形成了自己的思维定势在测试的时候始终受到这种思想的束缚很难找出其中的错误而与设计无关的人员和那些分析人员很容易找出错误所在。在程序调试过程中一定要耐心仔细一个细微的错误将会导致整个功能不能实现会浪费很多的时间来修改。应在以下几方面加以注意:语法错误语法错误是经常碰到的错误。例如命令拼写错误或传递给函数的参数不正确都将产生错误。语法错误可能导致不能继续编写代码。逻辑错误逻辑错误通常可能是潜在和难以检测的。当有因键入错误或程序逻辑流程引起的逻辑错误可能会成功运行但产生的结果却是错的。例如当本应使用小于符号比较数值但却使用了大于符号时那么将返回不正确的结果。运行时错误运行时错误是在执行过程中指令试图执行不可能的动作而导致的必须纠正运行时产生的错误这样才能保证软件运行的可靠性。本游戏在开发过程中采用了多种有效的措施保证软件质量例如边界处旋转、游戏翻转越界纠等等极大地方便了用户操作但是系统中通常可能还存在着一些错误和缺陷因此游戏必须要经过反复的运行测试尽最大量将bug减到最少。吃豆子游戏的测试步骤本游戏的测试划分为单元测试、集成测试、确认测试和系统测试本游戏将以这四个步骤进行测试。单元测试第页共页常州大学本科生毕业设计(论文)单元测试又称为模块测试是针对软件设计的最小单位程序模块进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。可以应用人工测试和计算机测试两种不同类型的测试方法。单元测试需要从程序的内部结构出发设计测试用例即采用白盒测试技术。多个模块可以平行独立地进行测试。在这个测试过程中所发现的往往是编码和详细设计中的错误。传统的最小可编译单元通常指模块、函数或子程序等而在面向对象技术中通常是指类。单元测试的重点是模块接口测试、局部数据结构测试、重要的执行通路测试、出错处理通路测试、边界条件测试。集成测试集成测试分为子系统测试和系统测试。子系统测试是把经过测试运行正常的模块放在一起形成子系统后再测试。这个步骤着重测试模块的接口测试模块之间能否相互斜体哦以及通信时有无问题。系统测试就是把经过测试运行正常的子系统组装成完整的系统后再进行测试。系统测试是测试整个软件和硬件系统验证系统是否满足规定的要求。这个阶段发现的问题往往是需求说明和软件系统设计时产生的错误。一般集成测试采用渐增式组装方法组装系统渐增式组装方式有自顶向下和自底向上两种继承策略。自顶向下集成是从主模块开始沿着程序的控制层次向下移动逐渐把哥哥模块结合起来。在把附属于主模块的那些模块组装到程序结构中去时或者使用深度优先的策略或者使用宽度优先策略。深度优先策略是先组装在软件结构的一条主控制通路上的所有模块。选取一条主控制通路取决于应用的特点并且有很大的任意性。而宽度优先的结合方法是沿软件结构水平地移动把处于同一个控制层次上的所有模块组装起来。自底向上集成从原子模块开始组装和测试。因为是从底部向上结合模块总能得到所需的下层模块处理功能所有不需要存根模块。确认测试确认测试是在软件开发过程结束时对软件进行评价以确认它和软件需求是否一致的过程。确认测试也称验收测试其目标是验证软件的有效性。系统测试系统测试是将通过确认测试的软件作为真个基于计算机系统的一个元素与计算硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起在实际运行环境下对计算机系统进行一系列的组装测试和确认测试。第页共页常州大学本科生毕业设计(论文)系统测试的目的在于与系统的需求定义进行比较发现软件与系统定义不符合或与之矛盾的地方。系统测试的测试用例应根据需求分析规格说明来设计并在实际使用环境下运行。吃豆子游戏的测试项目游戏界面菜单选项的功能测试“Applet”菜单测试见表:表点击Applet菜单的测试结果表点击“Applet”启动停止重新载入输出游戏开始游戏关闭游戏重新开始结果正常正常正常按键事件的功能测试吃豆者移动测试见表:表吃豆者移动测试表键盘方向键上方向键下方向键左方向键右方向键输出吃豆者正常移吃豆者正常移吃豆者正常移吃豆者正常移动不会移出边动不会移出边动不会移出边动不会移出边界界界界结果正常正常正常正常无敌状态测试表无敌状态测试表吃到大豆子情况吃到大豆子未吃到大豆子输出敌人变色速度减慢吃豆者敌人继续追击吃豆者为无敌状态第页共页常州大学本科生毕业设计(论文)结果正常正常测试结果分析经过测试本游戏实现了基本的功能不过整体功能还不是很强大作为第一次开发的游戏本游戏在很多方面还需要进一步完善。例如:水果出现的时间太久界面设置的不够华丽没有多人对战功能等。希望本游戏今后能够逐渐完善和扩充更加丰富的内容。总结本次毕业设计任务是基于Java开发的吃豆子游戏。本课题的目标是让用户在闲暇时玩吃豆子游戏能够打发多余时间并让用户觉得有趣不乏味同时开发用户的逻辑思考能力。在这次的毕业设计完成目标的过程也提升自己的编程水平。游戏的设计与实践是一项复杂而且庞大的工作在选题之后由于之前没有接触过游戏设计所以针对本设计的前期工作做了一下分配。第一步通过看书和在网上查找寻找相关资料来确定使用何种语言来编写程序通过比较后我选择了Java作为本设计的编写程序语言同时Java需要在JDK环境下编写同时免除找插件的麻烦由此选择了Eclipse做开发平台第二步根据设计需要选择地图图片期间去要Photoshop等制图软件对图片进行剪切和设计第三步针对音乐对于一个游戏的重要性通过一些网站寻找适合的背景音乐并且需要利用音频软件进行剪辑。本次设计初步涉及到了电子游戏所涉及到的有关技术、方法包括电子游戏分类、选题、构思等。并实现几个可演示的游戏软件其中有很多应用了学习的相关技术并且做到了图、文、声并茂能实际演示。此次设计过程中最重要的三方面:)在游戏设计的过程中需要老知识的融合使用同时也涉及到了很多新知识这需要不断查阅资料来对游戏内容进行添加和修改。经过长时间的学习与实践最终才能使用Java语言来对游戏进行代码的编写。)本设计是需要不断上机实验调试程序总结经验这几步来完成的。在这上机实验的过程中要提出问题并想办法解决问题能够多多实践增强动手能力。)这次毕业设计过程中查阅了很多资料不但有中文资料还有英文资料。这些资料的搜索过程考验了中、英文资料的检索能力因此对课题的认识才能更加深刻编写程序的时候思路更加清楚。经过编写这个吃豆子游戏认识许多细节问题需要注意例如游戏界面的设计及整体的布局比较简单没有突出特色出来游戏内容不丰富只能满足用户的基本需求。除此之外对于java语言运用还有些不到位。这些是本次游戏设计的不足之处。第页共页常州大学本科生毕业设计(论文)致谢毕业设计是大学里的最后一堂课从开始进入课题研究到论文顺利完成的两个周的时间里我经历了大学期间最为难忘的一段时光。在这段时间里我学到了很多以前不曾接触的东西这两个月经历对我未来的人生都会有很大的帮助和影响。首先衷心感谢我的校外指导老师于俊勤老师和校内指导老师顾晓清老师给予我的无微不至的关怀和细心的指导。在设计过程中老师们为我们提出了许多宝贵的意见和建议在此我要由衷的向老师致以最衷心的感谢和深深的敬意。在此过程中同学们也给予我很大帮助感谢我的同学们。在我遇到的一个又一个问题时同学们都热心的帮助我帮我分析和我探讨提出了许多解决问题的好方法和建议使我最终解决了一个又一个问题感谢我的同学们。由于我的学识有限加之时间仓促文中不免有错误和待改不足之处真诚欢迎各位师长、同学提出宝贵意见。最后祝愿所有的教师和同学们愿你们身体健康工作顺利第页共页常州大学本科生毕业设计(论文)参考文献JavaM张广彬孟红蕊张永宝课程设计案例精编清华大学出版社荣钦科技Java游戏程序设计M北京科海电子出版社IvorHortonJava入门经典M北京机械工业出版社JavaM,杜江实用教程电子工业出版社RogerEPedersenGameDesignFoundationsMWordwarePublishingEclipseM林建素孟康健开发电子工业出版社张磊丁香乾JavaWeb程序设计M电子工业出版社王红卫聂阳杨猛PS抠图秘技M机械工业出版社,DejanBosanacJava脚本编程:语言、框架与模式M机械工业出版社朱仲杰JavaSE全方位学习M机械工业出版社郎波Java语言程序设计M清华大学出版社HMDeitel,PJDeitelJavahowtoprogramM电子工业出版社颜志军栾媛媛Java程序设计实践教程M清华大学出版社于俊乐图形图像设计教程M清华大学出版社DavidWallaceCroftJava游戏高级编程M电子工业出版社孙一林彭波Java程序设计案例教程M机械工业出版社张红梅Java应用案例教程M清华大学出版社金保华Java程序设计实用教程M科学出版社JohnRHubbardJava程序设计学习指导与习题解答M清华大学出版社张振领Java语言程序设计M中国电力出版社第页共

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/64

基于java的吃豆子小游戏开发

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利