admin管理员组

文章数量:1535877

2024年1月13日发(作者:)

基于JAVA的雷电小游戏设计与实现

摘 要

SWT 是Standard Widget Toolkit)即标准小窗口工具箱,是一个GUI开源框架,著名的IDE eclipse就是用这门技术开发的。是IBM公司推出的一种在Eclipse中使用的集成开发环境,SWT提供可移植的API,并与底层本机OS GUI平台紧密集成,它是一个与本地窗口系统集成在一起的小部件集和图形库。这款雷电游戏是一款风靡全球的游戏,运行程序后允许用户选择执行选项菜单。本设计主要实现的功能是让飞机能向4个方向移动,并且打出子弹,子弹击中敌人,子弹和敌人同时消失,产生效果,能智能的移动并且打出子弹。

这款游戏使用Java做出的小型游戏,也是较为经典的游戏之一,基本电脑上可以见到这款游戏,并用Java对游戏的界面布局、画面设计进行了设计,并实现一个富有娱乐性、稳定的小型游戏。

本论文介绍了Eclipse,对Eclipse的开发环境进行简单的描述,然后对游戏的需求做了一些简单的分析;说明了游戏的设计和实现过程,展示了一些游戏界面,对一部分内容进行了测试,也达到预期目标。

1 页 共 22

第一章

JAVA语言与应用 ............................................ 2

1.1

JAVA语言简介 ............................................. 5

1.2

ECLIPSE开发环境 .......................................... 5

1.3

SWT ...................................................... 7

第二章

需求分析 .................................................. 7

2.1

游戏设计的需求分析 ....................................... 7

2.1.1技术可行性 ......................................... 8

2.1.1功能需求 ........................................... 8

2.1.2本系统的现实意义 ................................... 9

2.2

系统运行环境 ............................................. 7

第三章

游戏的详细设计 ............................................ 8

3.1

界面功能设计 ............................................. 8

3.2

系统的实现 ............................................... 9

第四章

程序的实现 ............................................... 12

4.1程序实现 ................................................ 12

4.2界面实现 ................................................. 15

第五章

测试运行 ................................................. 15

5.1游戏功能测试 ............................................ 15

5.2游戏新开始功能测试 ...................................... 16

5.3游戏暂停/继续功能测试 ................................... 17

5.4游戏帮助功能测试 ........................................ 18

总结 ............................................................ 19

参考文献 ........................................................ 21

致谢 ........................................................... 211

2 页 共 22

前言

第一章 JAVA语言与应用

1.1 JAVA语言简介

Java编程语言风格十分接近C++语言,继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针,改以引用取代,同时移除原C++与原来运算符重载,也移除多重继承特性,改用接口取代,增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动拆装特性。太阳公司对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释式、健壮、安全和系统无关、可植入、高性能、多线程和动态的语言。”

Java不同于一般的编译语言和解释语言。它首先将源代码编译成节码(bytecode),然后依赖各种不同于平台的虚拟机来解释语言行子节码,从而实现了“一次编译、到执行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.24发布后。Java的C#语言执行速度有了大幅提升。

大家想一想,在PC下用windows编写的程序能够不做修改就直接拿到UNIX系统上运行吗?显然是不可以的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的程序是不能够直接放到另外的计算机硬件上执行的,至少要做移植工作。要想让程序能够在不同的计算机上能够运行,就要求程序设计语言是能够跨越各种软件和硬件平台的,而java满足了这一需求。

Sun公司绝没想到本想用于消费电子产品开发的编程语言却率先在网络中得到了广泛应用,但是也可以说是"东方不亮西方亮",正是因为java语言在设计目标上的正确性使得java语言"是金字总会发光的"。C语言是面向过程的语言,也是使用率非常高的语言;第

3 页 共 22

而面向对象的思想引入到编程语言之后,C语言就被改造成为面向对象的C++语言,得到了广泛的应用。但是C++语言必须兼容C语言,因此C++语言是面向过程和面向对象混合的语言。

