admin管理员组

文章数量:1531267

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

毕业设计

炸弹人游戏的设计与实现

韩天鸣

吉林建筑大学

2015年6

毕业设计

炸弹人游戏的设计和实现

学 生:韩天鸣

指导教师:岳俊华

专 业:计算机科学与技术

所在单位:计算机科学与工程学院

答辩日期: 2015 年 6 月 19 日

吉林建筑大学毕业设计(论文)

摘 要

J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。它实际上是一系列规范的集合,由JCP 组织制定相关的Java

Specification Request(JSR)并发布。

本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计,开发了一款炸弹人游戏,该游戏主要分为场景类、子弹类、炸弹人类、敌方炸弹人类、我方炸弹人类等几个类,玩家通过输入IP获得连接,能够实现敌方炸弹人和子弹的智能化运行,添加了草坪,河流,普通墙和钢墙,并给其赋予了自己特有的功能,同时游戏中还包含了记分系统,特殊武器的加入,以及一些帮助说明信息,另外,此游戏中不同的是在游戏中添加了通话功能,在游戏中使用了套接字Socket来完成客户端与服务器端的连接,采用了接口技术,是一个类可以实现多个接口,克服了Java单继承缺点。采用了线程的使用,充分利用和发挥了处理机与外围设备并行工作的能力。

本软件接受了网络游戏的软硬件特性,J2SE的相关技术及本程序的分析和功能的具体实现,游戏界面美观,操作简单,功能齐全,是广大游戏爱好者都喜欢的一款网络游戏,具有一定的复杂性和可玩性。

关键字:J2SE;C/S;炸弹人游戏-I-

吉林建筑大学毕业设计(论文)

ABSTRACT

J2SE Java called Java standard version or Java standard platform. The SDK

provides standard J2SE Java development platform. Using this platform can card hair

Java desktop applications and low-end server application, also can develop a Java

Applet program. It is actually a series of standard set by the JCP organization, and

make the relevant Specification that (JSR) Java and release.

This game through the summary and analysis of the game development process

and JAVA code function design, develop a new tank war game, this game mainly

divided into the scene of classes, bullets, tank type, the enemy tanks class, our tanks

several kind of players enter IP get connected by enemy tanks, can realize the

intellectualized operation and bullets, added the lawn, rivers, common wall and steel

wall, and give its endowed with its own peculiar function, but the game also contains

the scoring system, special weapons to join, and some help explain information, in

addition, the game is different in the game adds calls in the game use function, the

Socket Socket to complete the client and the server connection, adopted interface

technology, is a class can implement multiple interfaces, to overcome the

shortcomings. JAVA single inheritance By the use of the thread, fully used and

played a processor and peripherals parallel work ability.

This software accepted the network game's software and hardware characteristics,

the relevant technology and the J2SE Java program analysis and function of the

specific implementation, game interface aesthetics, simple operation, complete

function, is broad gamers like one of network game, has some of the complexity and

can play sex.

Key words: J2SE Java;C/S;Boom man games

-II-

吉林建筑大学毕业设计(论文)

目 录

摘 要 ............................................................ I

ABSTRACT ................................................................................................................. II

绪 论 ........................................................................................................................... 1

第1章 开发工具介绍.................................................................................................. 2

1.1网络游戏介绍 ................................................... 2

1.1.1网络游戏特征 ................................................ 2

1.1.2网络游戏的类型 .............................................. 3

1.1.3 Java语言的特点 ............................................. 4

1.1.4中国网络游戏市场现状 ........................................ 5

1.2 J2SE简介 ...................................................... 5

1.2.1什么是 5

1.2.2 J2SE平台体系结构 ........................................... 6

1.2.3 J2SE体系结构优势 ........................................... 6

1.2.4 J2SE编译运行的过程 ......................................... 7

1.2.5发环境及相关技术的介绍 ...................................... 7

1.2.6网络游戏开发概述 ............................................ 8

1.3绘图与混淆器 ................................................... 9

1.3.1提供低级绘制的Canvas类 ..................................... 9

1.3.2 Graphics类 ................................................. 9

1.3.3 JPG格式 .................................................... 9

1.3.4有关绘图的一些技术 ......................................... 10

1.3.5混淆器(Obfuscator)的使用 ................................... 10

第2章 炸弹人大战游戏的需求分析 ....................................................................... 11

2.1炸弹人大战游戏的任务概述 ...................................... 11

2.2本程序需解决的有关程序问题 .................................... 11

2.3使用对象 ...................................................... 12

2.4游戏功能 ...................................................... 12

2.5建议软硬件配置 ................................................ 12

第3章 总体设计 ....................................................................................................... 13

3.1炸弹人大战游戏的总体功能............................................................................. 13

第4章 算法设计和主要技术 ................................................................................... 14

4.1炸弹人大战生成算法 ............................................ 14

4.1.1子弹产生的算法 ............................................. 14

4.1.2敌人炸弹人产生的算法 ....................................... 15

4.1.3爆炸效果产生算法 ........................................... 15

4.1.4大本营产生算法 ............................................. 16

4.1.5面板产生算法 ............................................... 17

4.1.6草坪产生算法 ............................................... 18

4.1.7河流产生算法 ............................................... 19

4.1.8普通墙的产生算法 ........................................... 19

-II-

吉林建筑大学毕业设计(论文)

4.1.9钢墙的产生算法 ............................................. 19

4.1.10主机服务器建立连接算法 .................................... 20

4.2功能实现算法 .................................................. 20

4.2.1子弹功能算法 ............................................... 20

4.2.2炸弹人功能算法 ............................................. 20

4.2.3面板功能算法 ............................................... 20

第5章 炸弹人大战游戏的详细设计 ....................................................................... 22

5.1服务器的类 .................................................... 22

5.1.1主类ServerView类 .......................................... 22

5.1.2服务器模型ServerModel类 ................................... 23

5.1.3子弹属性bullet类的实现 .................................... 23

5.1.4轰炸类bomb类的实现 ........................................ 24

5.1.5面板类drawingPanel类的实现 ................................ 24

5.1.6敌人炸弹人enemy类的实现 ................................... 25

5.1.7游戏关数level类 ........................................... 25

5.1.8游戏者player类的实现 ...................................... 25

5.2客户端的类 .................................................... 25

5.2.1子弹属性bullet类的实现 .................................... 25

5.2.2客户端模型ClientModel类的实现 ............................. 26

5.2.3面板类drawingPanel类的实现 ................................ 28

5.2.4说明控制类instructionHandler类的实现 ...................... 28

5.3服务器类结构图 ................................................ 31

5.4客户端类结构图 ................................................ 31

第6章 游戏测试 ....................................................................................................... 33

6.1 测试方法...................................................... 33

6.2 部分测试用例.................................................. 33

6.2.1系统启动测试 ............................................... 33

6.2.2子弹发射测试 ............................................... 33

6.2.3玩家移动测试 ............................................... 34

6.2.4信息发送测试 ............................................... 34

6.2.5游戏暂停和继续的测试 ....................................... 34

6.2.6游戏胜利与失败的测试 ....................................... 35

6.3 测试分析和小结................................................................................................ 35

第7章 用户手册 ..................................................................................................... 36

7.1炸弹人大战运行环境配置 ........................................ 36

7.1.1 软件配置................................................... 36

7.1.2 硬件配置................................................... 36

7.2“炸弹人大战”游戏规则......................................... 36

7.3“炸弹人大战”游戏操作......................................... 36

总 结 ........................................................... 37

参考文献 ......................................................... 38

致 谢 ........................................................... 39

-II-

吉林建筑大学毕业设计(论文)

绪 论

自从Java问世以来,Sun公司已经成功的将Java平台技术推广到台式计算机与服务器。

