基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx

上传人:b****5 文档编号:19286085 上传时间:2023-01-05 格式:DOCX 页数:24 大小:479.53KB
下载 相关 举报
基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx_第1页
第1页 / 共24页
基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx_第2页
第2页 / 共24页
基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx_第3页
第3页 / 共24页
基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx_第4页
第4页 / 共24页
基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx

《基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。

基于Java的坦克大战游戏的设计与实现毕业设计论文Word文件下载.docx

1.引言

随着社会和时代的进步,来自各个方面的压力让人没精打采,为了分解人们的压力,休养那变得疲顿的头脑和劳累的身心,特设计了坦克大战小游戏,游戏操作非常容易,只要将手指放在键盘上敲击相关的游戏键就可以玩,在玩游戏的过程中能够体验现实生活中没有的快乐,既有利于身心健康,又不会影响工作和学习。

本游戏采用的是基于J2SE标准平台的java编程技术,在Windows7操作系统中使用Eclipse软件进行代码编译,通过方法Graphics()来进行游戏地图界面的绘制,使用了接口技术使一个类能够实现多个接口,使用套接字Socket来完成client端和server端的连接。

Java是一项面向对象编程语言,既包含了C语言的全部优点,又具有面向对象,跨平台性,安全性等特点,是现在程序设计中较为常用的编程语言。

Java具备了“一次编译,处处运行”的特点,很好的体现了其跨平台性和面向对象的特点,允许程序员用感性的思路来进行繁杂的编程。

Eclipse是一个基于java的开放源代码的可扩展开发平台,是知名的跨平台的自由集成开发环境(IDE)Eclipse是一个基于,还捎带了一个标准规范的插件集,包含了Java开发工具(JDK),Eclipse因为安装不同的插件,所以它支持不同的计算机语言,主要用来Java语言开发。

Graphics类是软件包java.awt(其全部类都用来用户界面的创建和图形图像的绘制)下的类,它同意一个应用程序绘制到组件,以及在屏幕图像上进行绘制。

Graphics对象封装了Java支持的基本呈现操作所需的状态信息。

Graphics()方法构造了一个新的Graphics对象,由于Graphics类是抽象类,因此Graphics()方法不可以被直接调用,此构造方法是图形上下文的默认构造方法,通过在组件上调用getGraphics()来创建图形上下文,或者从其他图形上下文获取。

2.系统分析

2.1需求和技术分析

如今的游戏已经成为世界上最大的娱乐休闲项目之一,游戏市场规模持续增长,潜力巨大,我国政府一向以来都特别鼓励游戏产业的发展,特别是我国当地的游戏产业,扶持力度连年加大,由此可见,我国对游戏产业的重视程度。

该坦克大战游戏是对红白机经典90坦克大战的延续,对于80后,90后来说,都是童年里最宝贵的回忆,而80后,90后恰好占据着当今游戏人群的主体,对于他们来说,该坦克大战游戏不仅可以减轻人们的社会压力,放松身心,也可以回味小时候玩红白机游戏的疯狂时光,又不会沉迷于游戏,老少咸宜,能够更好地体验游戏的乐趣。

该程序代码有着贼高的运用率,因此,设计时必须要有相当缜密的逻辑条理思维,还要考虑一些无法操控的因素和所有可能出现的突发事件。

(1)玩家能够通过敲击游戏键来操纵玩家坦克的动作,但对于敌方坦克来说,就要有第一定的自主性和智能型,因为是自动运行。

同时,屏幕上的敌方坦克需要开创一个线程让其自主运行来应对数量过多而导致的混乱。

要精密设置敌方坦克的操作运行算法,不要使游戏太过单一。

(2)要对所有坦克打出的子弹进行实时监测并判断它打到了什么物体对象,因此需要开辟一个独立的线程来处理子弹,还需要控制好所有的物体对象。

在同一时候,在JVM虚拟机上保持运行这么多的线程,可能会造成程序的迟钝,甚至瘫痪。

