基于java的魔塔游戏的设计与实现论文.docx_第1页
基于java的魔塔游戏的设计与实现论文.docx_第2页
基于java的魔塔游戏的设计与实现论文.docx_第3页
基于java的魔塔游戏的设计与实现论文.docx_第4页
基于java的魔塔游戏的设计与实现论文.docx_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

职场大变样社区():下载毕业设计成品全套资料,全部50元以下毕业设计(论文)任务书 第1页毕业设计(论文)题目:基于java的魔塔游戏的设计与实现毕业设计(论文)要求及原始数据(资料):1了解和运用Java面向对象的特性;2熟练掌握模块化设计的思想,锻炼使用java语言的能力;3深入分析魔塔游戏的关键技术与编写语言;4深入了解魔塔游戏各个模块的具体功能;5设计魔塔游戏的各个功能模块以及模块之间的关系;6实现魔塔游戏各个功能模块;7训练检索文献资料和利用文献资料的能力;8训练撰写技术文档与学位论文的能力。第2页毕业设计(论文)主要内容:1综述魔塔游戏的项目背景及功能;2深入分析基于java的魔塔游戏的关键技术与编写语言;3了解基于java的魔塔游戏的相关技术;4熟悉基于java的魔塔游戏的开发环境; 5设计魔塔游戏的功能模块以及关系;6对基于java的魔塔游戏的功能模块进行编写;7对功能模块进行整合并进行测试;8对测试结果进行分析,并对相关部分代码进行修改;9对完整的基于java的魔塔游戏的运行结果记录。学生应交出的设计文件(论文):1内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。 第3页 主要参考文献(资料):1 荣钦科技. Java2游戏设计M.北京. 清华大学出版社, 20042 袁海燕,王文涛. Java实用程序设计100例M . 北京.人民邮电出版社, 20053 邵敏敏,陈德平. 解析Java的多线程机制J. 电脑知识与技术, 20064 秦琴. Java语言的异常处理设计J.中国科技信息, 20065 张洪斌. Java2高级程序设计M. 中科多媒体出版社, 20106 赵生慧. Java面向对象程序设计. 北京. 高等教育出版社, 20107 林建素,孟康健.Eclipse开发学习笔记(第1版).北京.电子工业出版社,2008.48 Bruce Eckel. Thinking in JavaM. Upper Saddle River, New Jersey, USA: Prentice Hall, 20069 Abraham Silberschatz, Henry F.Korth, S.Sudarshan. Database System conceptsM. USA:The McGraw-Hill Companies,Inc.10 Cay S. Horstmann, Gary Cornell. Introduction to Java M. London: Macmillan. 2006专业班级学生要求设计(论文)工作起止日期指导教师签字日期教研室主任审查签字日期系主任批准签字日期基于java的魔塔游戏的设计与实现摘要计算机技术的高速发展,极大程度上影响着我们的日常生活。我们使用计算机玩游戏也越来越普遍。考虑到Java语言简单、安全、健壮等特性,以及“Write Once,run anywhere”的特点。本次的毕业设计课题使用Java语言开发一款益智类RPG(角色扮演)游戏魔塔。该游戏操作简单,但对智力、谋略却有一定的考验。游戏设计中的特色功能主要包括:“怪物手册”、“楼层跳转”、“背景音乐播放”、“游戏进度的存/取”等。功能的丰富并不代表操作的繁琐,游戏过程中,玩家只需简单操作鼠标和键盘即可。游戏中设有多种情景对话,加之背景音乐的播放,让玩家有一种身临其境的感觉。同时,该游戏拥有存档的功能,使玩家不会因为每次都重新开始而烦恼。本次毕业课题的设计过程中主要使用到了Java Swing、线程、事件处理等技术,其中穿插了双缓冲技术和Java Applet技术。同时借助Java语言面向对象的特点,充分利用封装、继承、多态的特性,将这一经典游戏呈现。关键词:Java;Java Swing;游戏;魔塔;面向对象Design and realization of the Magic Tower Game Based on JavaAbstractThe rapid development of computer technology, greatly affecting our daily lives. We use the computer to play the game more and more common. Considering the Java is simple, secure, robust and other characteristics, as well as Write Once, run anywhere features. This time, the graduation project use the Java language to develop a puzzle RPG (role-playing) games - Magic Tower. The game is simple to operate, but the game tests players intelligence and strategy. Game Design features include: Monster Manual, Jump floor, background music, game schedule load / store and so on. Feature-rich does not mean complicated operations, during the game, the player simply to operate the mouse and keyboard. The game has a variety of scenarios dialogue, combined with background music, allowing the player to have a feeling of being there. Meanwhile, the game has achieved the goal that players will not have to re-start every time. The Graduation Project is mainly used in the design process to Java Swing, threads, event processing technology, interspersed with double buffering technology and Java Applet technology. The same time with the object-oriented features of the Java language, take advantage of encapsulation, inheritance, polymorphism characteristics, this classic game will be presented.Key words:Java; Java Swing; Game; Magic Tower; Object-Oriented目 录1 绪论11.1背景及现状11.2设计目的12 开发环境及相关技术的介绍22.1开发环境22.2 Java语言22.3核心技术Java Swing介绍42.4关于Eclipse53 游戏介绍63.1游戏背景63.2游戏操作64 需求分析74.1功能需求74.1.1与NPC对话74.1.2查看怪物手册84.1.3商店交易84.1.4楼层跳转84.1.5游戏存档与读取94.1.6战斗画面显示94.1.7重新开始94.1.8音乐播放104.2性能需求104.3可靠性和可用性需求104.4可维护性和可扩展性需求105 程序设计与实现115.1 概要设计115.1.1主菜单设计115.1.2游戏主界面设计115.1.3实体类设计125.2核心技术运用135.2.1封装135.2.2继承145.2.3多态145.2.4双缓冲技术155.2.5锁机制165.2.6 Java Applet175.2.7事件处理技术175.2.8线程185.2.9类加载机制195.3流程设计205.3.1游戏整体流程205.3.2物品获得流程205.4详细设计215.4.1勇士移动215.4.2门打开效果225.4.3商店功能225.4.4战斗场景245.4.5音乐播放功能275.4.6怪物手册285.4.7楼层跳转325.4.8游戏进度的保存与读取356 测试386.1测试计划386.2单元测试386.2.1对话测试386.2.2商店测试396.2.3怪物手册功能测试406.2.4风之罗盘功能测试416.3集成测试426.4测试总结42结束语43参考文献44致谢45外文资料46外文翻译521 绪论1.1背景及现状二十一世纪,我们的人类社会进入了一个全新的时代信息时代。人类为了减少自己的苦力劳动、脑力劳动,研发了有史以来最伟大的科技技术计算机。计算机技术的高速发展,是因为人类庞大的需求所推动的。随着时间的推移,计算机与我们的生活越走越近。目前,它基本已经完全融入到人类生活当中了,对社会的发展也有着非常大的作用。计算机在人们的生活中扮演着举足轻重的角色,它是现代社会不可或缺的。人们可以使用计算机办公、娱乐、购物等等,计算机的发展让我们的生活变得更加丰富,更加便捷。在计算机上玩游戏,也成为我们主要的娱乐方式之一。但纵观整个游戏领域,绝大多数的主流游戏都是使用C语言或C+语言开发的。使用Java语言编写的游戏微乎其微。造成这一现象的原因可能是每种语言的特性所决定的,Java语言也有它的局限性。但是,这并不代表Java语言就不能开发游戏。此次研究课题就是基于Java语言开发一款角色扮演类的小游戏。1.2设计目的 当初在选择毕业设计课题的时候,考虑到绝大数同学都会选择基于Web的相关系统,而我并不像随大流,所以我选择了做基于Swing的游戏开发。同时,我想到了魔塔这款游戏,所以就下定决心去实现它,并且开发一款游戏软件也是我的一个梦想,即使这只是一款十分简单运行在桌面的游戏。之所以选择Java Swing作为自己的主流技术,其主要原因在于Swing设计的直观性,我喜欢那种所见即所得的感觉。作为一名在大学期间系统学习过Java语言的应届毕业生,一直都是在做Web方面的系统研发,从未涉足游戏开发领域。也正好借此机会,运用所学过的Java语言的相关技术,借用eclipse开发工具编写一个游戏应用,既对自己学过的知识做一次检验,也能对一些不经常使用的技术有所了解,可谓两全其美。2 开发环境及相关技术的介绍2.1开发环境操作系统:Microsoft Windows 7 64位程序语言:Java开发包: Java SE Development Kit 7, Update 75 (JDK 7u75)IDE: Eclipse Java EE IDE2.2 Java语言早在上世纪九十年代,Sun公司就已经推出了面向对象的程序设计语言Java,这一新的概念完全颠覆了之前程序员脑中面向过程的思想。Java 技术具有通用性、健壮性、平台移植性和安全性等特性。介于Java编程语言的特点,Java语言在近几年流行的计算机编程语言排行榜中名列前茅。绝大多数从事IT行业的程序员都会选择Java语言作为自己第一编程语言。随着社会的需求提升,Java技术在大数据、云计算、移动设备等领域均具备明显的优势。可见其发展前景十分的光明。Java语言之所以会获得众多程序员的青睐,一是其简单易学,更重要的一点它对程序员是完全开放的。基于这一现状,社会中涌现出越来越多使用Java语言进行编程的程序员。企业方面,也会考虑到为了企业的蓬勃发展,企业在应聘程序员的时候,也将熟悉并能熟练应用Java语言作为一项硬性要求。Sun公司这一独特的思想,不仅将Java语言推向社会,并被广大程序员广泛的使用,同时他们也在不断完善Java语言,可谓两全其美。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Java平台主要由Java虚拟机(简称JVM)和Java 应用编程接口(简称API)构成。JVM作为操作系统与运行环境之间的中间件,为Java语言平台无关性做出巨大的贡献。因为有它的存在,Java程序只需生成能够在Java虚拟机上运行的字节码文件,即*.class文件,就可以在任何装有Java虚拟机的地方运行;Java 应用编程接口是在Java推出时就已经预先定义好的函数,目的是方便程序员使用一些基本的函数,完成特定的功能,程序员可以无需熟悉源码、内部细节就能完成所需功能。这大大降低了Java语言的使用难度,也提高了程序员的编程效率。Java编程语言是简单的,程序员可以直接使用API提供的函数,不需要了解函数内部具体的实现,也可以达到程序的需求。它摒弃了C语言中的指针、C+语言中的操作符重载等让程序员头疼的难点。并且Java语言提供了自动的垃圾回收机制,使得程序员不必为内存不足的问题而烦恼;Java编程语言是健壮的,它特有的强类型机制,保证了属性、方法的安全性;垃圾回收机制解决了程序内存分配的问题,同时也保证了内存不会泄露。异常处理机制会保证程序在出错的时候,停止程序的运行,由程序员自身处理。Java中不再使用指针,取而代之的是引用,极大程度上提高了程序的安全性。总之,Java语言诸多的优点,让它成为目前最为流行的编程语言之一。图1-1 Java结构图Java语言是现今使用最为广泛的计算机编程语言之一,同时也是各领域、各行业最看重的语言。所以Sun公司将Java平台针对不同领域、不同行业的需求分成了四个版本(其结构示意图见图1-1所示):Java SE(标准版):主要用来开发在桌面上运行的小型Java应用程序。Java EE(企业版):多用于企业级应用的开发,主要体现在服务器端,要求程序具有一定的、可靠性和安全性。主要体现在开发Web应用。Java ME(微型版):主要开发运行在移动设备和嵌入式设备上的Java应用程序。Smart Card。本文主要运用J2SE,故作如下解释。Java SE 是Java平台标准版的简称(Java Platform, Standard Edition),用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。Java SE包括用于开发Java Web服务的类库,同时,Java SE为Java EE提供了基础。本次毕业设计的课题将会综合运用J2SE的API,主要目的在于熟练掌握Java语言面向对象编程的思想;熟悉Java语言的三大特性封装、继承、多态;学习Java中的双缓冲机制;对Java语言中线程能够有更进一步的了解;能够熟练掌握使用Eclipse开发J2SE程序的基本方法。掌握Eclipse调试程序的方法。简单应用设计模式的概念。尽可能的提高程序开发效率,培养优秀的编程习惯。2.3核心技术Java Swing介绍Java Swing是一个用于开发Java应用程序用户界面的开发工具包。Swing API是可扩展的GUI组件,可以是Java开发人员更方便的开发基于Java的前端/GUI应用。Swing组件遵循模型-视图-控制器架构。Java Swing具有如下特点:重量轻:Swing组件与原生的API不同,它大多采用纯Java代码编写。可在Java虚拟机上直接运行。丰富的控件:Swing提供了丰富的控件,如按钮组件、树、滑块、颜色选择器等等。可以让程序员根据需要选择不同的控件。高度可定制:程序员可以很方便的调用Swing控件,创造一个简单直白的外观,并由程序员自定义内部逻辑等;可插拔的外观和感觉:程序员可以在GUI应用程序中自定义控件的改变;Java Swing的核心开发步骤:1.确定使用容器;2.选择布局管理器;3.添加组件;4.为组件添加事件处理。现就常用的核心控件做简单的介绍:JFrame:基于Java Swing的GUI程序的基本思路都是以Jframe为基础的,它是一个屏幕上的对象。它是所有控件存放的一个容器,同时它也是Swing组件和操作系统之间的桥梁,让这些独立于操作系统的组件能够运行并呈现给用户。JPanel:此控件属于container的一种,在panel控件上可以做到不提供环境的前提下,使用者可以任意的在上面作绘制工作。它有两个主要的优点:一是容易在panel上增加边框的设计;二是panel使用了双重缓冲的方式来绘制其他控件。JLabel:该控件的主要作用是显示文字或图片。该控件的功能较为单一,使用者不能对其进行点选,滑鼠等相关操作也不能是它有所反应。JButton:这是按钮组件,该组件主要是通过鼠标点击,然后触发一定的事件。所以一般情况下会对该组件添加鼠标事件的监听。布局管理器的介绍:FlowLayout:该布局管理器会将组件按照从左到右依次放置,并且它会根据container的大小来调整组件的大小以及换行。使用者添加组件的时候,布局管理器会自动将该组件排至末尾位置。GridLayout:该布局管理器以网格为基础,将指定的container分割成数个大小相同的区域。使用者向该container中添加组件的时候,该布局管理器会按照从上到下、从左到右依次放入,每一个区域只允许放入一个组件。BorderLayout:这是container默认使用的布局管理器,它将container分割出五个区域:North、South、West、East、Center。且每一个区域最多只能存放一个组件。添加组件时,默认会存放在Center区域。想要放在其他区域需要使用者自定义。CardLayout:该布局管理器可任意安排组件的存放位置,它只是需要定义“卡片”的数量。显示的画面可以随“卡片”的切换而改变,且每次只能看到一张“卡片”。2.4关于EclipseEclipse是Java语言开发的集成开发环境,这是绝大数程序员所认可的。但是就Eclipse本身而言,它的功能则不仅仅就此一项而已。它可以通过添加一些插件,使其拥有其他的一些功能。以IBM公司牵头,其他公司合作开发出的Eclipse,它不仅仅是某一门编程语言的开发环境,在它被开发之初是作为一个框架平台,通过添加不同的组件,来构建针对于不同编程语言的开发环境。它支持了绝大多数的插件,也正因为如此,使它变得如此的灵活,从而被广大的程序员所喜爱。Eclipse中常见的插件有svn插件、maven插件、jadclipse插件等。安装不同的插件,可以使Eclipse具有特有的功能。svn插件在公司软件开发团队中较为常见。它是一款免费的版本控制软件,它可以很明确的指出代码修改的时间和作者,极大程度上方便了程序员对代码版本的管理。同时也避免了因为意外情况而导致代码丢失的风险;Maven是解决依赖库的一款非常好用的Java工具,在Eclipse的添加Maven插件后,可以很方便的在Eclipse中管理web、Java项目等;jadclipse插件作为反编译插件,可以帮助程序员查看封装在jar包、war包中的代码,对于开发人员来说,它是一个很好的“伙伴”。总之,Eclipse是程序员开发软件的一款辅助工具,它可以帮助程序员们缩短整个开发的时间,降低了开发成本。3 游戏介绍3.1游戏背景很久很久已前,一位武功高强的魔法师因为厌恶国王,所以将国王最疼爱的公主抓了起来,美丽的公主被魔法师囚禁在一座神秘之塔里面。国王知道后,十分的气愤,随后下重金招募了诸多勇士。经过层层淘汰选拔,最终只留下了一位勇士。这位武功高强的勇士手持长剑进入满是魔法师的魔塔之中,营救美丽的公主。可是万万没有想到,刚刚进入塔中就遭到了坏人的暗算,不仅武器和法术都丢失了,还被关入了监狱,幸好得到了一同坐牢的小偷和仙子的帮助让你逃了出来,于是我们的英雄一边练功一边开始了他艰苦的救美之行游戏刚刚开始,勇士会与仙子进行对话,让玩家大致了解整个游戏的背景及流程,并且仙子用自己最后的一点法力,恢复了勇士的功力,随后游戏将真正开始。在游戏中,勇士通过击杀怪物,获取金币和经验,玩家可以在勇士商店或者经验老人那里使用金币和经验,提升勇士的生命值、攻击力、防御力。再结合隐藏在魔塔的各个角落的宝物,最终击败魔王,营救公主,获得游戏胜利!如若玩家在于怪物的战斗中失利,则游戏失败!3.2游戏操作游戏菜单页面操作:鼠标操作勇士上、下、左、右移动:键盘上、下、左、右键;与游戏设定人物对话:键盘空格键;游戏中商店操作:鼠标操作;获取游戏中“怪物手册”:按X键查看,按X键关闭;获取游戏中“风之罗盘”:按Z键打开,鼠标点击,按Z键关闭;退出游戏:按Q键;重新开始:按R键;游戏存档:按S键;读取存档:按A键;4 需求分析4.1功能需求该毕业设计课题所要设计的游戏应用只要涉及下列功能模块:与npc对话、查看怪物手册、商店交易、楼层跳转、游戏存档与读取、战斗画面的显示、重新开始和音乐播放。功能结构如图4-1所示:魔塔拯救公主与NPC对 话查看怪物手册商 店 交 易楼 层 跳 转游戏存档与读取战斗画面显示重 新 开 始音 乐 播 放图4-1 功能结构图4.1.1与NPC对话在本次设计的游戏中,在不同的情景下可能会出现相应的非玩家角色(NPC),他的出现主要是帮助玩家快速有效的沿着主线进展,例如在游戏刚开始出现的“仙子”,她就会通过对话的形式告诉“勇士”一些游戏的背景信息和游戏主线方向信息等,引领玩家进入下一个游戏阶段。玩家可以跟随NPC的指引深入到游戏中,体会游戏带给玩家的快乐!当“勇士”在地图中遇到NPC时,程序会自动的创建一个TalkPane对象,该对象主要是借助于paint(Graphics g)方法中的g.drawString(“*”)方法,将对话框、对话的内容显示出来。在该对象添加了KeyListener监听器,当按space键时,实现双方交流的过程。4.1.2查看怪物手册在魔塔的每一层都有不同属性的怪物,他们关押着公主,你需要将他们一一击溃。由于每一个怪物的生命值、攻击力、防御力的不同,对玩家的判断及策略造成影响,所以开发出此功能,用来显示当前楼层所有怪物的属性值信息,甚至还可以显示出勇士与怪物战斗将会消耗的生命值。着极大程度上降低了游戏的难度,但此功能主要是辅助玩家进行判断的。当勇士获得藏在魔塔中的怪物手册后,通过按X键,可以显示出当前楼层所有怪物的信息,主要包括怪物名、生命值、攻击力、防御力、金币值、经验值、消耗值。玩家可以根据怪物手册进行判断,并决策自己是否继续前进,还是提升自己的属性,待损失降到最低的时候,再做出决定。4.1.3商店交易游戏中玩家提升属性的方法有多种:获取道具提升、获得NPC的帮助、商店交易。其中商店交易作为玩家提升属性值的主力军。而商店交易又分为两种:一是通过金币购买、二是通过经验值兑换。当勇士前往商店后,会显示出商店页面,玩家通过鼠标操作,点击鼠标左键完成相应的功能,如买卖钥匙、提升攻击力/防御力、提升生命值、提升等级等。游戏中的商店交易,不仅仅只体现在“怪物商店”,诸如“钥匙商人”、“经验老人”也具有类似的功能。在玩家购买物品或者使用经验值交换的时候,需要确保“勇士”拥有足够的金币数或经验值。4.1.4楼层跳转由于整个游戏的楼层数较多,当玩家想要从高楼层去往低楼层时,将会是一件无聊而又费时的事情。故特意开发此项功能,实现楼层的跳转。从而很大程度上减少了勇士穿梭于各个楼层的时间,让玩家体验到瞬间移动的快感。勇士可以通过击杀怪物,到达指定的楼层得到风之罗盘宝物,在获得它之前此功能是不能使用的。得到风之罗盘后,玩家可以按下键盘上的Z键,然后在游戏界面上就会显示玩家当前所去过的所有楼层,通过鼠标点击,勇士可以直接到达指定楼层。该功能需要保证,“勇士”尚未到达的楼层,不能显示出来,即界面上只能显示到当前勇士到达的最高楼层。否则会破坏整个游戏的顺利运行。4.1.5游戏存档与读取玩家如果想完成整个游戏,即救出公主,需要消耗很长的时间。此时就需要有一个功能能够保证玩家的游戏数据不会丢失。为保证下一次游戏能够继续进行,就需要先获取到旧的游戏数据,然后继续游戏。当玩家需要保存自己在游戏中的数据时时,只需按下键盘上的S键,程序会通过数据输入输出流,将必要的数据写出到外部文件中;当玩家想要继续游戏的时候,可以通过两种方式恢复游戏数据:1.在游戏菜单界面,通过鼠标点击“读取进度”即可;2.进入游戏后,按下键盘上的A键,会将游戏进度恢复至上次保存的进度。该功能避免了玩家每次都要重新开始的困扰。4.1.6战斗画面显示该游戏的主线是打败所有的怪物,战胜魔王,最后营救出美丽的公主。所以游戏中缺不了与怪物的战斗,为营造出一个更加真实的战斗场景,在此设计独特的战斗场景并加以音效,营造一个紧张激烈的战斗场面。当勇士在魔塔中遇到怪物的时候,程序会显示一个战斗画面,画面中展示了勇士和怪物的生命值、攻击力、防御力和头像。同时借助于线程的机制,模拟出双方互相攻击的效果,与此同时将伴有攻击的音效。将战斗的场面模拟的淋漓尽致。当一方的生命值降为0,战斗画面会根据具体情况显示“战斗胜利”或者“战斗失败”。显示“战斗失败”,代表勇士牺牲,程序会运行game.over()方法,游戏结束;否则,勇士战斗胜利,游戏继续进行。4.1.7重新开始如果玩家在战斗中“战死”,由于剧情的需要,程序还会显示一些对话框,随后游戏结束,程序退出。但是如果玩家是根据对怪物手册及当前局势的分析后,觉得勇士将无法击败魔王,自己决定退出当前游戏,重新开始游戏。此时只需要按下键盘R键,游戏将重新开始,一切数据恢复至初始值。玩家可以再次踏上拯救公主的征程。当然,玩家也可以通过关闭程序重新打开的方式。开发此功能只是略去了上述的步骤,缩短了一定的时间。4.1.8音乐播放游戏过程中,将伴随有音效的播放,给玩家一种更加全方位的体验,有一种置身其中的感觉。并且不同场景将有不一样的音效体验,尽量不让玩家产生厌倦感。游戏中主要使用了Java Applet的技术,将多媒体音频资料在Java程序运行的过程中播放出来。4.2性能需求计算机配置:安装java环境,jdk6.0以上;响应时间:每一次玩家触发事件后,程序的响应时间不得超过5秒;数据准确性:玩家在游戏的过程中,数据不能出现错误;玩家保存进度后,读取时数据应与保存时一致; 4.3可靠性和可用性需求可靠性:在玩家完整的进行一次游戏的过程中,不会出现程序运行错误、闪退的情况。同时能够完成功能需求中的各个功能模块。可用性:能够保证在两周时间内,程序能够正常运行的比例在90%以上。4.4可维护性和可扩展性需求可维护性:能够做到在不影响玩家数据的情况下,修复程序Bug。可扩展性:作为游戏开发,一成不变往往会使玩家产生情感疲劳,所以开发新的功能成为一种必要。所以,该游戏应该能确保在不影响之前功能情况下,添加新的功能模块。5 程序设计与实现5.1 概要设计5.1.1主菜单设计图5-1 主菜单效果图主菜单由背景图片、开始游戏、读取游戏、游戏说明、退出游戏五部分组成。显示效果如图5-1所示。在主菜单主要借助于鼠标操作。当点击开始游戏,主菜单关闭,进入游戏主界面并开始游戏;当点击读取游戏,主菜单关闭,程序读取之前保存数据,进入游戏主界面并开始游戏;当点击游戏说明,进入游戏说明界面,游戏说明主要介绍了游戏背景及游戏的基本操作等;当单机退出游戏,主菜单关闭,程序结束运行。5.1.2游戏主界面设计主界面主要由两部分组成,分别是“勇士”的状态信息栏和游戏过程界面。状态信息包括:等级、生命值、攻击力、防御力、金币数、经验值、所拥有的钥匙数、当前楼层数、最高楼层数。效果显示如图5-2所示。图5-2 主界面效果图5.1.3实体类设计勇士类:class Hero extends Stuff private int hp;/生命值private int atk;/攻击力private int def;/防御力private int money;/金币数private int exp;/经验值private int ykey;/黄色钥匙数private int bkey;private int rkey;private Point xy;private int dir;private BookPane bp;private Game game;private HeroShake hs;private DoorShake ds;public Hero(int paramInt1, int paramInt2, int paramInt3, Point paramPoint) hp = paramInt1;atk = paramInt2;def = paramInt3;xy = paramPoint;怪物类:class Monster extends Stuff public String name;Monster(String paramString, int paramInt1, int paramInt2, int paramInt3,int paramInt4, int paramInt5) = paramString;this.hp = paramInt1;this.atk = paramInt2;this.def = paramInt3;this.money = paramInt4;this.exp = paramInt5;5.2核心技术运用5.2.1封装Java类将数据和方法放在一起,并为数据设定private的访问权限,为方法设定public的访问权限。所以对使用该类的其他类来说,只能使用其公有的方法,不能使用其私有化的数据,从而实现信息的隐藏。这就是所谓的封装性。数据封装解决了传统结构方法中数据与操作分离所带来的各种问题,程序员只用通过指定的入口才能对数据进行操作,这种方式大大提高了程序的可复用性和可维护性。数据的封装,实现了将一个类中私有数据和公有数据的分离,其他类可以很清楚的看到自己可以访问的数据,降低了复杂性。在本游戏中,对封装性的运用,体现在对核心实体类中各属性值的封装。将那些不该让访问到的数据设为private,实现属性的私有化。这也是对属性值的保护。5.2.2继承 继承是Java编程语言的又一大特性。继承就是将已存在的类作为基础建立一个新的类,使用到的关键字为extends。通过使用这种方式创建出来的新类,可以使用父类中访问权限允许的属性及方法,与此同时,新类中可以设定自己特有的属性和方法。但不能选择性的继承某一父类。Java的这一特性深受广大程序员的青睐,因为它提高了编写代码的效率,降低了开发的成本。Java继承的特征:继承关系是可以传递的;继承能够让程序的阅读者清楚的看清类与类之间的关系;继承可以提高一致性,从而减少了类之间的接口,提高了程序的易维护性。本游戏中,核心实体类勇士类、怪物类中拥有一些共有属性,如生命值、攻击力、防御力等,故抽象出父类Stuff类,封装了共有属性,降低了代码的重复率,提高了编程效率。5.2.3多态多态的概念:不同的类的对象,在接收到同一个消息时,会根据具体情况做出不同的响应,即同一个消息发出后,程序将会根据具体情况(消息中参数、调用的对象等方面)执行不同的行为。多态性是Java语言的一大特性。多态具体可以分为以下两种:编译时多态和运行时多态,编译时多态又称为重载,运行时多态又称为重写。重载:1.定义在同一个类中,具有多个同名的方法2.方法名字相同,参数列表不同(参数个数不同,参数的类型不同,参数的顺序不同(在参数类型不同的基础上)3.跟返回类型无关。重写:1.发生在子父类之间,子类具有和父类相同的行为。2.方法的签名完全一致。方法名,返回类型,参数列表完全一致。3.访问权限不能被缩小。4.异常不能被扩大。5.2.4双缓冲技术当调用repaint()方法会出现动画的闪烁,给玩家带来不流畅的视觉感,那么如何来处理掉这种闪烁的效果呢?就是利用java的双缓冲技术。双缓冲技术的工作原理:先在内存中分配一个图片和设置它的大小和游戏窗口一样(在内存中的空间我们是看不到的),然后利用getGraphics()方法去获得给空间并将它全部一次性的显示到我们的屏幕上。这样在我们的动画窗口上面是显示出来就非常的流畅了。避免了上面的闪烁效果。双缓冲技术示意图如图5-3所示:图5-3 双缓冲技术示意图双缓冲技术相关代码:public void update(Graphics g) if (offScreenImage = null) offScreenImage = this.createImage(Constant.Game_width,Constant.Game_height);Graphics goff = offScreenImage.getGraphics();paint(goff);g.drawImage(offScreenImage, 0, 0, null);5.2.5锁机制在Java编写的程序中,有时会出现多个线程并发访问同一数据的情况,进而造成数据的不一致性,并对程序的最终结果造成影响。所以Java语言提出了一个全新的概念锁。锁机制的出现可以很方便的实现原子性。将所有的公有属性(即会被多个线程共同访问的代码)放在一个有“锁”的代码块中,这个代码块被称为同步代码块。同步代码块有两部分组成:一部分是公共资源,放在大括号中,称之为公共资源;一部分是标识此为同步代码块的标志符(synchronized 关键字)。synchronized /代码块 每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁(Intrinsic Lock)或监视锁(Monitor Lock),当线程即将运行有synchronized关键字标识的代码块时,会自动获取到该公有资源的锁。当程序在退出代码块时将会释放这个锁资源(无论是通过正常路径退出代码块,还是通过抛异常退出)。一个线程想要获取到这个内置锁,首先要保证这个锁资源没有被其他线程获取,其次该线程必须要执行被这个锁资源“锁住的”代码块。内置锁为互斥锁,即线程A获取到锁后,其他的所有线程如果还想获取到该锁,只有等线程A释放锁资源,在该阶段这些线程都将会进入到锁池等待的状态,只有获得锁资源,该线程才会重新进入可执行状态,等待CPU的调用。故同步代码块中的操作可以保证原子性。当某个线程请求一个被其它线程持有的内置锁时,发出请求的线程就会进入锁池等待状态,直到该锁资源被释放。只有线程获取到这个锁资源,该线程才能重新进入到可执行状态,等待被cpu调度。否则,它将会一直处于阻塞状态。5.2.6 Java AppletJava Applet是使用Java编程语言编写应用在页面的一种小的程序。它可以产生丰富的、特殊的效果,能够使我们的页面看起来不再单一无趣,而是丰富多彩的。而包含Java Applet应用程序的网页被称之为Java-Powered页。用户访问到Java-Powered页时,Java Applet将会被下载到用户的计算机上并执行,但是前提是用户使用的浏览器必须支持Java语言。Java Applet还有一个优点,就是它是在用户计算机上执行的,因此它的执行速度不会受到网络宽带、用户并发访问量的影响,让用户能够更好、更快、更流畅的欣赏嵌入网页的多媒体资源。也正是因为这个特点,使得Java Applet技术曾被广泛的应用在网页技术。在Java Applet中,可以实现图形绘制、字体和颜色控制、动画和声音的插入、人机交互及网络交流等功能.Applet还提供各种名为抽象窗口工具箱 (Abstract Window Toolkit,AWT)的窗口环境开发工具,但AWT的设计是存在缺陷的,取而代之的Swing技术为Java GUI组建的轻量组建.它们利用用户计算机的GUI元素,可以建立标准的图形用户界面,如窗口、按钮、滚动条等。目前,在网络上有非常多的地方应用到了Applet技术,使得我们的网络生活更加丰富多彩。5.2.7事件处理技术编写基于Swing的游戏应用程序必然会使用到事件处理技术,根据玩家的操作做出相应的事件处理。在Java应用程序中事件处理有很多种,在本游戏中主要用到鼠标事件、键盘事件。现就这两种最为常用的事件处理技术做如下简短性的介绍:一、鼠标事件在游戏中,玩家会必不可少的会使用鼠标进行操作,所以,鼠标操作事件将是不可或缺的。在Java Swing中的诸多组件上都可以添加鼠标事件的监听。实现MouseListener接口,可以通过重写不同的方法,对发生在事件源上的点击、释放鼠标、鼠标移入/移除事件源、鼠标左键/右键点击等事件的发生做出不同的逻辑处理。实现MouseMotionListener接口可以处理拖动鼠标和移动鼠标的事件。实现这两个接口就可以完成游戏所需的所有的鼠标操作的事件处理。具体会对接口中的mouseClicked(MouseEvente)、mouseEntered(MouseEvente)、mousePressed(MouseEvente)三个方法进行重写,实现相应的业务逻辑。二、键盘事件为了更加的方便玩家操作,还会设有一些的键盘事件。当玩家按下、释放或敲击键盘上一个键时就触发了键盘事件,必须要有触发事件的事件源。当一个组件处于激活状态时,敲击键盘上一个键就导致这个组件触发了键盘事件。事件源使用addKeyListener方法获得监视器。监视器是一个对象,创建该对象的类必须实现接口KeyListener。用KeyEvent类的public int getKeyCode()方法,可以判断哪个键被按下、敲击或释放,getKeyCode()返回一个键码值。也可以用KeyEvent类的public char getKeyChar()判断哪个键被按下、敲击或释放,getKeyChar()返回键上的字符。根据返回的字符,程序员可以编写不同的逻辑来处理,从而达到按下不同的键,执行不同的业务逻辑。键盘事件主要是对如下几个方法进行重写:keyPressed(KeyEvent e)、keyReleased(KeyEvent e)。5.2.8线程说到线程,我们就不得不先介绍一下进程的概念。进程是计算机进行资源分配的基本单位。可以说一个程序的运行就是一个进程的执行。但是由于计算机的发展以及复杂功能的需求,进程已经满足不了现今社会的一些要求,所以才提出了比进程还要小的线程。线程是程序运行过程中最小的执行单位。线程有三个要素:cpu、代码、数据。在Java语言中线程的实现方式主要有两种:一是直接继承Thread类,二是实现Runnable接口。有关于线程有两个最主要的方法:run()方法、start()方法。run()方法规定了线程所要执行的程序流程。start()方法是用来启动线程的,相当于向cpu发出执行信号,等待cpu的调用。线程的状态初步分为五种:初始状态:刚刚申请了内存空间来存储线程对象,即刚使用new关键字创建好的线程就会处于该状态。就绪状态:刚刚创建好的线程调用了start()方法后所处的状态,等待cpu的调度。进入该状态的线程就脱离了程序员的控制。运行状态:处于就绪状态的线程获取到cpu的资源进入该状态,该状态的线程会去执行run()方法中的代码。阻塞状态:线程会由于缺少某一资源而无法进入就绪状态。阻塞状态又分为挂起状态、锁池等待、等待池等待几种。挂起状态是由于线程遇到sleep()方法或join()方法,放弃了cpu的使用权;锁池等待是线程在执行的过程中遇见了synchronized关键字申请对象的锁资源,且该资源正被其他线程使用,故而进入锁池等待;等待池等待是正在运行的线程遇见wait操作之后,进入到阻塞状态,直到收到notify或者notifyAll所下达的通知,则线程会退出阻塞状态,进入锁池等待。死亡状态:一个正在运行的线程,倘若它的

温馨提示

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

评论

0/150

提交评论