基于Java语言的游戏软件开发(含源文件)_第1页
基于Java语言的游戏软件开发(含源文件)_第2页
基于Java语言的游戏软件开发(含源文件)_第3页
基于Java语言的游戏软件开发(含源文件)_第4页
基于Java语言的游戏软件开发(含源文件)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、摘要编程语言从机器语言,汇编语言,再到现在的高级语言,一步步发展到现在已经形成了一个完善语言的体系。就像是各个国家都有自己的语言一样,编程语言也有许多不同的语言,而每种语言的出现都是为了迎合不同的需求,也都有自己独特的语言魅力,Java也不例外,它的出现迎合了人们对应用程序跨平台运行的需求。而且Java现在是全球流行的开发工具之一,它拥有了一套庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机。本文在开始先对Java语言做了初步的介绍,即针对Java的特点做了详细的描述,同时也针对Java程序的运行机制做了描述;开发环境做了简单的介绍。接下来是对编写的软件的描

2、述,对Java API的应用,对Java语言的继承、方法的重写、接口和抽象类的使用。 绪论第一章系统开发环境1.1开发工具1.2应用环境第二章系统需求分析2.1需求分析2.2可行性分析第三章系统概要设计3.1设计目标3.2系统功能模块第四章系统详细设计4.1程序设计4.2各功能界面截图第五章系统测试5.1测试的意义5.2测试过程5.3测试结果第六章总结参考文献绪论Java语言简介Java的发展和历史Java的诞生得益于对家用电器的芯片的研制,开始时,开发者想用C+语言来开发电器的芯片,但是,由于芯片的种类各不相同,因此,程序要进行多次编译。尤其是C+中的指针操作,稍有不慎,就会出现问题。程序可

3、以出错,但是家用电器不能出错误,为此,开发者将C+语言进行简化,去掉指针操作,去掉运算符重载,去掉C+中的多继承,得到了Java语言,将它变成了一种解释执行的语言,并在每个芯片上装上一个Java虚拟机。刚开始时,Java语言被称为Oak语言(橡树语言)Java语言现在逐渐成熟起来,它的类也已经进千个了,而且还可以通过第三方购买中间件,为Java语言的发展提供了良好的发展前景,同时它也是跨平台的语言,因此许多软件开发商及硬件开发商也争先恐后地想搭上Java语言的快车,都声称支持Java语言,它对微软发起了有力的挑战,而且Sun公司正努力开发Java芯片Java语言的特点Java是一种简单的,面向

4、对象的,分布式的,健壮的,安全的,与平台无关的,多线程的,高性能的,动态程序设计语言。1. 简单易学Java语言虽起源于C+,但是去掉了C+语言中难于掌握的指针操作,内存管理非常简单,如果要释放内存资源,你仅需要让其对象的引用等于null,这样就使操作变得异常简单2. 面向对象Java语言是面向对象的编程语言。面向对象技术很好的解决了当今软件开发过程中新出现的种种传统的面向过程语言所不能处理的问题,包括软件开发的规模扩大,升级加快,维护量增大以及开发分工日益细化,专业化和标准化等。面向对象技术的核心是以更接近于人类思维的方式建立计算机模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通

5、过统一的接口与外界交互,是反映现实世界实体的个各类在程序中能够独立、自治和继承。3. 分布式Java包括一个支持HTTP(超文本传输协议)和FTP(文件传输协议)等基于TCP/IP协议的子库,因此,Java应用程序可凭借URL(统一资源定位符)打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。为分布式环境尤其是Internet提供了动态内容,无疑是一项非常宏达的工程,但是Java的语法特性可以很容易实现这项目标。4. 健壮性Java致力于检查程序在编译和运行时的错误。类型检查可以检查出许多开发早期出现的错误。Java自行操作内存,减少了内存错误的可能性。Java还实现了真数组,