Java是一门很优秀的编程语言,具有面向对象,与平台无关,安全,稳定和多线程等特点,是目前软件设计中极为健壮的编程语言。Java不仅可以用来开发大型的应用程序,而且特别适合于Tnternet的应用开发。Java确实具备了“一次写成,处处运行”的特点,Java已成为网络时代最重要的编程语言之一。Java语言的迅猛发展使得Java实现的应用产品遍及商务应用,短信获取,英汉互译,游戏娱乐等多媒体领域,Java语言原先的开发目的与市场的需求不某而和,在不久的将来,Java将会成为最热门的语言。

将Java语言引入,作为一种通用的开发标准,并且也已经成为应用程序开发的标准,国际大公司如Nokia,Motorola及Siemens等所设计的手机内都加入Java程序的支持,可见在不久的将来,Java将成为移动设备上最热门的语言。

本课题的研究目标:实现在C/S模式下,进行的一场炸弹人大战游戏。

本课题的研究内容:该游戏的研究内容涉及到服务器端主机的建立,客户端客户机的连接,进入游戏后地图是如何载入的,子弹发射时是如和运作的,即子弹打中了不同的物体会给出不同的效果,还有炸弹人吃到特殊图标,即所谓的超级武器时,游戏中会产生相应的反应,另外,还包括玩家在游戏中是如何互相通信的,我方炸弹人获得胜利后是如何显示的,我方大本营被敌人攻破或是游戏玩家的生命值为0时,系统又会做出怎样的处理,当玩家成功的攻破当前关时,下一关的地图又会如何显示出来,还有就是当炸弹人行驶到地图边沿时,如何改变行驶方向的,敌人的炸弹人又是如何实现子弹的发射与自能化的。

本课题的方法和手段:本游戏采用的是基于J2SE标准平台的java编程技术,涉及到接口,套接字Socket,线程的使用,以及绘图方法Graphics()方法的使用。

随着网络的日益普及、Java功能在网络中的实现,Java应用程序产生的网络增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品,游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。随着技术对游戏经验的促进,游戏市场持续增长。商业IT革命为我们节省了时间力之一。计算机游戏和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。甚至在当今困难的经济时代,游戏仍保持快速增长,他仍然是盈利行业的组成部分。Java开发者应该注意到这里蕴藏着的巨大的商机。

-1-

吉林建筑大学毕业设计(论文)

第1章 开发工具介绍

1.1网络游戏介绍

1.1.1网络游戏特征

网络游戏是利用TCP/IP协议,以互联网为依托,可以多人同时参与的游戏项目,它是通过网络实现的一种新的人机和人际互动形式。网络游戏包括单机游戏,模拟器支持的视频等。

网络游戏秉承了传统文化丰富的文化元素,有着极大的文化内涵,它是信息的情趣化表征与传递。网络游戏中凸显出的艺术性极大地折射出其丰富的文化底蕴。网络游戏可以向学生展示不同的文化背景,把学生置于缤纷的文化氛围中,去体验和汲取文化精髓。游戏中所勾画出的虚拟世界也有其特定的世界观和价值观,好的网络游戏同样可以向学生传递积极的世界观和价值观。

第一代网络游戏

游戏特征:1、非持续性,机器重启后游戏的相关信息即会丢失,因此无法模拟一个持续发展的世界;2、游戏只能在同一服务器/终端机系统内部执行,无法跨系统运行。

第二代网络游戏

游戏特征:1、网络游戏出现了“可持续性”的概念,玩家所扮演的角色可以成年累月地在同一世界内不断发展,而不像PLATO上的游戏那样,只能在其中扮演一个匆匆过客。2、游戏可以跨系统运行,只要玩家拥有电脑和调制解调器,且硬件兼容,就能连入当时的任何一款网络游戏。

第三代网络游戏

游戏特征:“大型网络游戏”(MMOG)的概念浮出水面,网络游戏不再依托于单一的服务商和服务平台而存在,而是直接接入互联网,在全球范围内形成了一个大一统的市场。

第四代网络游戏

游戏特征:在第四代网络游戏代表作中,大型网络游戏也占有绝大多数的比重。素有“中国版奇迹”之称的醉逍遥的崛起为第四代网游带来了又一片春天。醉逍遥是原网禅团队与中国某研发团队联合创制,在安全防护和玩法创新上做了卓著的成绩,一直都深受玩家青睐,这也是第四代网游之所以被成为新生代网游的原因。

在网络游戏中有一系列的规范或规则,为玩家设定了参与游戏的基本结构,作为玩家必须遵守这些规则,才能在游戏中保持自己的位置。

-2-

吉林建筑大学毕业设计(论文)

网络游戏具有强烈的挑战性,而且这种挑战性对学生具有很大的吸引力。在虚拟的网络游戏中,学生会遇到许多困难,必须想方设法去克服困难,出奇制胜,发挥最大的聪明才智,才能控制复杂的局面,并最终到达光明的彼岸。

1.1.2网络游戏的类型

从种类方面分类

1、棋牌类休闲网络游戏:即登陆网络服务商提供的游戏平台后,进行双人或多人对弈,如纸牌、象棋等,提供此类游戏的公司主要有腾讯、联众、新浪等。

2、网络对战类游戏 :即玩家通过安装市场上销售的支持局域网对战功能游戏,通过网络中间服务器,实现对战,如CS、星际争霸、魔兽争霸等,主要的网络平台有盛大、腾讯、浩方等。

3、角色扮演类大型网上游戏:即RPG类,通过扮演某一角色,通过任务的执行,使其提升等级,等到宝物等,如大话西游、传奇等,提供此类平台的主要有盛大等。

从游戏模式方面分类

1、ACT=动作游戏;

2、AVG=冒险游戏;

3、PUZ=益智游戏;PUZ原来指用于培养和开发儿童智力的拼图游戏,之后概念得到扩展,引申为各类益智休闲游戏。《俄罗斯方块》是其中最为经典的作品,《宝石方块》、《旋转泡泡球》、《LUMINES》等也是大家喜闻乐见的益智游戏。本次分类会将益智游戏的范围进一步扩充,《脑白金》、《找碴博物馆》等原本归于ETC类型的健脑类游戏,也一并归为益智游戏类型。其他归为益智类的还有少量以智力问答为核心内容的游戏;

4、CAG=卡片游戏;

5、FTG=格斗游戏;格斗又成“对战格斗”,尽管也有2D和3D格斗之分,但其概念与特征一直没有太多的变化,正统的FTG有体力槽、操作和出招方式、角色处于同一轴线以及讲究对抗与平衡相对统一的特点,因此不再拆分。《街头霸王》、《格斗之王》、《VR战士》、《铁拳》等都是玩家十分熟悉的格斗游戏。注意,像《任天堂全明星大乱斗》和一些动漫改编的乱斗游戏不具备格斗游戏的传统特征,因此均归为动作类游戏;

6、LVG=恋爱游戏;

7、TCG=养成类游戏;

8、TAB=桌面游戏;

9、MSC=音乐游戏;

-3-

吉林建筑大学毕业设计(论文)

10、SPG=体育游戏;

11、SLG=战略游戏;

12、STG=射击游戏;

13、RPG=角色扮演;

14、RCG=赛车游戏;竞速游戏俗称“赛车游戏”,因为其中大部分游戏需要驾驶车辆进行比赛,或对速度进行挑战。著名的赛车游戏系列有《GT赛车》、《头文字D》、《火爆狂飙》等。但并不是所有的竞速游戏驾驶的都是车辆,也有摩托艇、飞行器或是一些科幻色彩浓重的未来交通工具,比如《F-ZERO》、《反重力赛车》等。

1.1.3 Java语言的特点

1. 平台无关性

平台无关性是指Java能运行于不同的平台。Java引进虚拟机 原理,并运行于虚拟机,实现不同平台的Java接口之间。使 用Java编写的程序能在世界范围内共享。Java的数据类型与 机器无关,Java虚拟机(Java Virtual Machine)是建立在 硬件和操作系统之上,实现Java二进制代码的解释执行功能, 提供于不同平台的接口的。