java语言产生于C++语言之后,是完全的面向对象的编程语言,充分吸取了C++语言的优点,采用了程序员所熟悉的C和C++语言的许多语法,同时又去掉了C语言中指针、内存申请和释放等影响程序健壮性的部分,可以说java语言是站在C++语言这个"巨人的肩膀上"前进的。

java语言的一个目标是跨平台,因此采用了解释执行而不是编译执行的运行环境,在执行过程中根据所在的不同的硬件平台把程序解释为当前的机器码,实现跨平台运行。而动态下载程序代码的机制完全是为了适应网络计算的特点,程序可以根据需要把代码实时的从服务器中下载过来执行,在此之前还没有任何一种语言能够支持这一点。

任何事物的产生既有必然的原因也有偶然的因素,java语言的出现也验证了这一点。1991年,美国Sun Microsystems公司的某个研究小组为了能够在消费电子产品上开发应用程序,积极寻找合适的编程语言。消费电子产品种类繁多,包括PDA、机顶盒、手机等等,即使是同一类消费电子产品所采用的处理芯片和操作系统也不相同,也存在着跨平台的问题。当时最流行的编程语言是C和C++语言,Sun公司的研究人员就考虑是否可以采用C++语言来编写消费电子产品的应用程序,但是研究表明,对于消费电子产品而言C++语言过于复杂和庞大,并不适用,安全性也并不令人满意。于是,Bill Joy先生领导的研究小组就着手设计和开发出一种语言,称之为Oak。该语言采用了许多C语言的语法,提高了安全性,并且是面向对象的语言,但是Oak语言在商业上并未获得成功。时间转到了1995年,互联网在世界上蓬勃发展,Sun公司发现Oak语言所具有的跨平台、面向第

4 页 共 22

对象、安全性高等特点非常符合互联网的需要,于是改进了该语言的设计,最终,Sun公司给该语言取名为Java语言,造就了一代成功的编程语言。

与传统型态不同太阳公司在推出Java时就将其作为开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言群体的力量而非公司的力量”是太阳公司的口号之一,并获得广大软件开发商的认可。此外,微软公司后来推出了与之竞争的NET平台以及模仿Java的C#语言。

1.2 Eclipse开发环境

Eclipse框架的这种灵活性来源于其扩展点.它们是在XML中定义的已知接口,并充

当插件的祸合点.扩展点的范围包括从用在常挽表述过滤器中的简单字符串,到一个Java类的描述.任何Eclipse插件定义的扩展点都能够被其它插件使用,反之,任何Eclipse插件也可以遵从其它插件定义的扩展点.除了解由扩展定义的接口外,插件不知道它们通过扩展点提供的服务将如何被使用.

Eclipse的最大特点是它双胞胎接受由Java开发者自己编写的开放源代码插件,这类似于微软公司的Visual Studio和Sun公司Net Bean:平台.Eclipse为工具开发商提供了更好的灵活性,使他们能更好地控制自己的软件技术.Eclipse软件是一款非常受欢迎的java开发工具,国内使用它的java开发人员越来越多。

1.3 SWT

SWT(Standard Widget Toolkit)即标准小窗口工具箱,是一个GUI开源框架,著名的IDE eclipse就是用这门技术开发的。是IBM公司推出的一种在Eclipse中使用的集成开发环境,SWT提供可移植的API,并与底层本机OS GUI平台紧密集成,它是一个与本地窗口系统集成在一起的小部件集和图形库。SWT由JNI(Java Native Interface,Java

本机接口)调用操作系统的内部API,因此运行速度快,能够获得与操作系统的内部应用第

5 页 共 22

程序相同的外观。

不够成熟和稳定。SWT因其设计上的一些缺陷,如资源管理,Windows友好等,被认为是不稳定的。它可以在Windows上表现得很好,但在其他操作系统上,它经常是不稳定且容易崩溃的。这很大程度上是因为它把资源管理交给开发者来处理,而并不是所有的开发人员能够正确地处理这些。不可扩展。.不在JRE的标准库中。因此必须将它和程序捆绑在一起,并为所要支持的每个操作系统创建单独的安装程序。

