基于Java语言的游戏软件开发含源文件Word文档格式.doc

上传人:wj 文档编号:1459015 上传时间:2023-04-30 格式:DOC 页数:26 大小:571KB
下载 相关 举报
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第1页
第1页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第2页
第2页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第3页
第3页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第4页
第4页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第5页
第5页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第6页
第6页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第7页
第7页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第8页
第8页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第9页
第9页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第10页
第10页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第11页
第11页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第12页
第12页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第13页
第13页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第14页
第14页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第15页
第15页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第16页
第16页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第17页
第17页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第18页
第18页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第19页
第19页 / 共26页
基于Java语言的游戏软件开发含源文件Word文档格式.doc_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于Java语言的游戏软件开发含源文件Word文档格式.doc

《基于Java语言的游戏软件开发含源文件Word文档格式.doc》由会员分享,可在线阅读,更多相关《基于Java语言的游戏软件开发含源文件Word文档格式.doc(26页珍藏版)》请在冰点文库上搜索。

基于Java语言的游戏软件开发含源文件Word文档格式.doc

2.面向对象

Java语言是面向对象的编程语言。

面向对象技术很好的解决了当今软件开发过程中新出现的种种传统的面向过程语言所不能处理的问题,包括软件开发的规模扩大,升级加快,维护量增大以及开发分工日益细化,专业化和标准化等。

面向对象技术的核心是以更接近于人类思维的方式建立计算机模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,是反映现实世界实体的个各类在程序中能够独立、自治和继承。

3.分布式

Java包括一个支持HTTP(超文本传输协议)和FTP(文件传输协议)

等基于TCP/IP协议的子库,因此,Java应用程序可凭借URL(统一资源定位符)打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。

为分布式环境尤其是Internet提供了动态内容,无疑是一项非常宏达的工程,但是Java的语法特性可以很容易实现这项目标。

4.健壮性

Java致力于检查程序在编译和运行时的错误。

类型检查可以检查出许多开发早期出现的错误。

Java自行操作内存,减少了内存错误的可能性。

Java还实现了真数组,避免了覆盖数据的可能。

这些功能特征大大缩短了开发Java应用程序的周期。

Java提供null指针检测数组边界,进行异常出口字节代码校验。

5.安全稳定

对网络上应用程序的另一个要求是较高的安全可靠性。

用户通过网络获取并在本地运行的应用程序必须是可信赖的,不会充当病毒或者其他恶意操作的传播者而攻击本地的资源,同时它还应该是稳定的,轻易不会产生死机等错误,使得用户乐意使用。

6.平台无关

Java语言独特的运行机制使得它具有良好的二进制的可移植性,利用Java,开发人员可以编写出与具体平台无关,普遍适用的应用程序,大大降低了开发、维护和管理的开销,也就是一次编译,随处运行。

7.支持多线程

多线程是当今软件开发技术的又一重要成果,已成功应用在操作系统和应用开发等多个领域。

多线程技术允许同一个进程有两个或两个以上的执行线索,即同时做两件或多件事情,满足了一些复杂软件的需求。

Java不但内置多线程功能,而且定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。

8.高性能

如果解释器的速度快,Java可以在运行时直接将目标代码翻译成机器指令。

Sun用直接解释器一秒钟内可调用300000个过程。

翻译目标代码的速度与C++的性能没什么区别。

9.动态性

Java的动态性是其面向对象设计方法的扩展,它允许程序动态地装入运行过程中所需要的类。

Java编译器将符号引用信息在字节码中保存下来并传递给解释器吗,再由解释器完成动态连接类后,将符号引用信息转换为数值偏移量。

这样,一个在存储器生成的对象不在编译过程中决定,而是延迟到运行时有解释器确定,这样对类中的变量和方法进行更新时就不至于影响现存的代码。

解释执行字节码时,这种符号信息的查找和转换过程进在一个新的名字出现时才进行一次,随后代码便可以全速执行。

在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。

Java平台简介

1998年12月,Sun发布了Java2平台—JDK1.2,这时Java发展是上的里程碑。

1999年6月,Sun公司重新组织Java平台的集成方法,并将Java企业级应用平台作为发展方向。

2004年,Sun发布JDK1.5更名为JDK5.0.2006年底,Sun再度推出JDK1.6(JDK6.0)。