2. 安全性

Java的编程类似C++,学习过C++的读者将很快掌握Java的精 髓。Java舍弃了C++的指针对存储器地址的直接操作,程序 运行时,内存由操作系统分配,这样可以避免病毒通过指 针侵入系统。Java对程序提供了安全管理器,防止程序的 非法访问。

3. 面向对象

Java 吸取了C++面向对象的概念,将数据封装于类中,利用类 的优点,实现了程序的简洁性和便于维护性。类的封装性、 继承性等有关对象的特性,使程序代码只需一次编译,然后 通过上述特性反复利用。程序员只需把主要精力用在类和接 口的设计和应用上。Java 提供了众多的一般对象的类,通 过继承即可使用父类的方法。在 Java 中,类的继承关系是单一的非多重的,一个子类 只有一个父类,子类的父类又有一个父类。Java 提供的 Object 类及其子类的继承关系如同一棵倒立的树形,根类 为 Object 类, Object 类功能强大,经常会使用到它及其 它派生的子类。

4. 分布式

Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容

-4-

吉林建筑大学毕业设计(论文)

易。

5. 键壮性

Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能。这些功能特征大大提高了开发Java应用程序的周期。Java提供: Null指针检测、 数组边界检测、 异常出口、 Byte code校验。

1.1.4中国网络游戏市场现状

中国网络游戏市场规模及预测:

于中国网络游戏市场规模部分的描述,其中有大量的数据及图表,均摘自一份调查报告 [8],阅读之后,我认为该调查报告符合统计学的理论,客观严谨具有较高的可行度。该报告主要采用了计算机网上联机的调查方法进行,通过在中国多家主要网站的主要频道投放网幅广告和文字链接广告,于2004年12月1日——12月31日期间,由用户主动参与填写问卷的方式,共收到调查问卷103341份,经处理排除无效问卷,并根据网民的男女性别比例[根据CNNIC于2004年7月公布的网民性别比例(男:女=6:4)]进行配额,对最终的样本问卷进行随机抽样,获得54975份样本。经过统计分析之后,该报告得出以下结论:

根据CNNIC的统计,2001年,中国上网人口仅为3370万。到2003年,上网人口已经接近了8000万,相比2002年增长了35%。报告认为至2004年末中国上网人口达到1.04亿。到2007年,中国上网人口将达到2.05亿。庞大的网民基数,以及巨大的增长潜力,将是中国网络游戏用户增长的根本基础。报告认为至2004中国网络游戏用户达到1976万,即有19%的中国网民为网络游戏用户,同时报告预测到2007年中国网络游戏用户将达3731万,在网民中所占比例为18%。同时,报告预计随着网络游戏产业的快速发展,网络游戏用户中付费用户的比例和数量将有所增长。根据我们的研究,2002年,国内收费网络游戏用户数为350万,到了2003年,收费用户数增长了一倍,达到710万。2004年,收费网络游戏用户为1130万,占网络游戏用户的57%。预计到2007年,中国收费网络游戏用户将达到2255万,占网络游戏用户60%。

1.2 J2SE简介

1.2.1什么是J2SE

J2SE 是SUN 公司针对桌面应用软件的编程推出的开发平台,与J2ME 和

-5-

吉林建筑大学毕业设计(论文)

J2EE 共同组成Java 技术的三个重要的分支。J2SE 实际上是一系列规范的集合,由JCP 组织制定相关的Java Specification Request(JSR)并发布,J2SE商业版本,标准版本 (Java2 Standard Edition) 定位在客户端,主要用于桌面应用软件的编程。 J2SE 包含那些构成Java语言核心的类。 比如:接口定义、输入/输出、网络编程。

1.2.2 J2SE平台体系结构

要精通J2SE,必须对J2SE的四大重要技术有深入的了解。具体分为:(1) Java

应用程序接口(Java API); (2) Java 虚拟机;(3) Java Class 文件格式; (4) Java

程序设计语言。J2SE的体系结构使得Java更适应于网络。其最大的两个优势就是:平台无关性和网络移动性。这一点在其体系结构的各个技术上都有体现。

1.2.3 J2SE体系结构优势

J2SE的体系结构使得Java更适应于网络。其最大的两个优势就是:平台无关性和网络移动性。这一点在其体系结构的各个技术上都有体现。

API的优势体现

Java API是运行库的集合,它提供了一套访问主机系统资源的标准方法。运行Java程序时,虚拟机装在.class文件所使用的Java API class文件,并和所有已近转载的动态库(本地方法)共同组成Java虚拟机运行的整个程序。Java API天生就和平台相关的。 不同平台的Java API和本地方法进行交互的方式可能不同,但是对Java应用程序的显示接口是完全一样的。这才保证了Java应用程序的平台无关性。

虚拟机的优势体现

和Java API一样,JVM是平台相关的。如果Java程序需要访问本地资源的话,Java虚拟机是一定要调用本地方法的。也正是应为JVM的存在,才导致了Java平台无关性的优势。

class文件的优势体现

Java编译器并不能将Java编译成底层的二进制指令,而是编译成一种与底层平台无关的中间格式文件(.class)。 通常情况下不同硬件平台或操作系统的二进制指令时不能通用的。而.class文件是可以运行在任何支持Java虚拟机的硬件和操作系统上的。另外,class文件设计紧凑,可以快速的在网络上传输。

程序设计语言的优势体现

Java在语言也体现出一定的平台无关性。比如所有的基本数据类型所占用的

-6-

吉林建筑大学毕业设计(论文)

字节大小都是固定的。另外Java语言也是一种非常通用、安全的语言。与C++不同,Java对内存的自动管理要强的多,也更加安全。比如放弃指针,而使用对象引用。使用垃圾回收机制而不是让程序员自己手动回收。

1.2.4 J2SE编译运行的过程

先编译后运行首先编译:虚拟机会根据java预言的规则进行语法分析,词法分析,语义分析等等,以及类变量常量的提取等等,然后依据class文件的格式把程序转化为字节码文件。这就是你用javac命令的结果。 运行:要经过初始化的步骤,进入内存,然后在用到的时间就从main方法入口区执行程序!

1.2.5 发环境及相关技术的介绍

开发环境

C:JDK当前目录demo

bin lib jer

用户类文件所在目录Javac appletviewerJava图1-1 Java开发环境图

C:javaexamplesapplication

操作系统:Microsoft Windows XP

程序语言: Java2

JDK下载、安装及配置:

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

第一步:下载

JDK的一个常用版本J2SE(Java2 SDK Standard Edition)可以从Sun的Java网站上下载到:/j2se/,我们建议下载最新版本的。当前最新版本为:J2SE 5.0 JDK。

第二步:安装

下载好的JDK是一个可执行安装程序,执行安装即可。安装完成在安装目

-7-

吉林建筑大学毕业设计(论文)

录下会有jdk1.5.0和jre1.5.0两个文件夹。

第三步:设置环境变量

打开“我的电脑 -> 属性 -> 高级 -> 环境变量 -> 系统变量”,设置以下三个变量:

JAVA_HOME= 如:我的为:E:Program FilesJavajdk1.5.0

CLASSPATH=.

Path=<原Path>;如:我的为:

Program FilesJavajdk1.5.0bin

请注意:CLASSPATH变量的值是“.”(不包括引号).

Java虚拟机的ClassLoader会按照CLASSPATH设定的路径搜索class文件。请注意,ClassLoader不会在当前目录下搜索,习惯了Windows的用户可能会感到意外,Linux用户就非常清楚。为方便起见,我们将CLASSPATH设置为“.”就包括了当前目录。

1.2.6 网络游戏开发概述

很多人看来,网络游戏还是一种很新鲜时尚的玩意儿,所以谈起网络游戏时难免有种高深摸测的感觉。其实,网络游戏的整个制作过程十分简单。从某种角度而言,是一种传统的回归,同时也是新旧技术的相互融合。