6、避免了覆盖数据的可能。这些功能特征大大缩短了开发Java应用程序的周期。Java提供null指针检测数组边界,进行异常出口字节代码校验。5. 安全稳定对网络上应用程序的另一个要求是较高的安全可靠性。用户通过网络获取并在本地运行的应用程序必须是可信赖的,不会充当病毒或者其他恶意操作的传播者而攻击本地的资源,同时它还应该是稳定 的,轻易不会产生死机等错误,使得用户乐意使用。6. 平台无关Java语言独特的运行机制使得它具有良好的二进制的可移植性,利用Java,开发人员可以编写出与具体平台无关,普遍适用的应用程序,大大降低了开发、维护和管理的开销,也就是一次编译,随处运行。7. 支持多线程多线程是当

7、今软件开发技术的又一重要成果,已成功应用在操作系统和应用开发等多个领域。多线程技术允许同一个进程有两个或两个以上的执行线索,即同时做两件或多件事情,满足了一些复杂软件的需求。Java不但内置多线程功能,而且定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。8. 高性能如果解释器的速度快,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直接解释器一秒钟内可调用300 000个过程。翻译目标代码的速度与C+的性能没什么区别。9. 动态性Java的动态性是其面向对象设计方法的扩展,它允许程序动态地装入运行过程中所需要的类。Java编译器将符号引用信

8、息在字节码中保存下来并传递给解释器吗,再由解释器完成动态连接类后,将符号引用信息转换为数值偏移量。这样,一个在存储器生成的对象不在编译过程中决定,而是延迟到运行时有解释器确定,这样对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号信息的查找和转换过程进在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。Java平台简介1998年12月,Sun发布了Java2平台JDK 1.2,这时Java发展是上的里程碑。1999年6月,Sun公司重新组织Java平台的集成方法,并将Java企业级应用平台

9、作为发展方向。2004年,Sun发布JDK1.5更名为JDK5.0.2006年底,Sun再度推出JDK1.6(JDK6.0)。如今,Java家族也已经有四个主要成员:J2SE(Java 2 Standard Edition)用于工作站、PC机的Java标准平台,现改名为JavaSE;J2EE(Java 2 Enterprise Edition)可扩展的企业级应用平台,现改名为JavaEE;J2ME(Java 2 Micro Edition)嵌入式电子设备Java应用平台,现改名为JavaME;JavaFX是一种声明式的静态类型编程语言,专为喜欢在可视化编程中的Web脚本人员和应用程序开发人员量

10、身定做,是Java新成员Java程序的运行机制和Java虚拟机(JVM)Java语言比较特殊,由Java语言编写的程序需要经过编译步骤,但是这个编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码文件(也就是.class文件)。当然,这种字节码文件不是可执行的,必须使用Java解释器来解释执行。因此,我们可以认为:Java语言既是编译型语言,也是解释型语言。或者说,Java语言既不是纯粹的编译型语言,也不是纯粹的解释型语言。Java程序的执行过程必须经过先编译,后解释两个步骤,Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM(Java Virtual Machin

11、e)。JVM是可运行JAVA字节码文件的虚拟计算机。所有平台的JVM向编译器提供相同的编译接口,而编译器只需要面向虚拟机,生成虚拟机能理解的代码,然后由虚拟机来解释执行。在一些虚拟机的实现中,还会将虚拟机代码转换成特定系统的机器码执行,从而提高执行效率。JVM是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器Java开发环境搭建首先进行JDK的安装,下载JDK安装包解压后进行环境变量的配置,配置步骤如下:右击桌面上“我的电脑”图标,出现右键菜单;单击“属性”菜单项,出现“系统属性”或“高级系统设置” 对话框;单击该对话框的“高级

12、”选项,出现如图2所示的对话框。单击“环境变量”按钮,将看到如图3所示的“环境变量”的对话框,通过该对话框可以修改或添加环境变量。图2图3第一章系统开发环境1.1开发环境Sun Microsystems公司在推出Java语句的同时,推出了一套开发工具JDK。Sun提供的基于字符模式的Java开发工具包JDK:Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可以在不同的软硬件平台上运行。Java源程序编写可以借助于记事本,Editplus,UltraEdit等第三方编辑工具。所有的Java文件编辑、编译、调试、解释运行都