6 页 共 22

第二章 需求分析

2.1 游戏设计的需求分析

2.1.1经济可行性

设计的开发是基于JDK1.6和eclipse3.6的,因为它们都是免费而且开源的软件,所以实现本设计的 成本就有所降低。随着计算机、网络通讯和信息技术的迅猛发展以及人类精神生活品质的提高,国际、国内的各种各样的大型综合游戏网站如雨后春笋般的发展起来。一款好的游戏带来的经济效益可以说是不可 估量的,比如现在网上最流行的魔兽世界、征途等大型网络版游戏。本游戏可单机运行。

2.1.2功能需求

这个项目为了满足玩家在视觉上的效果,在游戏界面上添加了一些唯美的图片,从而是游戏能从视觉上更加吸引玩家,并设置了暂停、继续按钮,以方便玩家更方便的玩这个游戏。

主界面就是我方与敌方的对决,还有我方和敌方的移动方式,然后就是子弹的生成,

然后是我方与敌方的对战结果。

2.1.3操作可行性

本设计是一个网络版的游戏平台,只是模拟了现在社会上的一些网络游戏的部分功能, 所以操作简易,玩家不需要了解内部流程,只是和一般其他的网络游戏一样的操作即可开始游戏。相对于开发者而言,整个系统形成主要由JDK5.0虚拟环境和eclipse3.2共同完成,无需更多复杂的工具和服务器支持。

7 页 共 22

2.2系统运行环境

(1)网络服务器操作系统:Windows 系统;

(2)开发工具:eclipse3.6.2;

(3)运行环境:J2SDK 1.6;

(4)编程语言:Java 语言;

第三章 游戏的详细设计

3.1 界面功能设计

系统的总体设计通过其所需功能分为三大项,分别是:游戏,暂停/继续和帮助。

1.游戏:

游戏分为2小项:开始新游戏、退出游戏。

2.暂停/继续:

暂停/继续分为2小项:暂停、继续。

3.帮助:

帮助是告诉玩家如何操作。

界面如下图1-1所示:

8 页 共 22

图1-1主界面

设计如下:

public void update(Graphics g) {

}

e(Fram_width, Fram_length); // 设置界面大小

ation(280, 50); // 设置界面出现的位置

le("雷电小游戏");// 窗口界面的说明

screenImage = Image(Fram_width, Fram_length);

Graphics gps = phics();

ct(0, 0, Fram_width, Fram_length);/ 设置界面长度 宽度

age(screenImage, 0, 0, null);

功能模块说明:

1、功能模块说明:可以实现左右上下移动、发射子弹。空格键打出子弹。 智能的敌方,随机移动,随机打出子弹。 死亡。加入飞机、子弹、其他的图片,使界面看上去更美观。

2、功能模块说明:按下开始新游戏会开始一盘新的游戏,按下退出可以退出游戏,按下暂停可以暂停,如果想继续游戏按下继续就可以继续上一盘游戏。

3、关于功能模块说明:在帮助中有 操作提示。

3.2 系统的实现

算法方面的问题 起初连接数据库的语句全部都是在调用页一句一句的书写,这样一来不仅做了很多 重复的工作,而且使页面看起来很繁琐,经过翻阅书籍发现可以将连接第

9 页 共 22

数据库的语句统 一放到一个页面里,然后在需要调用连接数据库语句的页面调用就可以了,这样既节省 时间,又避免出现书写错误。

字符串方面的问题 发现对字符串的比较存在大小写之分,所以要先将要比较 的两个字符串转化成相同的格式或者强行限制输入的字符串大小写相同,然后再进行比 较;如果查询的结果为空,那么应该给出提示信息,这样才能真正做到人机界面友好。