合适的开发工具或者好的引擎将会大大提高开发速度。最常用的开发工具有Eclipse,在设计工具上则更是和普通的C/S游戏制作软件没有大的区别。当然所有这些方法都要根据游戏的最终设定来决定。在制作网络游戏时,常常结合使用二维绘制来建立模型以及场景渲染。在设计过程中常常使用了MAYA、3DMAX、PHOTOSHOP、PAINRER等工具。

大多数网络游戏提供多难度级别,使游戏者玩上几天甚至几个星期。每级游戏都可以建立在不同的迷宫中。当一个游戏者以自己的方式成功玩到某一级终点时,游戏继续进行到更高的一级,在那里游戏者要接受新的挑战。多级别非常重要,它可以让新的布景和迷宫出现并且使游戏看起来不让人厌烦。它们让玩家在游戏中以不同的速度完成游戏时得到不同的奖励,比如:特殊的能力,武器。此外还可以设置加强难度,让游戏者不得不消灭光所有的怪物才可以得到过关许可。也许展现一个三维场景并不难,但令人惊叹的效果和良好的娱乐性也许才是游戏的精髓所在。

-8-

吉林建筑大学毕业设计(论文)

1.3 绘图与混淆器

1.3.1 提供低级绘制的Canvas类

为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是Canvas抽象类进行绘图。从程序开发的观点看,Canvas类可与高级Screen类交互,程序可在需要时在Canvas中掺入高级类的组件。Canvas提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。本程序中,操纵用户炸弹人运行的按键都定义为游戏控制键,这样便能适应所有的机器。

1.3.2 Graphics类

Graphics类提供了简单的2D绘图功能。它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。Component类中有一个方法public void

paint(Graphics g),我们可以在其子类中重写这个方法。当重写这个方法时,相应的Java运行环境将参数g实例化,对象g就可以在该组件的坐标内绘制图形,图像等。

1.3.3 JPG格式

JPG是静态图片,显示的颜色多,文件相对大。GIF是动态的动画,显示的颜色少,文件相对小。

JPEG=JPG是Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg",是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。

JPG格式的照片是压缩的照片,它的压缩率是可以调整的,数码相机照出来的压缩率小,因此文件体积比较大,你“另存为”的时候,画图软件使用了另外一种压缩率,因此压得文件小了一点。这就是图片文件变小的原理,奥秘就在压缩率。

压缩率与品质是相对应的,压缩得厉害,品质就下降。因此你另存为以后,

-9-

吉林建筑大学毕业设计(论文)

图像质量必然改变。

图片的质量,在打印出来的时候有比较大的区别,在计算机显示器上显示,变化很不明显。因此高品质的大文件图片,比如你原来的1M多,只对打印有意义,用来上网或者自己在计算机上观赏,高品质就没有意义。

1.3.4 有关绘图的一些技术

在以往进行游戏绘图一般需要手动编程使用双缓冲。需要在paint()方法内所想要画的图形画在一张预先准备好的背景,等所有绘图操作都完成后再将背景的数据拷贝到实际的屏幕上。Image类提供了一个建立背景的静态方法createImage(int width, int height),再利用getGraphics()方法取得属于这个背景的Graphics对象,所进行的绘图操作都会作用在背景上,等到全部的绘图操作完成后,再调用drawImage()方法将背景的数据复制到实际显示的屏幕上。

这样的技术在绘制动画时特别有用。绘制动画时经常需要不断地更新画面,而更新画面的操作就是先将屏幕以fillRect()的方式清除,再将下一张图片画在屏幕上,然而反复的清除及重绘会造成屏幕的闪烁现象(flicker),因此使用双重缓冲的好处就是在背景进行这个清除及重绘的操作,再将完成的绘图拷贝到屏幕上,由于用户看不到清除的操作,因此就不会出现闪烁的现象了。

1.3.5 混淆器(Obfuscator)的使用

Java 语言并没有完全编译成二进制可执行文件,编译出的.class文件是一种介于源程序和二进制之间的一中基于半解释的字节码,需要虚拟机来执行。它包括了所有的信息。然而这样会导致.class很容易被反编译为源代码,从而不能保护作者的知识成果。目前流行的如decode,JAD等反编译工具可以以很快的速度生成源文件。如果不加以施行有效的措施,将造成严重的后果。

由此引入混淆器的概念。混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,如果缺乏相应的函数名指示和程序注释,即使被反编译,也将难以阅读。

混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的减少变量、函数的命名长度的关系,编译后也会从.class文件中减少这些冗余的信息。混淆后,体积大约能减少25%,这对当前费用较贵的无线网络传输是有一定意义的。

为了能与各种IDE集成,就像Java2 SDK一样,混淆器采用命令行参数的形式,以便可被其调用。目前流行的Obfuscator有RetroGuard等。

-10-

吉林建筑大学毕业设计(论文)

第2章 炸弹人大战游戏的需求分析

2.1炸弹人大战游戏的任务概述

这个炸弹人大战游戏的策划比较简单,游戏中玩家采用传统的游戏规则。服务器建立主机,然后客户机请求申请进入,当客户机输入主机的IP之后便可开始游戏,双方在中途能够暂停,能够互通信息,双方炸弹人加入超级武器后都会有多种不同功能,如加入INT图标时,敌方炸弹人全部死亡;加入五角星时,可以加快子弹的速度,并能将钢墙打破;加入炸弹人图标,则可以增加一条生命等等。如果成功过关,会显示你过关了,在游戏中还会出现敌人的炸弹人数量及我方坎坷的战绩,若游戏失败了,系统会问是否要继续游戏,若双方都同意继续游戏,则游戏重新开始,否则游戏结束。

2.2本程序需解决的有关程序问题

1.本程序是一项精度要求很高网络游戏,因为其代码利用率很高。一个实时运行的最终作品,因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。

2.己方炸弹人的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定的自能性,同时,出现在屏幕上的敌人可能会有较多的数量,就需要每个敌人开辟一个线程以便能让其独立运行。Java的多线程能力为实现这样的游戏提供了可能。敌人炸弹人的运行算法也需要进行适当的设置,以免游戏过于简单,单调。

3.对于双方炸弹人发出的子弹的控制也需要对其跟踪控制,子弹也需要处在独立的线程中。敌方子弹仅需要扫描用户炸弹人,而用户炸弹人需要在每一步扫描所有敌人炸弹人,这需要对所有的对象有一个较好的控制。另外子弹在运行过程中也需要实时扫描是否碰撞到了相关障碍物或屏幕边界,如此过多的线程同时在本来效率就不高的Jvm虚拟机上运行,也许会导致程序的缓慢。

4.双方的炸弹人在前进时也需要考虑是否碰到相关物体或对方炸弹人,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感,每一次刷新页面,每前进一步都需要将所有的周围环境都进行扫描。

5.游戏的结束,开始,动态信息画面作为构成一个完美程序都是必不可少的重要部分,良好的用户界面更是吸引用户的硬指标,相关的美术构图也需要有一定的考虑。

6.游戏的地图不可能全都通过绘图来解决,否则,不仅难于控制和处理过多

-11-

吉林建筑大学毕业设计(论文)

的元素,也会因过多的大型图片而不能限制程序的大小,失去程序的原则和Java优势,同时,地图关卡不宜保存在有限的内存中,而最好采取外部文件的读入读出方法。

7.用户运行游戏时需要有分数记录的可能。如果采用合理的记分标准,需要进行适当的设计。记分记录的存储方式也需要有较好的解决方案。

是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制,变量的使用,算法的优化等优化外,还可以使用混淆器进行程序打包后的优化。

2.3使用对象

本游戏适用于任何游戏爱好者,考验玩家的思维能力和敏捷力。

2.4游戏功能

1.开始新游戏功能

2.存储游戏功能

3.读取游戏功能

4.演示游戏功能