(3)由于游戏界面中物体对象繁多,为了避免重叠运行,玩家坦克在前进时需要时刻地扫描周围环境。

(4)游戏的动态画面是一个优秀程序不可缺少的组成成分,精美的用户界面是引起玩家兴趣的关键,相关的构图美化技术也需要有所考虑。

(5)在游戏地图中会有许多各种不同的物体对象,这不是绘图方法能够解决的,而且过多的大型photo会束缚程序的大小,所以要准确掌握Graphcis()方法的使用。

同时使用读取外部文件的方法来加载游戏关卡,因为内存有限,不适合用于存储地图关卡。

(6)游戏要对玩家的分数进行记录,这就需要对其功能和属性进行妥善的策划,还需要制作良好的解决方案来处理其存储方式。

(7)为了确保游戏程序的运行顺畅,需要对结构进行严格把控,将算法完善得更精准,还可以运用混淆器对打包后的软件程序进行优化。

2.2功能分析

该坦克大战选择使用以往的游戏规矩。

服务器端创建并设置一个主机,客户端申请连接加入,若其IP输入判断无误,载入地图关卡并开始游戏,在游戏界面中,会实时显示敌方坦克数量和玩家坦克的生命数量及分数。

敌方坦克自行移动和打出子弹,玩家通过敲击键盘来操控自己坦克的动作并打出子弹,子弹无法打中相同阵营的坦克,当两方阵营的子弹相交时会相互抵消,打中对方坦克时会产生爆炸效果,中途可以暂停、发送信息,玩家坦克吃掉超级武器后会赋予其特殊的功能,在游戏地图界面中还同时游戏中还包含了通信功能。

如果取得了胜利,会显示“你过关了!

”,如果失败了,则系统给出“GAMEOEVR!

还想再玩一次吗?

(y/n)”的提示,如果玩家双方都选择继续游戏,则游戏重新加载并开始,不然结束并退出游戏界面。

3.总体设计

3.1总体功能

游戏由服务器端和客户端两部分组成。

在服务器端,ServerModel类主要用来创建主机,ServerView类主要负责服务器端图形界面的面板信息的设置,ServerControler类处理来自服务器视图框架的输入,包括创立通信与帮助信息等,enemy类主要负责敌方坦克的创建,player类主要用来设置玩家的得分及其显示位置等信息,drawingPanel类主要负责服务器端界面窗口的创建和设置,powerUp类主要用来设置子弹属性,例如加快速度、提升火力等,feedbackHandler类主要用来解码从客户端发来的指令字符串,再将其转换成指令来判断游戏失败后玩家是否继续游戏的问题。

在客户端,ClientModel类主要用来设置与服务器的连接,ClientView类主要负责客户端端图形界面的面板信息,ClientControler类主要负责处理来自客户端视图框架的输入和创立通信与帮助信息等,drawingPanel主要用来设置客户端窗口界面,instructionHandler类主要用来解码从服务器端发来的指令字符串,再将其转换成指令来判断游戏失败后玩家是否继续游戏的问题,shield类主要负责设置坦克吃掉头盔图标获得保护时的状态,normalObject类主要用来创建和描绘其他物体对象。

在服务器端和客户端中都存在的类中,Actor类主要用来创建接口,base类主要用来创建基地并设置属性,bullet类主要用来创建子弹并设置属性,Ticker类主要用来创建时间信息,bomb类主要用来创建子弹打出后产生的爆炸效果,river类主要用来创建河道并设置属性,grass类主要负责创建草坪并设置属性,Steelwall类主要用来创建铁墙并设置属性,wall类主要用来创建和设置普通墙及其属性,level类负责创建关卡。

如表1,表2所示。

表1游戏服务器端各类功能表

ServerModel

创建主机

ServerView

设置服务器端图形界面的面板信息

ServerControler

处理来自服务器视图框架的输入