如今,Java家族也已经有四个主要成员:

J2SE(Java2StandardEdition)用于工作站、PC机的Java标准平台,现改名为JavaSE;

J2EE(Java2EnterpriseEdition)可扩展的企业级应用平台,现改名为JavaEE;

J2ME(Java2MicroEdition)嵌入式电子设备Java应用平台,现改名为JavaME;

JavaFX是一种声明式的静态类型编程语言,专为喜欢在可视化编程中的Web脚本人员和应用程序开发人员量身定做,是Java新成员

Java程序的运行机制和Java虚拟机(JVM)

Java语言比较特殊,由Java语言编写的程序需要经过编译步骤,但是这个编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码文件(也就是.class文件)。

当然,这种字节码文件不是可执行的,必须使用Java解释器来解释执行。

因此,我们可以认为:

Java语言既是编译型语言,也是解释型语言。

或者说,Java语言既不是纯粹的编译型语言,也不是纯粹的解释型语言。

Java程序的执行过程必须经过先编译,后解释两个步骤,

Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM(JavaVirtualMachine)。

JVM是可运行JAVA字节码文件的虚拟计算机。

所有平台的JVM向编译器提供相同的编译接口,而编译器只需要面向虚拟机,生成虚拟机能理解的代码,然后由虚拟机来解释执行。

在一些虚拟机的实现中,还会将虚拟机代码转换成特定系统的机器码执行,从而提高执行效率。

JVM是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。

它负责执行指令,还要管理数据、内存和寄存器

Java开发环境搭建

首先进行JDK的安装,下载JDK安装包解压后进行环境变量的配置,配置步骤如下:

右击桌面上“我的电脑”图标,出现右键菜单;

单击“属性”菜单项,出现“系统属性”或“高级系统设置”对话框;

单击该对话框的“高级”选项,出现如图2所示的对话框。

单击“环境变量”按钮,将看到如图3所示的“环境变量”的对话框,通过该对话框可以修改或添加环境变量。

图2 图3

1.1开发环境

SunMicrosystems公司在推出Java语句的同时,推出了一套开发工具JDK。

Sun提供的基于字符模式的Java开发工具包JDK:

Java开发工具(JDK)是许多Java专家最初使用的开发环境。

Java是平台无关的语言是指用Java写的应用程序不用修改就可以在不同的软硬件平台上运行。

Java源程序编写可以借助于记事本,Editplus,UltraEdit等第三方编辑工具。

所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。

JDK由一个标准库和一组建立、测试及建立文档的Java实用程序组成。

其核心JavaAPI是一些预定义的类库,开发人员需要使用这些类来访问Java语言的功能。

JDK是整个Java的核心,包括了Java运行环境,一堆Java工具和Java基础的类库。

不论什么Java应用服务器实质都是内置了某个版本的JDK。

因此掌握JDK是学好Java的第一步。

JDK里面是Java类库和Java的语言规范,它提供的是无论是用何种开发软件写java程序都必须用到类库和java语言规范,没有JDK,你的java程序根本就不能用。

最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等待,其中IBM的JDK包含的JVM运行效率要比Sun的JDK包含的JVM高出许多。

而专门运行在X86平台的Jrocket在服务端运行效率也要比Sun的JDK好很多。

但是不管怎么说,还是需要把Sun的JDK掌握好。

但是在这里我借助的是一个编程软件MyEclipse来完成程序的编写与调试的

1.2应用环境

操作系统:

Windows7

应用环境:

JDK1.6

应用软件:

Myeclipse

游戏简介:

游戏中玩家通过鼠标来移动自己的飞机,打掉飞机或蜜蜂会获得分数和奖励,打掉一架飞机获得5分,打掉一只蜜蜂获得随机奖励:

一条命或者40次双倍火力,如果撞上敌机或蜜蜂,则会失去生命,同时双倍火力清零。

每撞到一次就生命值减1,当生命值为0时,游戏结束

shoots要满足以下几点要求:

1.鼠标点击界面游戏开始

2.鼠标移出界面游戏暂停再次移入继续开始

3.飞机跟随鼠标指针移动

4.打掉飞机就分值增加,打掉蜜蜂就奖励生命值或者双倍火力

Shoots游戏是一种简单的大众游戏,在实现游戏的过程中你需要对子弹与敌机或蜜蜂的碰撞做出判断,判断的处理可以由坐标的范围来完成;

