基于J2SE的坦克大战毕业设计论文.docx
《基于J2SE的坦克大战毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于J2SE的坦克大战毕业设计论文.docx(32页珍藏版)》请在冰点文库上搜索。
基于J2SE的坦克大战毕业设计论文
石家庄科技信息职业学院
毕业论文
题目:
基于J2SE的坦克大战
专业班级:
软件技术(游戏方向)09-24班
基于Java的网络版坦克大战游戏设计
摘要:
本设计采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。
运行程序后允许用户选择执行选项菜单。
在开始游戏后,启动服务器和客户端,对背景的所有物体进行绘图。
在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。
用户控制的坦克运行在主线程中,随屏幕刷新的频率而移动。
坦克将在游戏开始时进行初始化,然后将坦克绘制在地图的上层。
本设计主要实现的功能是让坦克移动并能够智能的打出炮弹,躲避子弹,炸毁对方坦克。
能够支持网络对战和单机对战两种模式。
关键词:
面向对象;坦克大战;网络游戏;Java;Socket类
Java-basedWebversionofBattleCityGameDesign
【Abstract】Thedesignofobject-orienteddesignpatterns,alltheobjectsoninthegametogivetheconceptofobjectsandattributes.AfterrunningtheprogramallowstheusertoselecttheimplementationoftheOptionsmenu.Atthebeginningofthegame,starttheserverandclient,allobjectsonthebackgroundgraphics.Threadrunninginthemainprogram,thescreenrefreshfrequencywillbesomedoublebuffertechnologytoredrawthescreeninrealtimetoreflectthestateofthegame.User-controlledtankstoruninthemainthread,withthescreenrefreshfrequencyofthemovement.Tankwillstarttoinitializethegame,andthendrawthemapoftheuppertank.Designedtoachievethemainfunctionistoallowtankstomoveandbeabletoplaysmartbombs,dodgebullets,toblowupothertanks.Tosupportonlineplayandsingleplayagainsttwomodes.
Keywords:
Object-oriented;BattleCity;onlinegames;Java;Socketclass
摘要1
第1章前言
人类进入21世纪,全球一体化,互联网就起到重要的作用,而且随着互联网的不断发展,信息技术逐渐发展壮大,将成为网络经济的核心。
其中计算机、网络通信的发展最为迅速。
在现今电子信息高速发展的时代,网络游戏已经深入到人们的日常生活中,成为老少皆宜的娱乐方式。
1.1游戏设计的需求分析
1.1.1本系统的现实意义
游戏本身是一种娱乐方式,能带给人们无尽的乐趣,而且游戏行业的发展还将会带动众多周边产业,如五金、塑料、机械、电子、显像管,高端机型甚至使用了40英寸以上的大屏幕背投、液晶显示器等,这些显像设备不但要依赖国内众多显像管生产企业提供支持,更要针对游戏的内容进行深入开发和优化,以适应游戏内容的飞速发展和变化,大大突破了传统家电类显像设备的限制,对国内显像管制造企业的发展、创新具有极大的推动作用,大型游戏机的外部框体制造涉及工业设计、模具加工、五金加工、塑料成形、特殊印刷等工艺流程,由此带动了一大批相关的零部件生产制造企业,而这些企业均为生产密集型企业,大幅度增加了劳动就业的需求。
1.1.2本系统和其他开发游戏区别
本系统的坦克大战是基于Java语言设计开发的,具有高超的人工智能,精美的图形处理,支持单机运行和网络对战的坦克射击游戏。
比之前网络上实现的游戏更加方便,快捷,智能。
游戏基本玩法较简单,游戏可一人电脑作战,每次电脑方有坦克10辆,游戏以消灭全部敌方坦克过关为目的。
在这过程中,坦克有机会得到血块来添加生命值,从而变得更加强大,也能利用各种有利地形来阻击敌人。
游戏设置了墙面,电脑方坦克不能穿越墙面射击玩家坦克,而玩家坦克可随意穿越墙面打击电脑方坦克,这一游戏特权。
还有给玩家坦克设置超级炮弹,当电脑方坦克数量过多时,玩家坦克可以发射超级炮弹打击敌方。
主要新增的功能简单罗列如下:
1、屏幕左上方显示游戏状态,当玩家方坦克数全为零时则游戏结束;
2、一般坦克只可在空地中或草丛中行走,不可通过墙面等障碍物;
3、游戏中打坏敌方坦克后,可能会在随机位置随机出现血块奖励,坦克经过该位置可获得相应加生命值奖励;
4、玩家坦克的游戏资格和电脑坦克不同。
1.2开发技术概述
1.2.1Java、C语言、C++三种主流编程技术比较
Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言。
JAVA现在主要用在WEB开发,手机游戏及一些平台游戏的开发,因为它具有很好的跨平台性,在手机等各种电子产品上应用非常广泛。
C语言是一种面向过程编程,这就使得Java具有重用的特性,在开发速度上比C语言更快,但是在运行速度上却是C更快,因为C属于底层语言,它比JAVA更加亲近机器,所以在许多系统开发上一般是用C语言,比如我们常用的XP系统、LINUX系统,都是C语言开发的。
跨平台的服务器端的嵌入式脚本语言。
C++多用于游戏引擎、反病毒、硬件驱动以及一些对运行效率要求比较高的应用程序,比如数据库管理系统。
C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。
C++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性。
1.3本章小结
本章主要介绍了网络游戏在国内外发展的现状,现如今,网络游戏市场的重新定位是最迫切需要解决的问题。
本系统主要的现实意义,与其他游戏的区别和完善的一些功能。
本文用Java语言、C语言、C++三种主流编程技术比较,阐述了使用Java语言编程的原因。
第2章相关技术理论
2.1系统运行环境
2.1.1系统运行的软件环境
(1)网络服务器操作系统:
WindowsXP;
(2)开发工具:
eclipse3.2;
(3)运行环境:
J2SDK1.5;
(4)编程语言:
Java语言;
2.1.2系统运行的硬件环境
(1)CPU:
Intel或者兼容微处理器,奔腾166MHz及其以上;
(2)内存:
最低32MB,可以运行图形界面的JavaApplication;最低48MB,可以运行JavaApplet;内存不足,将会导致系统(尤其是服务器)的性能大幅下降;
(3)硬盘:
242MB到80GB及其以上;
(4)图形显示卡:
无要求;
(5)网卡:
普通网卡,3ComOfficeConnect10/100兆位网卡;
2.2相关理论
2.2.1关于Eclipse的介绍
Eclipse是一个主要针对Java项目开发所设计的【综合性集成开发环境-IntegratedDevelopmentEmironment,IDE】,最早是由ObjectTechnologicsInternational这家公司开发,该公司于1996年被IBM并购后,将Eclipse改为OpenSourcesoftware。
它最大的特点是:
采用了插件的结构,通过下载安装不同的插件,就可以实现不同类型的程序开发。
利用eclipse开发项目,是可以提高项目的开发效率,因为它不但可以像传统的一些编辑器一样编写代码,而且还有自动找错/纠错功能、Debug调试和代码自动生成等一些重要的功能,这使项目开发的效率得到了提升。
Eclipse可以作为其他开发工具的平台。
工作区被存储在磁盘上,并且对其他人是可见的。
Eclipse3.2的大多数新特性都是Eclipse用户需求的直接结果。
2.2.2J2SE框架
J2SE软件是快速开发、部署关键任务和企业应用程序的首选解决方案。
J2SE是基于Java跨平台技术和强有力的安全模块而开发的,其最新的特征和功能极大地提高了Java语言的伸缩性、灵活性、适用性,以及可靠性。
J2SE特点:
①良好的计算性能和缩放能力。
J2SE提升了Java计算的性能与缩放能力,代表了Java技术的大跨步进展。
通过J2SE框架更简易的步骤、花费更少的时间,采用Java技术开发与配置要求更高的应用了。
J2SE在Java客户机应用方面得到了重大性能提升。
基于Swing的Java小程序和应用程序在图形用户界面(GUI)的响应速度上也大有提高。
②跨平台:
J2SE是一个具有综合性能的平台,能使一个完整的、可缩放的高性能应用配置在任何种类的平台上。
③支持Web服务:
J2SE对SSL、LDAP等业界标准技术也给予支持,因此保证了在不同平台、系统和环境间的互操作能力。
J2SE支持XML技术和一整套安全服务,因此为基于各类标准的可互操作应用与服务的创建奠定了重要基础。
有了J2SE与JavaWebServicesDeveloperPack的结合,开发商就能创建、测试和配置Web服务了。
④完整性:
J2SE还是一个完整的开发环境。
开发商可基于这一环境创建功能丰富的交互式应用。
这些应用可以配置在任何平台上。
J2SE具有新的GUI控制功能、快速的Java2DT图形功能、支持国际化与本地化扩展和新的配置选项,并对WindowsXP提供扩展支持。
总之,J2SE是多种不同风格软件的开发基础,包括客户端Java小程序和应用程序,以及独立的服务器应用程序等。
J2SE版还是J2ME的基础,是J2EE执行程序的推动力。
Java之所以能够发展得很快,是因为互联网的发展非常快。
从计算的结构来看,Java主要分三大类:
第一是服务器端,这里就有了J2EE企业版;第二是桌面PC,这一类用的是J2SE标准版;第三就是掌上电脑、移动设备,用的都是J2ME。
但是,大部分非企业级软件还是在J2SE上开发的比较多。
首先,这是因为很多的应用软件都是在J2SE上开发的;其次,J2SE是和J2EE兼容的,企业版是在标准版上的扩充,在J2SE的版本上开发的软件,拿到企业的平台上是一样可以运行的;再次,一般开发还是在J2SE的环境上,只是说J2ME提供微型版的一个环境。
在J2SE上虚拟出一个环境,开发出来的应用软件是可以拿到微型版上运行的。
2.2.3联机通信机制
网络编程,简单地理解就是两台计算机相互通信。
其基本模型就是客户机/服务器模型,也就是通信双方中的一方必须提供一个固定的位置,而另一方只需要知道这个固定的位置,并且建立两者之间的联系,然后完成数据交换。
这里提供固定位置的一方通常称为服务器,而建立联系的一方称为客户端。
Socket(中文意思为插座),基于客户机/服务器的Soctet通信模式如图2.1所示:
图2.1基于客户机/服务器的Soctet通信模式图
当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数。
两个常用的构造函数是Socket(InetAddressaddr,intport)和Socket(Stringhost,intport),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字。
两个函数都通过参数port获得服务器的端口号。
假设已经建立连接了,网络API将在客户端基于Socket的流套接字中捆绑客户程序的IP地址和任意一个端口号,否则两个函数都会抛出一个IOException对象。
如果创建了一个Socket对象,那么它可能通过调用Socket的getInputStream()方法从服务程序获得输入流读传送来的信息,也可能通过调用Socket的getOutputStream()方法获得输出流来发送消息。
在读写活动完成之后,客户程序调用close()方法关闭流和流套接字。
2.2.4Java图形编程
Java中的Graphics类是用于绘图和显示格式化文本的工具类。
在Java程序中绘图必须在一个窗口(容器)中进行,绘图窗体经常被设计为一个组件容器。
一般首先在一个面板中进行绘制,然后再将这个面板添加到显示窗口中去。
Graphics类是在Java.awt包中申明,显示格式化文本和绘图时通过调用Graphics类的draw()方法实现的,例如drawString(String),drawLine()等。
绘图采用的坐标系是原点在左上角,纵轴向下以像素为单位的坐标系。
2.3本章小结
在本章节中首先介绍了该系统的运行环境,值的注意的是软件环境的配置,因为整个系统都是在虚拟环境下运行的,所以虚拟环境对于整个设计的调试和运行至关重要;其次对开发工具Eclipse3.2的简单介绍,利用eclipse开发项目,是可以提高项目的开发效率。
还有是对一些技术理论,J2SE框架,Java语言,系统运行所支持的操作系统,联机通信机制及Java图形编程等理论做了简单的介绍,为本系统后期实现图形化界面和网络通信做了理论支持。
第3章系统设计
3.1系统功能设计
3.1.1坦克大战总体功能设计
坦克大战游戏主要实现玩家参加游戏的整个流程,用户登陆游戏客户端选择游戏模式,可分为单机模式和网络对战模式,选择单机模式可以直接进入游戏状态;选择网络对战模式,在启动服务器后,玩家需要选择自己的角色,用户名和ID等玩家相关资料,成功后使用其账号进行登录游戏(只有成功登录的玩家才能参与网络对战游戏功能);登陆玩家就可以通过控制键盘操作,加入对战游戏。
整个网络版坦克大战游戏流程图如图3.1所示:
图3.1网络坦克大战游戏流程
3.1.2TankClient类基本功能分析
TankClient类是整个系统的核心部分,它承担整个系统的所有可实现功能的调度工作。
是整个游戏运行的场所。
TankClient类设计流程图如图3.2所示:
图3.2TankClient类设计流程
TankClient类是主类,通过调用其他类中封装的方法来使整个系统运行起来,下面显示TankClient与各个类之间的关系如图3.3所示:
图3.3游戏系统类关联图
3.1.3Tank类基本功能分析
Tank(坦克)类中,封装了一些变量属性,包括坦克自己的大小(WIDTH,HRIGHT),运动速度(SPRRD_X:
在x轴方向的速度;SPEED_Y:
在Y轴方向的速度)、生命值控制(life)、坦克编号(id)、坦克名(name)、方向控制(dir)、生死控制(live)、好坏控制(good)的变量等。
Tank类中没有main函数,不是主类,它当中只封装一些变量属性和静态方法,被TankClient类调用来实现坦克的一系列动作。
Tank类中的主要方法罗列如下:
(1)getRect()方法
publicRectanglegetRect(){
returnnewRectangle(x,y,this.WIDTH,this.HEIGHT);
}
Rectangle类是碰撞检测的辅助类,通过得到子弹的x,y坐标和宽高度,检测两个矩形是否碰撞(相交);
(2)draw()方法:
负责将所有的活动在屏幕上画出来;
(3)move()方法:
主要负责控制坦克的移动,包括8个方向(左,左上,上,右上,右,右下,下,左下)的控制以及给坦克一个移动的速度;
(4)keyPressed()方法:
设定使用键盘的“↑”“↓”“←”“→”键控制坦克移动;
(5)keyReleased()方法:
处理按键抬起事件,抬起“CTRL”键时,发射炮弹并加入新炮弹,能够逐一发射每一发炮弹、抬起“A”键可以发射超级炮弹等功能;
(6)locationDirection()方法:
定义了炮筒方向,可以向八个方向发射炮弹;
(7)fire()方法:
处理发送子弹的方法;
(8)bumpWithWall()方法:
主要负责处理坦克撞墙事件;
(9)bumpWithTank()方法:
主要到负责处理坦克和坦克相撞事件;
3.1.4Missile类基本功能分析
Misslile(子弹)类和Tank类一样,只封装一些变量属性和静态方法,主要变量包括:
子弹自己的大小(WIDTH,HRIGHT),运动速度(SPRRD_X:
在x轴方向的速度;SPEED_Y:
在Y轴方向的速度)、子弹标示(ID)、所属坦克的id号(TankId用于网络版)等。
Misslie类持有一个TankClient类(大管家)的引用tc,TankClient类要执行发射炮弹操作时调用Missile类中的方法。
Misslie类中的主要方法如下:
(1)draw()方法:
负责画出子弹的所有活动;
(2)move()方法:
先判断方向再移动,并给它一定的移动速度;
(3)getRect()方法:
负责取得子弹的外切方形,为碰撞检测做准备;
(4)hitTan()方法:
检测子弹是否撞到坦克,若撞到返回true,否则返回false;
(5)hitTanks()方法:
检测是否撞到一系列坦克中的一个;
(6)hitWall()方法:
检测子弹和墙是否相撞。
3.1.5Explode类基本功能分析
Explode(爆炸)类也是一个只封装自己的变量和方法的外部包装类,没有main方法,供TankClient主类需要时调用它的draw()方法,当子弹击中坦克时需要产生爆炸。
使用11张图片重叠现实爆炸效果如3.4图所示:
图3.4爆炸图
3.1.6服务器类基本功能分析
TankServer(服务器)类主要负责在网络对战游戏时维护各个在线玩家的基本信息,并动态的维护玩家列表。
联机模式下类关系图如图3.5所示:
3.5联机模式类关联图
3.1.7信息传送类基本功能分析
信息传送类就是用来封装客户端和服务器端的交互信息。
将网络中传递的众多信息封装成可序列化的类,将会使程序有很好的可扩展性。
3.2本章小结
本章首先对整个游戏设计进行了可行性分析,其次对游戏要达到怎么样的需求,要实现哪些功能做以及实现这些功能设计到的类,最后再详细的介绍了系统要实现这些功能所涉及到的各个类之间的关系。
第4章系统实现
4.1游戏主窗体实现
TankClient类负责画出游戏主窗体,它是整个游戏运行和所有活动的场所。
登陆主窗口后,主界面上包括两个下拉菜单条,“游戏”和“帮助”,玩家点击“游戏”菜单条下可以选择游戏模式;“帮助”下拉菜单条中有游戏说明和游戏操作,方便用户了解游戏规则。
为了游戏不至于太单调,还配置了背景音乐。
除此之外,本设计优点是TankClient类还封装了一个update()方法,使用双缓冲消除闪烁现象。
因为刷新重画频率太快,paint()方法还没有完成,会造成逐条显示,影响系统的运行,所以解决办法是创建一个虚拟屏幕,在屏幕的后面,在要画的将所有的东西画在虚拟屏幕上,也就是内存上,画完之后一次性将虚拟屏幕上的内容贴到屏幕上,这样就消除了闪烁现象,用户的眼睛便感觉不到闪烁了。
TankClient类是整个系统的“大管家”,当要执行某动作时,“大管家”只需要调用各个类中封装好的方法,让被调用的类自己去执行它自己的方法,这更体现了面向对象的思想。
游戏主窗体界面如图4.1所示:
图4.1游戏主窗口预览效果图
实现虚拟屏幕消除闪烁的关键代码如下:
publicvoidupdate(Graphicsg){//利用双缓冲消除闪烁的效果
if(offScreenImage==null){
offScreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT);
}
GraphicsgOffScreen=offScreenImage.getGraphics();
Colorc=gOffScreen.getColor();
gOffScreen.setColor(Color.BLACK);
gOffScreen.fillRect(0,0,GAME_WIDTH,GAME_HEIGHT);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage,0,0,null);
}
4.2单机游戏的实现
游戏运行主界面,在下拉菜单中选择单机游戏进入单人模式,通过键盘控制坦克运动,相互对战,当被打中时产生一个爆炸,屏幕左上方显示游戏信息:
子弹数目(出界就死亡)、爆炸数目、敌方坦克数目、玩家坦克生命值(当玩家坦克被击中4次时,游戏结束)、玩家得分。
其效果图如图4.2所示:
图4.2单机游戏模式主界面图
当玩家分数达到60分时可以使用超级炮弹,可同时向八个方向发射炮弹,效果如图4.3所示:
图4.3发射超级炮弹
当玩家被炮弹击中达到4次,而又没有及时吃到增长生命的血块时,提示游戏结束,可以选择重新开始或退出该模式,效果如图4.4所示:
图4.4玩家死亡时游戏界面
4.3联机功能实现
在本系统的实现过程中,在支持网络对战的服务器类的定义中需要使用ServerSocket类来响应多个客户端连接请求,server服务器上需要两大协议,一个是TCP,用来接收客户端;另一个是UDP,用来转发游戏的数据。
Server类系统模型图如图4.5所示:
图4.5Server类系统简单模型图
网络游戏模式下,游戏主要在客户端运行,启动客户端时玩家首先要填写信息之后才能加入到游戏中去,先启动服务器,红色小方块表示确定服务器已连接。
如图4.6所示:
图4.6启动服务器
进入网络模式,输入信息:
IP、Port、选择自己的角色【P(警)\B(匪)】,是玩家加入游戏的必填栏。
游戏主界面图如图4.7所示:
图4.7网络版游戏玩家信息栏
填写好玩家信息,登陆后游戏主界面,进入游戏后,通过玩家坦克上方的ID号(单双数)和颜色(蓝\红)来区分敌友。
游戏界面左上角显示游戏的基本信息,包括玩家姓名,对战坦克数等,如图4.8所示:
图4.8登陆网络模式主界面
多个玩家加入后,开始对战,在此模式中没有吃血块,添加生命值这一功能,所以一旦中弹就死亡被淘汰出局,各个玩家游戏界面上都能显示实时动态,效果如图4.9所示:
图4.9网络版游戏对战实时显示图
网络模式设计主要代码如下:
TankServer(服务器)类代码片段如下:
publicclassTankServer{
publicstaticfinalintTCP_PORT=8888;//TCP的监听端口
publicstaticfinalintUDP_PORT=6666;//UDP的监听端口
publicstaticintID=100;
List