13、是通过使用字符命令来执行操作。JDK由一个标准库和一组建立、测试及建立文档的Java实用程序组成。其核心Java API是一些预定义的类库,开发人员需要使用这些类来访问Java语言的功能。JDK是整个Java的核心,包括了Java运行环境,一堆Java工具和Java基础的类库。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。JDK里面是Java类库和Java的语言规范,它提供的是无论是用何种开发软件写java程序都必须用到类库和java语言规范,没有JDK,你的java程序根本就不能用。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有

14、很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等待,其中IBM的JDK包含的JVM运行效率要比Sun的JDK包含的JVM高出许多。而专门运行在X86平台的Jrocket在服务端运行效率也要比Sun的JDK好很多。但是不管怎么说,还是需要把Sun的JDK掌握好。但是在这里我借助的是一个编程软件MyEclipse来完成程序的编写与调试的1.2应用环境操作系统:Windows 7应用环境:JDK 1.6应用软件:Myeclipse第二章系统需求分析2.1需求分析游戏简介:游戏中玩家通过鼠标来移动自己的飞机,打掉飞机或蜜蜂会获得分

15、数和奖励,打掉一架飞机获得5分,打掉一只蜜蜂获得随机奖励:一条命或者40次双倍火力,如果撞上敌机或蜜蜂,则会失去生命,同时双倍火力清零。每撞到一次就生命值减1,当生命值为0时,游戏结束shoots要满足以下几点要求:1. 鼠标点击界面游戏开始2. 鼠标移出界面游戏暂停再次移入继续开始3. 飞机跟随鼠标指针移动4. 打掉飞机就分值增加,打掉蜜蜂就奖励生命值或者双倍火力2.2可行性分析Shoots游戏是一种简单的大众游戏,在实现游戏的过程中你需要对子弹与敌机或蜜蜂的碰撞做出判断,判断的处理可以由坐标的范围来完成;如果碰撞就要做删除处理,通过记录碰撞的对象(对象是存放在数组中的)的下标可以对它进行删

16、除操作;以及在它们越界(超出画板范围的那些敌机和蜜蜂)后对它们要删除;因为敌机和蜜蜂是不断生成的,会越来越多,而存放它们的是一个数组,这个数组不是固定的长度,会随着敌机和蜜蜂的数量的增加而进行扩容,所以如果不对越界的敌机和蜜蜂进行处理,数组会越来越大,从而占有更多的存储空间,而游戏运行也越来越慢;另外实现子弹、敌机和蜜蜂的自动移动,需要对存放它们的数组遍历然后对每一个存放的对象的坐标属性进行加减操作;而用鼠标来操作飞机就需要用到与鼠标移动相关的触发事件,在鼠标的点击,滑动,移出面板,移入面板同样都有与之相关的鼠标事件,通过这些事件来实现暂停,运行。选择使用Java语言,一方面是接触的多,另一方

17、面是Java是一种跨平台的,适合于分布式计算机环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。第三章系统概要设计3.1设计目标可以利用鼠标移动战机,鼠标移出游戏面板游戏暂停,鼠标再次移入游戏面板游戏开始,还要随机的产生敌机和蜜蜂,生命值为零结束游戏。3.2系统功能模块1.类与类之间的关系包括一个源文件,五个类和两个接口图3.12.java源文件及其功能编号文件名功能1ShootGame该文件是程序入口,包含main方法和实现各种具体操作的方法2FlyingObject抽象父类,将Hero、Airplane、Bee、Bullet中共有的属性抽出来放在里面 3H

18、ero 4Airplane表示敌机,继承FlyingObject类,实现Enemy接口,提供移动的属性与方法 5Bee表示蜜蜂,继承FlyingObject类,同时实现Award接口,提供蜜蜂移动的方法 6Bullet表示子弹,继承FlyingObject类,提供移动的方法 7Enemy表示敌人的接口,提供获取分数方法 8Award表示奖励的接口,提供获取奖励类型(双倍活力或生命值)的方法3.数据建模:使用一个数据模型,描述对象的关系,使用绘图坐标系作为参考模型,英雄机、敌机、蜜蜂以及子弹都是矩形区域,如下图所示:以英雄机为例标示出数据x、y、width以及height所表示的位置。敌机、蜜蜂