如果碰撞就要做删除处理,通过记录碰撞的对象(对象是存放在数组中的)的下标可以对它进行删除操作;

以及在它们越界(超出画板范围的那些敌机和蜜蜂)后对它们要删除;

因为敌机和蜜蜂是不断生成的,会越来越多,而存放它们的是一个数组,这个数组不是固定的长度,会随着敌机和蜜蜂的数量的增加而进行扩容,所以如果不对越界的敌机和蜜蜂进行处理,数组会越来越大,从而占有更多的存储空间,而游戏运行也越来越慢;

另外实现子弹、敌机和蜜蜂的自动移动,需要对存放它们的数组遍历然后对每一个存放的对象的坐标属性进行加减操作;

而用鼠标来操作飞机就需要用到与鼠标移动相关的触发事件,在鼠标的点击,滑动,移出面板,移入面板同样都有与之相关的鼠标事件,通过这些事件来实现暂停,运行。

选择使用Java语言,一方面是接触的多,另一方面是Java是一种跨平台的,适合于分布式计算机环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。

3.1设计目标

可以利用鼠标移动战机,鼠标移出游戏面板游戏暂停,鼠标再次移入游戏面板游戏开始,还要随机的产生敌机和蜜蜂,生命值为零结束游戏。

3.2系统功能模块

1.类与类之间的关系

包括一个源文件,五个类和两个接口

图3.1

2.java源文件及其功能

编号

文件名

功能

1

ShootGame

该文件是程序入口,包含main方法和实现各种具体操作的方法

2

FlyingObject

抽象父类,将Hero、Airplane、Bee、Bullet中共有的属性抽出来放在里面

3

Hero

4

Airplane

表示敌机,继承FlyingObject类,实现Enemy接口,提供移动的属性与方法

5

Bee

表示蜜蜂,继承FlyingObject类,同时实现Award接口,提供蜜蜂移动的方法

6

Bullet

表示子弹,继承FlyingObject类,提供移动的方法

7

Enemy

表示敌人的接口,提供获取分数方法

8

Award

表示奖励的接口,提供获取奖励类型(双倍活力或生命值)的方法

3.数据建模:

使用一个数据模型,描述对象的关系,使用绘图坐标系作为参考模型,英雄机、敌机、蜜蜂以及子弹都是矩形区域,如下图所示:

以英雄机为例标示出数据x、y、width以及height所表示的位置。

敌机、蜜蜂、子弹以及英雄机的这四个属性类似的

1.主类ShootGame

(1)成员变量

成员变量描述

变量类型

变量名称

面板宽

面板高

启动状态

运行状态

暂停状态

游戏结束状态

记录当前状态

背景图片

开始图片

暂停图片

游戏结束图片

敌机图片

蜜蜂图片

子弹图片

英雄机图片0

英雄机图片1

英雄机对象

敌人数组(敌机+小蜜蜂)

子弹数组

定时器

时间间隔(毫秒)

敌人入场计数

子弹入场计数

得分

int

int

BufferedImage

FlyingObject[]

Bullet[]

Timer

WIDTH

HEIGHT

START

RUNNING

PAUSE

GAME_OVER

state

background

start

pause

gameover

airplane

bee

bullet

hero0

hero1

hero

flyings

bullets

timer;

intervel

flyEnteredIndex

shootIndexintscore

(2)方法

方法描述

方法名称

随机生成敌人对象

敌人入场

飞行物走一步

子弹入场(英雄机发射子弹)

所有子弹和所有敌人碰撞

一颗子弹和所有敌人碰撞

删除越界的敌人和子弹

检查游戏结束

启动执行

重写paint()g:

画笔

画状态

画分和画命

画英雄机对象

画敌人对象

画子弹对象

nextOne()

enterAction()

stepAction()

shootAction()

bangAction()

bang(Bulletb)

outOfBoundsAction()

checkGameOverAction()

action()

paint(Graphicsg)

paintState(Graphicsg)

paintScore(Graphicsg)

paintHero(Graphicsg)

paintFlyingObjects(Graphicsg)

paintBullets(Graphicsg)

2.主类ShootGame中的main方法

(1).主类的main为程序入口,定义了游戏窗口的的大小、居中,点击右上角“x”关闭窗口以及设置窗口的可见性