2.5建议软硬件配置

1.该软件是利用Java语言编程,所以运行该游戏必须安装JVM(Java虚拟机)。

2.运行该游戏的最低硬件配置,如要求系统最低为64M内存,40G硬盘以上等。

3.操作平台Windows 95,Windows Me,Windows 98,Windows2000,WindowsXP均可。

-12-

吉林建筑大学毕业设计(论文)

第3章 总体设计

3.1炸弹人大战游戏的总体功能

游戏由服务器和客户机2部分组成,在服务器中,base类负责创建大本营,bomb类负责创建子弹打出后的效果,bullet类负责创建子弹,enemy类负责创建敌方炸弹人,drawingPanel类负责创建主机窗口视图,grass类负责创建草坪,level类负责创建各个不同的关,player类负责我方炸弹人的得分,位置等信息,powerUp类负责将子弹的能量加高,速度加快,river类负责创建河流,ServerControler创建对话,帮助,使用之类的信息,ServerModel类负责创建主机,ServerView类负责创建图标信息,Steelwall类负责创建钢墙,Ticker类负责创建时间信息,wall类负责创建普通的墙。而客户端的Actor类负责创建接口,

bomb类负责创建子弹打出后的效果,bullet类负责创建子弹,ClientControler类负责创建对话,帮助,使用之类的信息,ClientModel类负责创建与主机的链接,ClientView类负责创建图标信息,drawingPanel负责创建客户端窗口视图,instructionHandler类完成各物体间的转换及游戏结束后是否继续,level类负责创建各个不同的关,normalObject类描绘了去墙以外的所有物体,Steelwall类负责创建钢墙,Ticker类负责创建时间信息,wall类负责创建普通的墙。

玩家通过输入IP获得连接,能够实现敌方炸弹人和子弹的智能化运行,添加了草坪,河流,普通墙和钢墙,并给其赋予了自己特有的功能,同时游戏中还包含了记分功能,特殊武器的加入另外,此游戏中不同的是在游戏中添加了通话功能,在游戏中使用了套接字Socket来完成客户端与服务器端的连接。

-13-

吉林建筑大学毕业设计(论文)

第4章 算法设计和主要技术

4.1炸弹人大战生成算法

4.1.1子弹产生的算法

public void draw(Graphics g) {

or(ray);

if(direction == 0 || direction == 1)

其流程如图4-1所示:

开始ct(border.x + 1, border.y +1, 3, 9);

ct(border.x +1, border.y + 1, 9, 3);

if(direction == 2 || direction == 3)

设置子弹颜色为ray子弹水平发出?ct(border.x +1,

border.y + 1, 9, 3)ct(border.x +

1, border.y +1, 3, 9)结束

图4-1 子弹生成图

在这里,定义了子弹的颜色为ray,若子弹是水平发出的,则绘制子弹为矩形ct(border.x +1, border.y + 1, 9, 3),若子弹是垂直发出的,则绘制子弹为ct(border.x + 1, border.y +1, 3, 9)。

-14-

吉林建筑大学毕业设计(论文)

4.1.2 敌人炸弹人产生的算法

//定义敌人炸弹人共有属性

interval = (int)(()*200);

direction = (int)(()*4);

//定义敌人炸弹人的特殊属性

if(type ==args1 ){//args1为敌人炸弹人名称

firePosibility = args2;//args2为炸弹人开火位置

speed = args3;//args3为炸弹人速度

textures = new Image[args4];}//args4为图片名字

//绘制敌人炸弹人

public void draw(Graphics g){

在这里,通过interval = (int)(()*200)设置了炸弹人出现的时间间隔,通过direction = (int)(()*4)获得炸弹人出现的随机方向,而在特殊属性中,通过firePosibility设置敌人炸弹人的火力,通过speed设置敌人炸弹人的速度,通过textures[i] = es[]获取敌人炸弹人的图标,让后通过方法public void draw(Graphics g){}添加敌人炸弹人。

else

age(textures[direction], xPos - size, yPos - size,

null);}

if(flashing && ow%10 > 4)

age(textures[-4+direction], xPos - size,

yPos - size, null);

4.1.3 爆炸效果产生算法

public void draw(Graphics g){

or();

al(xPos-outer, yPos-outer, 2*outer, 2*outer);

or();

al(xPos-middle, yPos-middle, 2*middle, 2*middle);

or();

al(xPos-inner, yPos-inner, 2*inner, 2*inner);}

其爆炸效果流程如图4-2所示:

-15-

吉林建筑大学毕业设计(论文)

开始设置爆炸时的效果最外圈中间内圈or()or()or()al(xPos-outer,

yPos-outer,

2*outer,

2*outer)al(xPos-middle,

yPos-middle,

2*middle,

2*midd了)al(xPos-inner,

yPos-inner,

2*inner,

2*inner)结束

图4-2 爆炸效果图

当子弹打出,爆炸时,通过or()方法设置爆炸时的颜色,通过al()方法获得爆炸的图形及位子大小。

4.1.4大本营产生算法

public void draw(Graphics g){

}

其流程如图4-3所示:

age(base, xPos - 12, yPos - 12, null );

-16-

吉林建筑大学毕业设计(论文)

开始玩家载入了游戏选择图片作为大本营结束

图4-3 大本营建立图

使用public void draw(Graphics g){}方法直接添加一副图片作为大本营。大本营是玩家的核心,一旦大本营被敌人攻破了,则玩家被判为输了,并结束游戏。

4.1.5面板产生算法

//设置面板大小和创建面板图标

public void paintComponent(Graphics g) {

Graphics offScreenGraphics;

if (offScreenImage == null) {

}

offScreenGraphics = phics();

myPaint(offScreenGraphics);

age(offScreenImage, 0, 0, this);}

offScreenImage = createImage(640, 550);

//向面板添加当前关数及剩余敌人数

or(new Color(81,111, 230));

ring("第 " + tLevel + " 关", 527, 39);

ring("敌人数 = " + eft, 527, 79);

//输出胜利场景

if(gCount >敌人炸弹人数量 ){

or(new Color(red, green,

blue));ring("过 关 了 !", 240, 250);}

其流程如图4-4所示:

-17-

吉林建筑大学毕业设计(论文)

开始向游戏中添加面板显示胜利场景输出当前关数输出敌人剩余数结束

图4-4 面板生成图

通过public void paintComponent(Graphics g) {}方法创建了一个面板,通过ring("第 " + tLevel + " 关", 527, 39)设置了当前关数,及在面板中的位置,通过ring("敌人数 = " + eft, 527, 79)方法显示剩余敌人数量及位置,通过ring("过 关 了 !", 240, 250);}向面板中输出胜利场景。

4.1.6草坪产生算法

其流程如图4-5所示:

开始设置画笔颜色绘制草坪结束

图4-5 草坪生成图

-18-

吉林建筑大学毕业设计(论文)

在算法中,通过public void draw(Graphics g) {}方法绘制了草坪。草坪中,游戏双方炸弹人可以自由通过。

4.1.7河流产生算法

使用age()方法直接添加一副图片作为河流地图。游戏中,不允许炸弹人在河流中行走,但子弹可以穿过河流,打到对方,这样的设置使游戏更加新颖,符合传统炸弹人大战游戏的规则。

4.1.8普通墙的产生算法

本算法中通过generalBorder = new Rectangle(xPos - 12, yPos - 12, 25, 25)方法初始化了一个矩形,然后调用border[args1] = new Rectangle(args2, args3, 11, 11)生成了普通墙。其中args1为border数组的索引arg2和arg3分别为矩形绘制的起点坐标x和y。

4.1.9钢墙的产生算法

其流程如图4-6所示:

开始进入游戏绘制钢墙结束

图4-6钢墙建立图