19、、子弹以及英雄机的这四个属性类似的第四章系统详细设计4.1程序设计1.主类ShootGame(1)成员变量成员变量描述变量类型变量名称面板宽面板高启动状态运行状态暂停状态游戏结束状态记录当前状态背景图片开始图片暂停图片游戏结束图片敌机图片蜜蜂图片子弹图片英雄机图片0英雄机图片1英雄机对象敌人数组(敌机+小蜜蜂)子弹数组定时器时间间隔(毫秒)敌人入场计数子弹入场计数得分int intintintintintint BufferedImage BufferedImage BufferedImage BufferedImage BufferedImage BufferedImage Buffered

20、Image BufferedImage BufferedImage HeroFlyingObjectBullet Timerint intintint WIDTH HEIGHTSTART RUNNINGPAUSE GAME_OVERstate backgroundstartpausegameoverairplanebeebullethero0hero1hero flyingsbullets timer; intervelflyEnteredIndexshootIndexint score(2)方法方法描述方法名称随机生成敌人对象敌人入场飞行物走一步子弹入场(英雄机发射子弹)所有子弹和所有敌人碰

21、撞一颗子弹和所有敌人碰撞删除越界的敌人和子弹 检查游戏结束启动执行重写paint() g:画笔画状态画分和画命画英雄机对象画敌人对象画子弹对象 nextOne()enterAction()stepAction()shootAction()bangAction()bang(Bullet b)outOfBoundsAction()checkGameOverAction()action()paint(Graphics g)paintState(Graphics g)paintScore(Graphics g)paintHero(Graphics g)paintFlyingObjects(Graphi

22、cs g)paintBullets(Graphics g)2.主类ShootGame中的main方法(1).主类的main为程序入口,定义了游戏窗口的的大小、居中,点击右上角“x”关闭窗口以及设置窗口的可见性还调用了启动游戏的方法action()3.抽象父类FlyingObject由图3.1可以分析出英雄机、敌机、子弹以及蜜蜂都有x、y、width以及height属性,因此,将这些属性抽象到父类FlyingObject中。另外,它们在界面上都是以图片的形式显示,因此在父类FlyingObject中,添加image属性,表示它们的贴图;由于蜜蜂和敌机都可以被子弹击中,因此在FlyingObjec

23、t类中添加shootBy方法,该方法的参数为子弹类型。下图是以蜜蜂为例,说明子弹被击中的算法。代码如下:/*敌人被子弹打,this:敌人;bullet:子弹*/public boolean shootBy(Bullet bullet)/找出敌机的四个角的坐标int x1 = this.x;int x2 = this.x+this.width;int y1 = this.y;int y2 = this.y+this.height;/找出子弹坐标int x = bullet.x;int y = bullet.y;return xx1 & xy1 & yShootGame.HEIGHT; 7.类Be

24、e,表示蜜蜂继承FlyingObject,重写了Step方法,实现Award接口,蜜蜂可以左右和向下移动,故含有移动速度的属性和越界的判断,代码如下:package shoots;import java.util.Random;public class Bee extends FlyingObject implements Awardprivate int xSpeed = 1;private int ySpeed = 2;private int awardType;public Bee()image = ShootGame.bee;width = image.getWidth();heigh