enemy

创建敌方坦克

player

设置玩家的得分及其显示位置等信息

drawingPanel

创建和设置服务器端界面窗口

powerUp

加快子弹速度并提升火力

feedbackHandler

判断指令并执行

Actor

创建接口

base

创建并设置基地

Ticker

创建并设置时间信息

bullet

创建子弹并设置属性

bomb

设置爆炸效果

river

创建河道并设置属性

grass

创建草坪并设置属性

Steelwall

创建铁墙并设置属性

wall

创建普通墙并设置属性

level

创建关卡

表2游戏客户端各类功能表

ClientModel

设置与服务器的连接

ClientView

设置客户端端图形界面的面板信息

ClientControler

负责处理来自客户端视图框架的输入

设置客户端窗口界面

instructionHandler

shield

设置玩家坦克防护盾

normalObject

创建并描绘其他的物体对象

客户端玩家输入主机地址来完成与服务器玩家的连接,双方通过使用指令键来操控自己的坦克,敌方坦克和子弹则是自主随机运行,游戏中会对玩家的分数进行记录,还增加了特殊武器,另外,此游戏还进行了小小的创新,添加了通信功能,客户端与服务器端的连接访问通过使用套接字Socket来实现。

其总体功能如图1所示。

图1总体功能图

3.2坦克大战总体流程图

如图2所示。

图2总体流程图

4.详细设计

4.1面板功能设计

4.1.1基地的设计

base类定义了几个变量,通过构造器初始化了基地的变量参数,使用g.drawImage()方法设置一幅图片来代表基地,通过publicvoidmove(){}来处理基地受到铁墙防护时的变化,使用if()判断语句判断铁墙的保护时间。

游戏的核心重点自然就是基地了,一旦基地被毁,则玩家失败,游戏结束。

游戏面板是游戏程序的关键,这里使用了方法paintComponent(Graphicsg)来进行建立并设置其属性,具体实现代码如下:

publicvoiddraw(Graphicsg){

g.drawImage(base,xPos-12,yPos-12,null);

}