还调用了启动游戏的方法action()

3.抽象父类FlyingObject

由图3.1可以分析出英雄机、敌机、子弹以及蜜蜂都有x、y、width以及height属性,因此,将这些属性抽象到父类FlyingObject中。

另外,它们在界面上都是以图片的形式显示,因此在父类FlyingObject中,添加image属性,表示它们的贴图;

由于蜜蜂和敌机都可以被子弹击中,因此在FlyingObject类中添加shootBy方法,该方法的参数为子弹类型。

下图是以蜜蜂为例,说明子弹被击中的算法。

代码如下:

/**敌人被子弹打,this:

敌人;

bullet:

子弹*/

publicbooleanshootBy(Bulletbullet){

//找出敌机的四个角的坐标

intx1=this.x;

intx2=this.x+this.width;

inty1=this.y;

inty2=this.y+this.height;

//找出子弹坐标

intx=bullet.x;

inty=bullet.y;

returnx>

x1&

&

x<

x2&

y>

y1&

y<

y2;

//判断子弹是否打中敌机

}

4.接口Enemy

实现该接口的类为敌人,如果子弹击中敌机,英雄机获取分数,因此该接口提供获取分数的方法,代码如下:

packageshoots;

publicinterfaceEnemy{

publicintgetScore();

}

5.接口Award

实现该接口的类表示奖励,如果子弹击中了蜜蜂,英雄机可以获取奖励,奖励分两种,可以是双倍活力或生命值,因此提供获取奖励类型的方法,代码如下:

publicinterfaceAward{

publicintDOUBLE_FIRE=0;

//火力值

publicintLIFE=1;

//命

/*获取奖励类型(0为火力;

1为命)*/

publicintgetType();

6.类Airplane,表示敌机

敌机属于飞行物,因此继承FlyingObject类,重写了父类的step方法,实现Enemy接口,敌机可以向下移动,因此有移动的速度作为属性,实现了敌机越界的判断方法,代码如下:

publicclassAirplaneextendsFlyingObjectimplementsEnemy{

privateintspeed=2;

publicAirplane(){

image=ShootGame.airplane;

width=image.getWidth();

height=image.getHeight();

x=(int)(Math.random()*(ShootGame.WIDTH-this.width));

y=-this.height;

publicintgetScore(){

return5;

publicvoidstep(){

y+=speed;

publicbooleanoutOfBounds(){

returny>

ShootGame.HEIGHT;

}

7.类Bee,表示蜜蜂

继承FlyingObject,重写了Step方法,实现Award接口,蜜蜂可以左右和向下移动,故含有移动速度的属性和越界的判断,代码如下:

importjava.util.Random;

publicclassBeeextendsFlyingObjectimplementsAward{

privateintxSpeed=1;

privateintySpeed=2;

privateintawardType;

publicBee(){

image=ShootGame.bee;

Randomrand=newRandom();

x=rand.nextInt(ShootGame.WIDTH-this.width);

awardType=rand.nextInt

(2);

publicintgetType(){

returnawardType;

x+=xSpeed;

y+=ySpeed;

if(x>

=ShootGame.WIDTH-this.width){

xSpeed=-1;

}

if(x<

=0){

xSpeed=1;

8.类Bullet,表示子弹

继承FlyingObject,重写了step方法,定义了越界的判断方法,代码如下:

publicclassBulletextendsFlyingObject{

privateintspeed=3;

publicBullet(intx,inty){

image=ShootGame.bullet;

this.x=x;

this.y=y;

y-=speed;

returny<

-this.height;

9.类Hero,表示英雄机

继承FlyingObject类,重写step方法,实现动态的飞行;

由于会发射子弹击中蜜蜂,所以可以获取双倍火力或生命值,因此该类含有双倍子弹的具体数量,生命值的数量;

另外该类代表的对象会和其他对象相碰撞,所以该类中定义了一个判断撞击的方法hit()来实现对撞击范围的判断;

还对越界的判断返回值固定为false,是一个boolean的值,表示永不越界;

在该类中含有一个构造方法用于初始化数据;

moveTo方法用于处理鼠标位置:

英雄机的中心点;

关键代码是实现飞机动态效果和撞击的判断:

图示:

撞击的判断

/**重写step()*/

publicvoidstep(){//10毫秒走一次

image=images[index++

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2