25、t = image.getHeight();Random rand = new Random();x = rand.nextInt(ShootGame.WIDTH-this.width);y =-this.height;awardType=rand.nextInt(2);public int getType()return awardType;public void step()x += xSpeed;y += ySpeed;if(x=ShootGame.WIDTH-this.width)xSpeed = -1;if(xShootGame.HEIGHT; 8.类Bullet,表示子弹继承Fly

26、ingObject,重写了step方法,定义了越界的判断方法,代码如下:package shoots;public class Bullet extends FlyingObject private int speed = 3;public Bullet(int x, int y)image = ShootGame.bullet;width = image.getWidth();height = image.getHeight();this.x = x;this.y = y;public void step()y -= speed;public boolean outOfBounds()ret

27、urn yx1 & hxy1 & hy0)/双倍火力Bullet bullets = new Bullet2;bullets0 = new Bullet(this.x+xstep,this.y-ystep);bullets1 = new Bullet(this.x+3*xstep,this.y-ystep);doubleFire -= 2;/火力减2return bullets;else /单倍火力Bullet bullets = new Bullet1;bullets0 = new Bullet(this.x+2*xstep,this.y-ystep);return bullets;10.主

28、类ShootGame由于主类要实现画板的功能,所以继承了JPanel,在该类中,使用静态常量定义面板的宽和高,并使用ImageIO的read方法加载图片;界面绘制过程如下:(1).在该类中添加FlyingObject类型的属性flyings,用于存储射击游戏的所有敌机和蜜蜂;(2).添加Bullet类型的属性bullet,用于存储射击游戏中的所有子弹;(3).添加Hero类型的属性hero,表示英雄机;(4).添加paintHero方法、paintBullets方法、paintFlyingObject方法,分别用于实现在面板上画英雄机、子弹、敌机、蜜蜂;并重写paint方法,在该方法中调用上述

29、三个方法;(5).添加构造初始化属性flyings、bullets以及hero;(6).重构Airplane类Bee类,设置固定的x、y坐标位置,以便显示查看。另外在该类中定义了许多的方法,关键方法的详细功能及实现如下:1).shootAction()方法,实现每次调用20次该方法发射一次子弹,并将发射的子弹存储到bullets数组中2).bangAction方法和bang方法,这两个方法实现了子弹与飞行物(蜜蜂或敌机)的碰撞检测,详细过程如下:(1).循环遍历存储所有子弹的数组bullets;(2).在上述循环中,再次使用循环,遍历存储所有飞行物的数组flyings,在该循环中判断当前子弹是

30、否击中某个飞行物,如果击中则退出循环,记录被击中的飞行物在flyings数组中的索引index;(3).在flyings数据中找到该飞行物,并将其移除;(4).判断该飞行物的类型是Emeny还是Award,如果是Enemy类型,则获取加分;如果是Award类型,则获取奖励(5).获取奖励的类型,如果是奖励的类型为DOUBLE_FIRE,则获得40次双倍活力;如果奖励类型是LIFE,则奖励生命值,3).outOfBoundsAction方法,该方法用于删除越界飞行物以及子弹,详细实现过程如下:(1).创建FlyingObject类型的数组flyingLives,用于存储所有活着的飞行物(蜜蜂和敌

31、机),即没有越界的飞行物;(2).循环遍历存储所有飞行物的数组flyings,并判断每一个飞行物是否越界,将没有越界的飞行物放入flyingLives数组中存储,并记录不越界飞行物的个数index;(3).将flyingLives数组中的元素,复制到flyings数组中,并重新指定flyings数组的长度index;(4).删除子弹与删除飞行物的过程类似。4).isGameOver方法,该方法用于判断游戏是否结束,方法实现的详细过程如下:(1).循环遍历存储所有飞行物(蜜蜂和敌机)的数组flyings(2).在循环中,判断英雄机是否与飞行物发生碰撞,如果发生碰撞,则减生命值、双倍火力清零,记录被撞飞行物在flyings数组中的索引index,该索引默认是-1,即没有发生碰撞;(3).判断index是否为-1,如果不为-1,将该索引位置的元素从flyings数组中清除;(4).判断生命值是否小于等于0,并返回比较结果4.2各功能界面截图1.Shoots游戏的基本运行界面(1)初始界面(2).程序开始运行界面鼠标点击游戏界面,游戏开始;移动鼠标可以操作英雄机(3).鼠标移

温馨提示

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

评论

0/150

提交评论