主界面功能实现 在此模块内,用户如果想使用组内其他成员的功能时, 主界面主要由主界面主要由一个面版,五个按钮、一个界面、和一个菜单栏组成。按下相应的键。界面会做出相应的动作。 主 要 方 法 包 括 : actionPerformed()为接口方法,处理

ActionEvent 事件。ActionListenerA ,()为接口方法,处理Frame事件。

部分设计如下:

1、Hero 表示玩家的类

玩家的属性

Fram_width=400

Fram_length=630

页面的静态全局宽度

页面的静态全局长度

X轴坐标

Y轴坐标

游戏结束方法,做清理工作和相应的提示

x

y

voidgameOver

(Graphics g)

boolean isLive()

判断是否存活

void setLive(boolean live)

设置存活状态,以便从新开始游戏

2、FlyingObject

FlyingObject对象

width = 30

length = 30

getX

getY

飞机的全局静态宽度

飞机的全局静态长度

X轴坐标

Y轴坐标

10 页 共 22

boolean live

GameFrame tc

move

random

飞机是否存活,初始化为活着的

GameFrame对象

用于控制飞机的方向

随机数,用于控制敌方出现数

3、GameFrame飞机用户类,继承Frame,实现PaintThread

private class PaintThread implements Runnable {//设置线性属性

public void run() {

// TODO Auto-generated method stub

while (printable) {

repaint();

try {

(50);

} catch (InterruptedException e) {

tackTrace();

}

}

}

}

4、 GameCanvas用于与GameFrame中的线性相互关联