本算法中通过generalBorder = new Rectangle(xPos - 12, yPos - 12, 25, 25)方法初始化了一个矩形,然后调用border[args1] = new Rectangle(args2, args3, 11, 11)生成了钢墙。与普通墙所不同的是:普通墙被子弹打中后,会相应的减少一部分,直到消失为止,而钢墙却不能被一般子弹所打破,只有当玩家吃到五角星图标时,子弹火力增强后才能将钢墙打破,而敌人却无法打破钢墙。其中args1为数组参数,args2和args3分别为x和y轴坐标。

-19-

吉林建筑大学毕业设计(论文)

4.1.10主机服务器建立连接算法

主机通过public void createServer(){}方法创建主机,通过

serverSocket = new ServerSocket(4321)创建了一个端口,如果serverCreated

= true,则建立成功,否则给出错误提示,而服务器则通过clientSocket =

()建立连接,当通过方法InetAddress addr =

ame(serverIP);clientSocket = new Socket(addr, 4321)连接上主机之后,则载入游戏,否则则给出相应连接错误信息。

4.2功能实现算法

4.2.1子弹功能算法

子弹通过掉用方法if([i].getType().equals(args))判断子弹和什么物体相碰,其中args表示各种物体的名字,若是碰到了敌人的炸弹人,则敌人的炸弹人消失,若是碰到了普通的墙,则普通墙被损坏,若是击中其他物体,则其他物体保持不变,若是打破了大本营,则游戏结束。

4.2.2 炸弹人功能算法