publicvoidpaintComponent(Graphicsg){

GraphicsoffScreenGraphics;

if(offScreenImage==null){

offScreenImage=createImage(640,550);

}

offScreenGraphics=offScreenImage.getGraphics();

myPaint(offScreenGraphics);

g.drawImage(offScreenImage,0,0,this);

4.1.2敌方坦克的设计

enemy类设置了敌方坦克的共同属性,并根据不同外形的坦克设置了不同的属性,如椭圆形的坦克的移动速度会比较快,拥有多层颜色坦克的生命力与其拥有的颜色数量一样,利用随机函数Math.random()*4随机生成一个随机值,并转换成整形数值,将此值赋给变量direction来作为敌方坦克生成时的方向,再将Math.random()*200生成的随机值转换成整形数值,赋予变量interval来作为生成时的时间间隔,并且设置了地方坦克的移动周期,在一个周期内将会朝着相同的方向继续移动,并设置了其发射子弹的遂进行。

而在特殊属性中,分别设置了敌方坦克的的火力、速度、图标等属性,再用方法draw(Graphicsg){}向地图中加入敌方坦克。

具体实现代码如下:

interval=(int)(Math.random()*200);

direction=(int)(Math.random()*4);

if(type==args1){

firePosibility=args2;

speed=args3;

textures=newImage[args4];

if(flashing&

&

gameModel.gameFlow%10>

4)

g.drawImage(textures[textures.length-4+direction],xPos-size,yPos-size,null);

else

g.drawImage(textures[direction],xPos-size,yPos-size,null);

4.1.3河道、草坪的设计

grass类继承了Actor接口,通过grass类构造器定义了草坪的x,y坐标和矩形边界以及图标,通过publicvoiddraw(Graphicsg){}方法绘制了草坪。

游戏双方坦克及其子弹可以自由通过草坪。

publicgrass(inta,intb){

xPos=a;

yPos=b;

border=newRectangle(0,0,0,0);

}

publicvoiddraw(Graphicsg){

g.setColor(newColor(0,225,0));

for(inti=yPos-11;

i<

=yPos+12;

i+=5)

g.drawLine(xPos-12,i,xPos+12,i);

for(inti=xPos-11;

=xPos+12;

g.drawLine(i,yPos-12,i,yPos+12);

g.setColor(newColor(0,128,0));

for(inti=yPos-10;

for(inti=xPos-10;

g.drawLine(i,yPos-12,i,yPos+12);

}

river类继承了Actor接口,用river类构造器定义了河道的x,y坐标和矩形边界以及图标,使用g.drawImage(Image,int,int,ImageObserver)方法设置一幅图片来代表河道。

以前各个经典版本的坦克大战游戏都将河道设置为不允许坦克经过,但子弹可以自由通过,本程序为了遵循经典,也如此设计。

publicriver(inta,intb,ServerModelgameModel){

this.gameModel=gameModel;

river=gameModel.textures[71];

Border=newRectangle(xPos-12,yPos-12,25,25);

g.drawImage(river,xPos-12,yPos-12,null)}

4.1.4墙与铁墙的设计

该模块通过newRectangle(intx,inty,intwidth,intheight)完成了一个矩形的创建,然后将其具体值赋给变量数组border[数组索引]生成了墙。

坐标x和y为绘制矩形时的起始点,width,height分别为矩形绘制的宽和高。

通过构造器定义普通墙和铁墙的矩形边界和图标。

generalBorder=newRectangle(xPos-12,yPos-12,25,25);

border[0]=newRectangle(xPos-11,yPos-11,11,11);

border[1]=newRectangle(xPos+1,yPos-11,11,11);

border[2]=newRectangle(xPos-11,yPos+1,11,11);

border[3]=newRectangle(xPos+1,yPos+1,11,11);

publicwall(inta,intb,intorientation,ServerModelgameModel){

wall=gameModel.textures[70];

generalBorder=newRectangle(xPos-12,yPos-12,25,25);

4.1.5界面窗口的创建

再该模块中,在ServerView类的构造器中用super()方法调用父类构造器设置窗口题目为“坦克大战”,使用JButton(String)定义了六个(退出、帮助、发送、暂停/继续、建立主机和隐藏)鼠标点击事件(即所谓的按钮),JTextField定义文本框,并将其设置为不可编辑。

使用newdrawingPanel()和setBackground(Colorc)创建一个面板并设置背景颜色,再通过setBounds()和setLayout()方法定义了页面的大小并将页面布局定义为空。

通过add()方法向页面添加按钮和文本框。

使用setColor(Colorc)方法设置面板颜色为指定颜色,再通过继承自java.awt.Graphics类中的drawString(String,int,int)方法向面板添加并输出当前关数及剩余敌人数,通过if判断语句进行判断,如果消灭坦克数量大于敌方坦克数量则输出胜利场景。

4.2子弹功能设计

该模块用setColor()方法设置子弹颜色为浅灰色,使用g.fillRect(int,int,int,int)方法设置子弹水平或垂直发射时的形状,子弹和什么东西相交通过if()判断语句和equals()方法来鉴定,然后再处理相交时子弹和其他对象的属性变化。

具体代码如下:

g.setColor(Color.lightGray);

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

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

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

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

if(!

border.intersects(map)){

gameModel.removeActor(this);

notifiyOwner();

makeBomb();

writeToOutputLine();

return;

if(gameModel.actors[i].getType().equals("

steelWall"

)){

Steelwalltemp=(Steelwall)gameModel.actors[i];

if(!

temp.walldestoried){

temp.damageWall(border,bulletpower,direction);

if(temp.bulletdestoried)

hitTarget=true;

}

}elseif(gameModel.actors[i].getType().equals("

wall"

walltem

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1