public void run() {

long time = 0;

while (true) {

if(!ble){//与另个类关联

Try {

(50);

// TODO Auto-generated catch block

tackTrace();

}

} catch (InterruptedException e) {

}

5、boss的出现

if (score > 2000 && bossBlood >= 0) {

if (hx > 150 && hx < 240 && hy > 50 && hy < 140) {

if (isCovered) {

}

money += 99;//击杀能得到的金币

score += 100;//击杀能得到的分数

bossBlood -= 40;//boss的血量

11 页 共 22

((i));//设置敌方boss的移动

isCovered = false;

}

}

}

private void heroBullet2VSEnemy(int i, long time) {

int hx = (i).getX();//boss出现的位置

int hy = (i).getY();

if (hy < 0) {

}

((i));

return;

第四章 程序的实现

4.1程序实现

本程序是用Java编写的小游戏,名为雷电。可以进行开始新游戏、继续、暂停、帮助的多功能设计,图形用户界面要用到Java课程里的第六章的知识,需要用到抽象窗口工具集即AWT和Swing来设计实现,由于游戏需要有功能按键来控制游戏的重新开始,退出,暂停,帮助等,所以在实现过程中,设计菜单项。

本设计是一个网络版的游戏平台,只是模拟了现在社会上的一些网络游戏的部分功能, 所以操作简易,玩家不需要了解内部流程,只是和一般其他的网络游戏一样的操作即可开始游戏。相对于开发者而言,整个系统形成主要由JDK5.0虚拟环境和eclipse3.2共同完成,无需更多复杂的工具和服务器支持。

本系统开发过程是利用Java编程语言和eclipse集成开发环境配合使 用来实现的,它是基于TCP/UDP协议和Socket编程技术,建立以C/S为结构模式的娱乐性游戏平台。还有是对一些技术理论,J2SE 框架,Java 语言,系统 运行所支持的操作系统,联机通信机制及 Java 图形编程等理论做了简单的实现。

4.2界面实现

本节展示雷电刚刚进入游戏后的界面,窗口上有本游戏的名字“雷电”。

12 页 共 22

雷电游戏界面如下图所示:

图1游戏首页

核心代码如下:

public static final int Fram_width = 400; // 静态全局窗口大小

public static final int Fram_length = 630;

e(Fram_width, Fram_length); // 设置界面大小

ation(280, 50); // 设置界面出现的位置

this

.setTitle("雷电小游戏");

游戏开始后的界面,通过↓ → ↑ ←四个键控制我方的战机在屏幕内移动,来进行攻击或躲避敌方发射的子弹,防止我方的战机死亡,可以通过控制空格键来发射子弹,对敌方造成最大伤害。

游戏的流程图程序开始运行后首先要初始化游戏,然后进行一次成功与否的判断,若成功了程序进入下一个模块,若没有成功,重新返回初始化。

再次进行初始化游戏。成功后进入主控模块,直至用户停止游戏,程序结束。

游戏开始的流程图如下:

开始

13 页 共 22

初始化

是否成功

进入主控模式

结束

14 页 共 22

第五章 测试运行

5.1游戏功能测试

运行程序,弹出运行窗口。若没有显示出来,

则程序错误。如图

图1-2测试界面启动

设置如下:

public static final int Fram_width = 400; // 静态全局窗口大小

public static final int Fram_length = 630;

uBar(jmb);// 菜单Bar放到JFrame上

ible(true);

e(Fram_width, Fram_length); // 设置界面大小

ation(280, 50); // 设置界面出现的位置

this

.setTitle("雷电小游戏");

15 页 共 22

}

dowListener(new WindowAdapter() { // 窗口监听关闭

public void windowClosing(WindowEvent e) {

(0)

设置主界面的宽度、高度,给主界面加标题,设置主界面菜单。

5.2游戏新开始功能测试

运行程序后,在菜单栏单击游戏,若显示出下拉菜单就会出现开始新游戏/退出,则程序运行成功。若点击无反应,则程序错误。如图

图1-3测试开始按钮

详细设置如下:

jmb = new MenuBar();

jm1 = new Menu("游戏");

t(new Font("TimesRoman", , 12));// 设置菜单显示的字体

jmi1 = new MenuItem("开始新游戏");

jmi2 = new MenuItem("退出");

16 页 共 22

t(new Font("TimesRoman", , 12));// 设置菜单显示的字体

t(new Font("TimesRoman", , 12));// 设置菜单显示的字体

(jmi1);//加入下拉菜单

(jmi2);//加入下拉菜单

if (ionCommand().equals("NewGame")) {

printable = false;

Object[] options = { "确定", "取消" };

int response = tionDialog(this, "您确认要开始新游戏! _OPTION, ON_MESSAGE, null,

", "",

options, options[0]);//弹出窗口

if (response == 0) {

printable = true;

new GameFrame();

e();

printable = true;

} else {

new Thread(new PaintThread()).start(); // 线程启动

}

设置主界面的下拉菜单,设置下拉菜单的字体大小,把下拉菜单加入菜单栏中,当点击菜单时,会产生相应的变化。

5.3游戏暂停/继续功能测试

运行程序后,点击暂停按钮,会暂停游戏,

若没有弹出,则程序错误。若成功在点击继续按钮,游戏会继续,

若继续就行,则程序正确,反之则程序错误。如图

17 页 共 22

图1-4测试暂停/继续按钮

设计如下:

jm2 = new Menu("暂停/继续");;

t(new Font("TimesRoman", , 12));// 设置菜单显示的字体

jmi3 = new MenuItem("暂停");// 设置下拉菜单

jmi4 = new MenuItem("继续");

t(new Font("TimesRoman", , 12));// 设置显示的字体大小

t(new Font("TimesRoman", , 12));// 设置显示的字体大小

else if (ionCommand().endsWith("Stop")) {

if (!printable) {

}

printable = true;

printable = false;// 线性关闭

} else if (ionCommand().equals("Continue")) {

设置主界面的下拉菜单,设置下拉菜单的字体大小,把下拉菜单加入菜单栏中,当点击菜单时,会产生相应的变化,通过线性来控制界面的暂停。

5.4游戏帮助功能测试

运行程序后,点击帮助按钮,弹出帮助信息,

18 页 共 22

若没有弹出,则程序错误。如图

图1-5测试说明按钮

设计如下:

jm3 = new Menu("帮助");

t(new Font("TimesRoman", , 12));// 设置菜单显示的字体

jmi5 = new MenuItem("游戏说明");

t(new Font("TimesRoman", , 12));;// 设置显示的字体大小

if (ionCommand().equals("help")) {

printable = false;

ssageDialog(null, "用→ ← ↑ ↓控制方向,空格键发射!",

"提示!", ATION_MESSAGE);//弹出窗口

ible(true);

printable = true;

new Thread(new PaintThread()).start();

} // 线程启动

设置主界面的下拉菜单,设置下拉菜单的字体大小,把下拉菜单加入菜单栏中,当点击菜单时,会产生相应的变化,通过线性来控制界面的暂停。

19 页 共 22

总 结

本次设计已是大学最后一次对专业知识的综合实践活动,同时也是我所做的工作量最大的一次作业, 因此从一开始我对本次毕业设计就给予了高度重视。从选题、收集资料、学习相关技术到实际编程,我都 一丝不苟的对待了。当然其间我也走了不少弯路,有时甚至需要推倒重来,但同时我也多次体会过克服困 难后的成就感。通过实习我不仅领会了基本的思考方式,掌握了很多的通用方法,而且还明白了许多道理。这次作品的完成是我独立完成的,这就需要更多的努力, 发挥丰富的想象力与创新意识。我会继续努力,学习更多的知识以弥补自己的不足。

通过这次设计我也学到了很多知识,从选题、收集资料、学习相关技术到实际编程,我都 一丝不苟的对待了。当然其间我也走了不少弯路,有时甚至需要推倒重来,但同时我也多次体会过克服困 难后的成就感。 通过这次毕业设计以及撰写本毕业论文, 我学会了一些编程技巧, 而且对调试的错误有进一步的认识, 有时候就一个小小的语法错误就会导致程序调试不通过。所以每个字符,每句程序都要认真对待。使用不 同的编程环境,其效率完全不一样,所以我选择了 Eclipse,它自动找错/纠错功能、Debug 调试和代码自动 生成等一些重要的功能大大提高了我的设计效率。对于设计论文,一定要注意格式,认识事情都有它的规则、规范,不能按个人喜好随意改变。同时也是我所做的工作量最大的一次作业,

20 页 共 22

参考文献

[1] 陈家兴.Java图形用户界面设计与实例,清华大学出版社2004.

[2] 赵池龙.实用软件工程(第2版),清华大学出版社2006.

[3] 李尊朝.Java语言程序设计(第二版),清华大学出版社2008 .

[4] (美)梁 著.Java语言程序设计,清华大学出版社2008.

[5] Java开发入门与项目实战 杨洪雪等编著 ,清华大学出版社

[6] 贾蓉生.Java典型应用彻查1000例.图形与网络游戏开发,清华大学出版社 2009

[7] 李兴华.开发实战经典,清华大学出版社 2009.

21 页 共 22

致谢

首先我要感谢我的指导老师冯国军老师,感谢他在整个毕业设计过程中的指导,为我提示游戏设计的 逻辑思路;为我提供参考书籍;为我提供了技术方面资料,而且在遇到问题的时候,总是鼓励我去解决;尤其在论文格式的修改方面,每次遇到难题,我最先做的就是向冯老师寻求帮助,而冯老师每次不管忙或闲,总会抽空来找我面谈,然后一起商量解决的办法。冯老师平日里工作繁多,但在本论文我做毕业设计的每个阶段,从选题到查阅资料,论文提纲的确定,中期论文的修改,后期论文格式调整等各个环节中都给予了我悉心的指导。这几个月以来,冯老师不仅在学业上给我以精心指导,同时还在思想给我以无微不至的关怀,在此谨向冯老师致以诚挚的谢意和崇高的敬意。 同时,本篇毕业论文的写作也得到了同学的热情帮助。感谢在整个毕业设计期间和我密切合作的同学,和曾经在各个方面给予过我帮助的伙伴们,在此,我再一次真诚地向帮助过我的老师和同学表示感谢。

22 页 共 22

本文标签: 游戏语言设计界面程序