炸弹人通过if([i].getType().equals(args)判断炸弹人碰到了什么图标,其中args表示各种物体的名字,若是INT图标,则判定敌方炸弹人全死亡,若是五角星,则玩家火力加强,若是钢墙图标,则大本营变钢墙,若是炸弹人图标玩家生命加一,若是时钟图标,则敌人停止不动。

4.2.3 面板功能算法

面板流程里主要通过mainPanel = new drawingPanel()方法调用面板,通过sendMessage = new JButton(??)初始化按钮,按钮中包含帮助,暂停/继续,发送消息,建立主机,输入IP按钮,通过方法public ServerModel(ServerView thisview)建立主机,通过算法话");return;}

if(!t().equals("")){sage("主机端玩家说:TypedMessage += "m" + t() + ";";

t("");

" + t());

public void actionPerformed(ActionEvent e)

{if(!arted){sage("还没有和别的玩家联上, 无法发送对

-20-

吉林建筑大学毕业设计(论文)

}else{sage("对话内容不能为空");}}

来控制消息的互动。为help按钮上添加监听器public void

actionPerformed(ActionEvent e)实现帮助消息的显示。

-21-

吉林建筑大学毕业设计(论文)

第5章 炸弹人大战游戏的详细设计

游戏由服务器和客户机2部分组成,其中服务器包含18个类,客户机包含13个类。在服务器中Actor类负责创建接口,base类负责创建大本营,bomb类负责创建子弹打出后的效果,bullet类负责创建子弹,enemy类负责创建敌方炸弹人,drawingPanel类负责创建主机窗口视图,feedbackHandler类负责创建暂停与继续游戏事件,grass类负责创建草坪,level类负责创建各个不同的关,player类负责我方炸弹人的得分,位置等信息,powerUp类负责将子弹的能量加高,速度加快,river类负责创建河流,ServerControler创建对话,帮助,使用之类的信息,ServerModel类负责创建主机,ServerView类负责创建图标信息,Steelwall类负责创建钢墙,Ticker类负责创建时间信息,wall类负责创建普通的墙。而客户端的Actor类负责创建接口, bomb类负责创建子弹打出后的效果,bullet类负责创建子弹,ClientControler类负责创建对话,帮助,使用之类的信息,ClientModel类负责创建与主机的链接,ClientView类负责创建图标信息,drawingPanel负责创建客户端窗口视图,instructionHandler类完成各物体间的转换及游戏结束后是否继续,level类负责创建各个不同的关,normalObject类描绘了去墙以外的所有物体,shield类创建了保护时的状态,Steelwall类负责创建钢墙,Ticker类负责创建时间信息,wall类负责创建普通的墙。

5.1服务器的类

5.1.1主类ServerView类

ServerView类创建了一个窗口,在窗口中添加了六个按钮,一个文本框,一在这里,分别将按钮设置为建立主机按钮,暂停/继续按钮,帮助按钮,退个面板。

出按钮,发送按钮,还有一个隐藏按钮,文本框用来输入主机的IP,帮助按钮则用来帮助用户了解游戏的使用,发送按钮则用来互通玩家的信息,另外,这些按钮和文本框全都被加载到了面板中,而面板又被添加到了窗口中。

-22-

吉林建筑大学毕业设计(论文)

5.1.2服务器模型ServerModel类的实现其具体实施流程如图5-1所示:

开始建立主机?Y客户机连接?Y载入游戏第一关N请确认端口4321没有被别的程序使用N向屏幕中输出信息开始游戏删除屏幕中的信息增加新物体产生敌人坦克移除新物体游戏结束Y在玩一次?N结束

图5-1 游戏建立及信息输出流程图

5.1.3 子弹属性bullet类的实现

bullet类描绘了子弹的具体实现,及子弹打中各种不同物体时做出的不同反映

-23-

吉林建筑大学毕业设计(论文)

5.1.4轰炸类bomb类的实现

该类主要描绘了子弹打中其他物体时所产生的效果,下面是轰炸类的一些参数和具体方法:

//设置轰炸后产生的图形是一个三种颜色的圆

public void draw(Graphics g){

}

or();

al(xPos-outer, yPos-outer, 2*outer, 2*outer);

or();

al(xPos-middle, yPos-middle, 2*middle, 2*middle);

or();

al(xPos-inner, yPos-inner, 2*inner, 2*inner);

//判断出现什么情况时,获得轰炸:

if(("big") ){

}

inner = 6; middle = 9; outer = 14;

jumpDistance = 8;

animationTime = 6;

inner = 2; middle = 4; outer = 7;

jumpDistance = 4;

animationTime = 4;

}else if(("small")){

其实现图如图5-2所示:

发射一颗子弹打中的物体类型为“big”打中的物体类型为“small”显示一个大的三层圆的爆炸出显示一个小的三层圆的爆炸出

图5-2 子弹轰炸图

5.1.5面板类drawingPanel类的实现

drawingPanel类初始化了一个面板,向该面板中添加了一个游戏产地,并在-24-

吉林建筑大学毕业设计(论文)

该面板中显示了当前的敌人炸弹人剩余量及关数,另外还绘制了或的胜利时的场景。

5.1.6敌人炸弹人enemy类的实现

enemy类设置了敌人坎坷的共同属性,各自的特殊属性,敌人的炸弹人在一个随机的有限时间内保持着向一个方向行走,在有限的时间结束后,将改变一个新的方向。敌人炸弹人决定是否发射一颗子弹,这子弹的方向也是随机的,另外,此类描绘了子弹发射的方向和具体的位置,确定了子弹的速度,以及如何向该类中添加子弹,该类可以检查是否与地图的边缘相碰,若是,则获得一个新的方向,若与其他物体相碰,则相应的长生一些其他效果,另外,敌人炸弹人被子弹打中了也要做出一些相应的反应。

5.1.7游戏关数level类

Lever类定义了获得胜利的场景参数,在每次进入更高一关时,都增加了游戏的难度,并清理了当前关的所有东西,给出了如何加载各关的方法,图片,并在各关中给出了常人敌人炸弹人的方法,如果进入下一关时,则从设所有的一切。

5.1.8游戏者player类的实现

Player类设置了玩家的位置和图片,当玩家按了“fire”键,并且条件是满足的,则创建了一颗子弹,并给出了子弹的速度,位置,能量,在游戏中可以通过方向键准确的控制玩家炸弹人的上,下,左,右的移动,并给出玩家炸弹人与地图边缘相撞,和其他别的物体相撞的反应。并在游戏中可以精确的确定游戏玩家的位置。在游戏中,可以给出玩家的信息,得分,当玩家被击中时,则将其移除,此时玩家生命数减少一条。

5.2客户端的类

5.2.1子弹属性bullet类的实现

bullet类描绘了子弹的具体画法为

public void draw(Graphics g){

or(ray);

if(direction == 0 || direction == 1)

-25-

吉林建筑大学毕业设计(论文)

}

ct(xPos - 1,yPos - 4, 3, 9);

ct(xPos - 4, yPos - 1, 9, 3);

if(direction == 2 || direction == 3)

Actor(this);

通过方法public String getType(){return Type;}获得子弹类的参数。

其实现流程如图5-3所示:

开始设置子弹颜色为ray子弹水平发出?ct(border.x +1,

border.y + 1, 9, 3)ct(border.x +

1, border.y +1, 3, 9)结束

图5-3子弹绘制流程图

5.2.2 客户端模型ClientModel类的实现

ClientModel类实现了ActionListener监听器,通过如下方法连接主机

public void connectServer(){

addMessage("正在连接主机");

try{

serverIP = t();

InetAddress addr = ame(serverIP);

clientSocket = new Socket(addr, 4321);

= new BufferedReader(new

out = new PrintWriter(putStream(), true);

in

InputStreamReader(utStream()));}catch(Exceptione)

{();n(e);

-26-

吉林建筑大学毕业设计(论文)

addMessage("连接中出现错误, 请确认 1. 输入的IP是否正确, 2. 主机端已存在");return;}

当载入成功后,设置serverConnected = true。这样就连接上了主机。

//当一些事情出错了,删掉创建的东西

try{();();

();

}catch(Exception exc){n(exc);}

//增加游戏中的一个实力物体

public void addActor(Actor actor){

}

for(int i = 0; i < ; i ++ )

if(drawingList[i] == null){

}

drawingList[i] = actor;

break;

//删除游戏中的一个实力物体

public void removeActor(Actor actor){

for(int i = 0; i < ; i ++ )

}

if(drawingList[i] == actor){

drawingList[i] = null;

break;

其具体实现流程如图5-4所示:

-27-

吉林建筑大学毕业设计(论文)

开始N连接主机Y载入游戏第一关删除游戏中的一些实例对象增加游戏中的实例对象结束

图5-4 客户机模型流程图

5.2.3 面板类drawingPanel类的实现

drawingPanel类初始化了一个面板,向该面板中添加了一个游戏产地,并在该面板中显示了当前的敌人炸弹人剩余量及关数,另外还绘制了或的胜利时的场景。

5.2.4 说明控制类instructionHandler类的实现

instructionHandler类中实现的具体方法如下:

//如果是L开头则表示加载一副地图,L后面的数字即为地图的关数

if(ing(0,1).equals("L")){

vel(gameModel,

nt(ing(1,2)));

return;}

k = 0; k <

//如果是W开头则表示改变了普通的墙

if(ing(0,1).equals("w")){for(int

; k++){

if(gList[k] !=null){if(gList[k].getxPos() == xPos && gList[k].getyPos() == yPos){

-28-

吉林建筑大学毕业设计(论文)

一样。

}

wall tempWall = new wall(xPos, yPos, 4, gameModel);

}

}

= shape;

gList[k] = tempWall;

如果是以S开头则表示钢墙发生了变化,具体实现方法和普通墙的改变方法//如果以b开头,则表示大本营被毁

if(ing(0,1).equals("b")){gList[4] = new

normalObject(260, 498, gameModel, "base", 1);}

//如果以t开头,则显示子弹

if(ing(0,1).equals("t")){

or(new bullet(xPos, yPos, gameModel, direction))}

//如果以o开头,则显示大本营

if(ing(0,1).equals("o")){

or(new bomb(xPos, yPos, size, gameModel));

}

//如果以i开头,则显示炸弹人隐身

if(ing(0,1).equals("i")){

or(new shield(xPos, yPos, gameModel)); }

//如果以a开头,则显示GAME OVER ! 想再玩一次吗 ( y / n )?

if(ing(0,1).equals("a")){

}

if(!er){

}

er = true;

sage("GAME OVER ! 想再玩一次吗 ( y / n ) ?");

//如果以x开头,则显示玩家暂停或继续游戏

if(ing(0,1).equals("x")){

int temp = nt(ing(1,2));

if(temp == 0){

if(used){

sage("主机端玩家取消了暂停");

used = false;}

}else{if(!used){

-29-

吉林建筑大学毕业设计(论文)

}

sage("主机端玩家暂停了游戏");

}

used = true;

其具体实现流程如图5-5所示:

开始进入游戏a开头L开头W开头S开头b开头t开头i开头x开头显示GAME

OVER加载一副地图改变了普通的墙钢墙发生了变化大本营被毁显示子弹显示坦克隐身玩家暂停或继续游戏结束

图5-5 handleInstruction类流程图

-30-

吉林建筑大学毕业设计(论文)

5.3服务器类结构图

enemybombgrassbulletActorbaseActorpowerUpfeedbackHandlerplayerActionListenerriverServerModeldrawingPanellevelSteelwallServerControlerServerViewJFramewallRunnableTicker

图5-6 炸弹人大战游戏服务器端类结构图

5.4客户端类结构图

bombbulletActorshieldfeedbackHandlerActionListenernormalObjectinstructionHandlerClientModeldrawingPanellevelSteelwallClientControlerClientViewJFramewallRunnableTicker

图5-7 炸弹人大战游戏客户端类结构图

-31-

吉林建筑大学毕业设计(论文)

5.5炸弹人大战游戏的场景结构流程

游戏启动时,ServerModel类负责创建主机,等待客户机的参与,接着客户端ClientModel类负责创建与主机的链接,链接上之后,闪屏,drawingPanel类负责创建窗口视图,接着ServerView类负责创建主机图标信息,而ClientView类负责创建客户端图标信息,主机使用grass类负责创建草坪,river类创建河流,然后分别用Steelwall类、Ticker类、wall类创建各自的钢墙,时间信息,普通的墙,主机用ServerControler创建对话,而客户机用ClientControler创建对话,base类负责创建大本营。

-32-

吉林建筑大学毕业设计(论文)

第6章 游戏测试

6.1 测试方法

测试,通常有两种方式:单元测试和组装测试。对本系统着重单元测试。单元测试中通常使用白盒测试法,也就是根据程序的内部处理逻辑来设计测试用例。白盒测试法主要的方法有:语句覆盖,条件覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖,路径覆盖,本系统根据白盒测试法来设计测试用例。

6.2 部分测试用例

6.2.1系统启动测试

表6-1 启动测试

测试用例

描述

测试方法

期望结果

1

测试游戏成功链接

双击游戏的打包文件

启动成功,看到系统主界面

测试结果(正确或错误) 正确

测试人

Date :

6.2.2子弹发射测试

表6-2 子弹发射测试

测试用例

描述

测试方法

期望结果

测试结果(正确或错误)

测试人

2

测试子弹能否发射,及响应反映

点击S键,子弹发射键

成功发射子弹并打中不同物体产生相应效果

正确

Date :

-33-

吉林建筑大学毕业设计(论文)

6.2.3玩家移动测试

表6-3 玩家移动测试

测试用例

描述

测试方法

期望结果

3

测试玩家移动的情况

点击方向键移动,看移动是否成功

炸弹人可以移动

测试结果(正确或错误) 正确

测试人 Date :

6.2.4信息发送测试

表6-4 信息发送测试

测试用例

描述

测试方法

期望结果

4

测试信息发送的接收情况

输入信息,按Enter键发送,看移动是否成功

另一玩家收到信息

测试结果(正确或错误) 正确

测试人

Date :

6.2.5游戏暂停和继续的测试

表6-5 游戏暂停测试

测试用例

描述

测试方法

期望结果

5

测试游戏暂停的情况

点击非游戏键,看游戏是否能暂停

游戏暂停

测试结果(正确或错误) 正确

测试人

Date :

-34-

吉林建筑大学毕业设计(论文)

表6-6 游戏暂停后继续测试

测试用例

描述

测试方法

期望结果

6

测试游戏暂停后能否继续的情况

点击继续键,看游戏是否能继续进行

游戏能够继续进行

测试结果(正确或错误) 正确

测试人

Date :

6.2.6游戏胜利与失败的测试

表6-7 游戏胜利测试

测试用例

描述

测试方法

期望结果

7

测试游戏胜利后屏幕的情况

成功过关,则显示过关了字样

显示过关了字样

测试结果(正确或错误) 正确

测试人 Date :

表6-8 游戏失败的测试

测试用例

描述

测试方法

8

测试游戏失败后屏幕的情况

炸弹人数量被敌人灭完或大本营被敌人攻破,显示game over和是否继续游戏字样

期望结果 出现game over,是否继续游戏字样

测试结果(正确或错误) 正确

测试人

Date :

6.3 测试分析和小结

通过前面的测试,证明系统数据处理具有安全性及稳定性,在数据出错情况下能够给出正确提示,当系统出现异常时,能够正确捕获并进行相应的处理或给予提示。

-35-

吉林建筑大学毕业设计(论文)

第7章 用户手册

7.1炸弹人大战运行环境配置

7.1.1 软件配置

本游戏运行只需运用支持Java语言的平台,或是配有Java虚拟机即可,如果是模拟器需要配置Java虚拟机。

7.1.2 硬件配置

运行该游戏的最低硬件,系统最低为64M内存,40G硬盘以上等。操作平台Windows 95,Windows Me,Windows 98,Windows 2000,WindowsXP均可。

7.2“炸弹人大战”游戏规则

游戏开始后玩家要消灭系统给的所有敌人并保证大本营的中心不被破坏即可进入下一关,表示此关已挑战成功,在途中,可通过各种超级武器是大本营编程钢墙而无法被敌人攻破,增加生命数,获得短暂的隐身,增强子弹的力量,吃到INT图标则可将敌人全部杀死,吃到时钟图标则可增加对战时间。若在规定的时间内无法将敌人全部消灭或者大本营被敌人攻破,则判定为输。另外,玩家可以通过帮助来获取游戏的规则,可以通过暂停键停止游戏,也可以在游戏中互通消息。

7.3“炸弹人大战”游戏操作

游戏在建立了支持Java语言的平台上运行,游戏操作键为上、下、左、右四个方向键,S键为子弹发射键,上、下键控制炸弹人的向前移动和向后移动,以及在游戏选项菜单中设置了帮助,暂停/继续和推出按钮,如果按键没有反应,1.请关闭大写功能;2.用tab键切换到控制界面如果你还在使用对话界面。游戏中还能互通消息,输入消息后按Enter键发送。

-36-

吉林建筑大学毕业设计(论文)

总 结

该游戏是基于J2SE架构开发一款网络版炸弹人大战游戏, 该网络游戏包括游戏场景(地图) 的处理、双方作战对象(炸弹人和子弹) 的生成、消减和控制, 以及敌方炸弹人和子弹运行的控制, 双方在游戏中的对话,超级武器的生成,实现了特定场景中的敌我双方炸弹人的对战, 敌方炸弹人由系统控制, 自动的发射子弹; 我方炸弹人由玩家控制, 系统为玩家提供控制炸弹人运行和子弹发射攻击的方法。该游戏软件具有一定的复杂性和可玩性。

在该游戏的设计与实现过程中,不可避免的遇到一些技术方面的问题,比如对游戏地图加载技术、炸弹人间的检测碰撞技术、地图中障碍物的加载等,这些问题的解决是本游戏的关键。当然,该游戏有待于进一步的提高,比如更大程度的提高敌方炸弹人智能化、游戏中添加宝物(物品),增强可玩性等等。

但几乎每一个计算机程序都会有这样会那样的不足,尤其是未经过精心维护的非商业软件。即使是作为操作系统的各种版本的Windows也时常会发生许多类型的错误和漏洞。本游戏程序对于初涉领域的毕业设计课题来说,尤其是开始初期,感觉逻辑复杂,难以控制,因此至今还有一些未能解决的bug。

目前发现的bug和未完善的功能如下:

1.敌人的人工自能变化较少,不够理想。

2.统计敌人炸弹人数量会出错。

3.暂停时,出现的超级武器也会随时间消失。

4.当加入超级武器(星)之后,有时仍不能打破钢墙。

已经解决的重要bug:

1.当发出子弹到达边界并同时还在草丛中时会抛出数组边界异常。

2.有时会莫名其妙的死机。

3.当炸弹人在草丛中时,对方炸弹人发出的子弹不能将其击毁。

-37-

吉林建筑大学毕业设计(论文)

参考文献

[1] 肖旻,廖雷.Java程序设计教程[M].北京:中国电力出版社,2006。

[2] 张广彬,孟红蕊,张永宝.java课程设计案例精编[M].北京:清华大学出版社,2007。

[3] 袁然,郑自国,邹丰义.java案例开发集锦[M].北京:电子工业出版社.2005。

[4] 陈炜,张晓蕾,侯燕萍 ,何凌云.java软件开发技术[M].北京:人民邮电出版社.2005。

[5] 马海军,景丽. java编程原理与实践[M].北京:清华大学出版社.2005.

[6] 谭浩强,程龙,杨海兰等. Java编程技术[M].北京:清华大学出版社. 2006.

[7] 易向东,陈蓓,万英.java游戏编程解析[M],程序员杂志[M].北京:电子工业出版社.2009.

[8] 爱克尔(著),王美(译) .java编程思想[M]. 北京:机械工业出版社,2001.

[9] 邱仲潘. Java游戏编程[M].北京:机械工业出版社,2006.

[10] 陈为, 周骥 ,杨柯. 面向对象的游戏开发[M].北京:DEARBOOK出版社,2008。

[11] 邓良松,刘海岩,陆丽娜.软件工程[M].第二版.西安:西安电子科技大学出版社,2004。

[12] 张桂珠 刘丽 陈爱国 Java面向对象程序设计(第2版)北京邮电大学出版社。

[13] .王保罗.Java面向对象程序设计[M]. 北京:清华大学出版社,2003。

[14] 高林,周海燕.Jsp网上书店系统与案例分析[M]. 北京:人民邮电出版社,2004。

[15] 刘腾红,孙细明.信息系统分析与设计[M]. 北京:科学出版社,2003。

[16] 杨赞国,高敬惠 . 基于C/S模式的网络信息管理系统设计与实现[C]. 北京:中国铁道出版社, 2009。

[17] 林邦杰,彻底研究java.北京:电子工业出版社,2002。

[18] 杜波依斯. MySQL技术内幕[M]. 第4版. 人民邮电出版社 , 2011。

[19] Metsker S J. Java设计模式[M]. 第2版. 电子工业出版社, 2012。

[20] 刘京华Java Web整合开发王者归来[M]. 清华大学出版社, 2010。

-38-

吉林建筑大学毕业设计(论文)

致 谢

首先感谢我的指导老师岳俊华,他在我的毕业设计过程中提出了指导性的方案和架构,特别是指引我阅读相关的资料和书籍,使我更能迅速学习掌握知识并完成了这个毕业设计。

感谢学校对我的培育,让我从思想上素质上知识上得到很大的提高,本科学习中的各科老师的悉心教导让我掌握了基本知识.

感谢我的同学在设计完成前后对我的得力帮助,没有同学的共同学习进步也许就没法完成设计,没有同学对程序的测试,也许就难以发现一些潜在的错误,在此一并表示感谢。

在此一并祝愿学校领导、老师、同学工作顺利,事业更上一层楼;同时也祝愿学校更加辉煌。

-39-

本文标签: 游戏炸弹子弹网络游戏玩家