基于java坦克大战课程设计.docx

上传人:b****1 文档编号:14808804 上传时间:2023-06-27 格式:DOCX 页数:22 大小:142.56KB
下载 相关 举报
基于java坦克大战课程设计.docx_第1页
第1页 / 共22页
基于java坦克大战课程设计.docx_第2页
第2页 / 共22页
基于java坦克大战课程设计.docx_第3页
第3页 / 共22页
基于java坦克大战课程设计.docx_第4页
第4页 / 共22页
基于java坦克大战课程设计.docx_第5页
第5页 / 共22页
基于java坦克大战课程设计.docx_第6页
第6页 / 共22页
基于java坦克大战课程设计.docx_第7页
第7页 / 共22页
基于java坦克大战课程设计.docx_第8页
第8页 / 共22页
基于java坦克大战课程设计.docx_第9页
第9页 / 共22页
基于java坦克大战课程设计.docx_第10页
第10页 / 共22页
基于java坦克大战课程设计.docx_第11页
第11页 / 共22页
基于java坦克大战课程设计.docx_第12页
第12页 / 共22页
基于java坦克大战课程设计.docx_第13页
第13页 / 共22页
基于java坦克大战课程设计.docx_第14页
第14页 / 共22页
基于java坦克大战课程设计.docx_第15页
第15页 / 共22页
基于java坦克大战课程设计.docx_第16页
第16页 / 共22页
基于java坦克大战课程设计.docx_第17页
第17页 / 共22页
基于java坦克大战课程设计.docx_第18页
第18页 / 共22页
基于java坦克大战课程设计.docx_第19页
第19页 / 共22页
基于java坦克大战课程设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于java坦克大战课程设计.docx

《基于java坦克大战课程设计.docx》由会员分享,可在线阅读,更多相关《基于java坦克大战课程设计.docx(22页珍藏版)》请在冰点文库上搜索。

基于java坦克大战课程设计.docx

基于java坦克大战课程设计

摘要

面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,它吸取了结构化程序设计的精华,以更接近人们通常思维的方式来处理问题,是一种全新的软件开发技术。

作为一种新的的编程语言,Java很大程度推广了面向对象的思想。

随着计算机技术的发展,Java的强大展现出它不可替代的作用。

Java的功能不仅体现在它网络方面的应用,对于应用程序设计、游戏设计等Java都能满足需求。

本文针对Java的具体应用,设计了一个小游戏。

根据游戏的规则,用户将可以和计算机进行简单对战。

程序实现了友好的用户交互界面,让用户能很好地对游戏进行操作。

关键字:

JAVA   GUI   游戏

ABSTRACT

TheObject-OrientedMethodisamethodwhichaplliestheObject-OrientedDesigntotheprocessofthesoftwareexploitureanddirectstheployofdevelopment.ItextractstheprimeoftheStructuredDesignforComputerProgrammers,dealsmatterswitha

folksyfashion,whichisconsideredtobeagrandnewsoftware-developtechnique.

Asanewprogramminglanguage,JavaspreadtheObject-OrientedDesigninacertaindegree.Withthedevelopmentofthetechniqueofcomputer,theinsurmountablefunctionofJAVAisexhibitedforits’mightiness.Notonlyappliesinnetwork,JAVAalsocanfulfilltherequirementoftheApplication-DesignandGame-Design.

Inthispaper,tousetheidiographicapplicationofJAVA,Idesignagamecalled.Followingtheregularofthegame,usercanplayasimplerevalrywithcomputer.ThisprogrammeactualizesafolksyGUImode,whichwillmakeusermastergameeasily.

Keywords:

JAVA     GUI   Game

 

一、背景与意义

1背景

游戏是全球最大的娱乐经济项目之一,已经被命名为“第九艺术”。

而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,已成为了一系列专门的岗位。

面对游戏产业如此巨大的市场空间,国内各大城市纷纷加大了这方面的人才培养,中国的游戏人才培训已随着游戏行业的总体发展开始逐步迈入了正轨。

虽然说中国的游戏行业开始逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏又直接制约着行业的发展,这就更加严格了对社会培训机构的稳定性和正规性的要求。

在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。

所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,来满足社会对游戏人才的需求。

《坦克大战》(Battle City)是1985年日本南梦宫Namco游戏公司在任天堂FC(FamilyComputer)平台上,推出的一款多方位平面射击游戏。

游戏以坦克战斗及保卫基地为主题。

大部分80后的青年人曾经都玩过这款FC平台上的经典游戏,FC平台上的坦克大战只能两个人协同作战。

本系统运用Java这个跨平台的编程语言,在PC上重新实现这一款经典游戏,探究曾经这一款经典游戏的大概设计与实现,并且加入坦克八个方向的行走,多人的局域网对战模式,使游戏的玩法更丰富。

2课程设计内容

坦克大战游戏是一种动作电子游戏的名称。

坦克大战游戏是一种动作电子游

戏的名称。

玩家操作一辆己方坦克,消灭屏幕中不断出现敌方坦克。

己方坦克有

血量限制,被敌方坦克的炮弹击中会减少血量,当血量为0时,任务失败。

(1)基本的游戏操作

用户可以通过键盘来操作自己的坦克,尽量不让敌方坦克的炮弹击中自己

(2)计分,记时功能

用户在游戏的过程中,系统将记录游戏的成绩

二、坦克大战小游戏应用程序

2.1坦克大战小游戏应用程序概述

此程序设计是一个小游戏(坦克大战)的实现,主要运用了用户图形界面,

程序接口和基本函数绘制来实现,事件监听(包括鼠标事件,键盘事件,响应时

间)也是这个程序的特色。

总之,本游戏在用户界面的可操作性、游戏的美观度、

计分计时存储结果方便都基本完善,有一定的可玩性。

2.1.1坦克大战小游戏系统任务及目的

此小程序是为群众闲暇消遣之用,玩家在进入游戏后按游戏规则击毁敌

方坦克获得相应的分数,进入下一关,直到全部过关。

2.2主要特色系统介绍

玩家在使用此程序时更加能体验到乐趣。

当玩家死亡以后,可以原地复活是

本游戏的特色,可以激发玩家的游戏兴趣。

2.3小结

虽然游戏在功能和界面上不能算的上很棒,但是麻雀虽小,五脏俱全,游戏

具备了坦克大战这个经典游戏锁应该具有的基本雏形。

通过这一章,我们对这个

游戏应该有了比较宏观的了解,我们将在这一基础上探究游戏更完美的改变。

三坦克大战小游戏系统的设计

这一章是坦克大战游戏系统的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。

3.1系统需求分析

坦克大战的设计目标为:

(1)实现坦克大战游戏功能,用键盘控制坦克

(2)实现游戏难度和游戏模型的选择,通过本关后可以选择进入下一关。

(3)加强游戏可玩性。

3.2系统开发及运行环境

硬件平台:

CPU:

INTEL-I5。

内存:

1024MB以上。

软件平台:

操作系统:

WindowsXP。

数据库:

TXT文档。

开发工具包:

JDKVersion1.6.2。

最佳分辨率:

800X600

3.3系统主要功能要求

本系统为了实现游戏坦克大战。

主要实现如下功能:

系统界面美观大方舒适;

实现游戏一些基础信息的保存和读取;

画面流畅,具有可玩性没有较大的游戏BUG;

显示游戏者的游戏时间和积分;

系统最大限度地实现了易维护性和易操作性;

系统运行稳定、安全可靠;

玩家死亡以后如不想从新开始可以继续游戏。

3.4坦克大战系统总体结构

坦克大战游戏是基于基本的软件和普通硬件基础上的传统优秀游戏,一个游

戏应该包括以下几大功能,如图:

(1)总体结构

 

3.5系统数据流图

游戏信息的流向,即系统数据流图如图2.3所示

(2)系统数据流图

四、设计原理及方案

本系统的坦克大战是基于Java语言设计开发的,具有高超的人工智能,精美的图形处理,支持单机运行和网络对战的坦克射击游戏。

比之前网络上实现的游戏更加方便,快捷,智能。

游戏基本玩法较简单,游戏可一人电脑作战,每次电脑方有坦克10辆,游戏以消灭全部敌方坦克过关为目的。

在这过程中,坦克有机会得到血块来添加生命值,从而变得更加强大,也能利用各种有利地形来阻击敌人。

游戏设置了墙面,电脑方坦克不能穿越墙面射击玩家坦克,而玩家坦克可随意穿越墙面打击电脑方坦克,这一游戏特权。

还有给玩家坦克设置超级炮弹,当电脑方坦克数量过多时,玩家坦克可以发射超级炮弹打击敌方。

主要新增的功能简单罗列如下:

4.1屏幕左上方显示游戏状态,当玩家方坦克数全为零时则游戏结束;

4.2一般坦克只可在空地中或草丛中行走,不可通过墙面等障碍物;

4.3游戏中打坏敌方坦克后,可能会在随机位置随机出现血块奖励,坦克经过该位置可获得相应加生命值奖励;

4.4玩家坦克的游戏资格和电脑坦克不同。

4.5工作流程图:

 

图(3)工作流程图

五、系统具体实现

界面是系统和玩家之间最直接的交互界面,界面的友好性体现了程序设计的质量,界面是否便捷易懂也是程序所基本的要求。

5.1界面设计

5.1.1用户登录界面图

图(4)用户登录界面图

 

5.1.2游戏主界面

图(5)进入游戏后的界面

5.2程序设计及调试运行

编写12个CLASS文件,装入一个包中,各个模块的程序代码都完成后,进行编译连接运行,经过反复调试,找出错误和不足,以达到游戏所需的基本功能和基本界面。

这个过程比较繁琐,我们参考网络上现有的资源,并加以改进,对各个模块仔细分析备注并进行调试,做到程序简洁易懂,可读性好。

尽量避免因代码不完善而导致的游戏运行中可能出现的错误。

5.2.1自动计血量

游戏的自动计血量功能是非常有必要的,可以让玩家很直观地看到自己所玩的剩余血量。

下面是自动计血量功能的部分关键代码:

privateclassBloodBar{

publicvoiddraw(Graphicsg){

Colorc=g.getColor();

g.setColor(Color.RED);

g.drawRect(x,y-10,WIDTH,10);

intw=WIDTH*life/100;

g.fillRect(x,y-10,w,10);

g.setColor(c);

}

5.2.2对坦克方向的控制

通过上下左右四个键,可以控制坦克向八个方向灵活的移动

voidlocalDirection(){

if(bL&&!

bU&&!

bR&&!

bD)dir=Direction.L;

elseif(bL&&bU&&!

bR&&!

bD)dir=Direction.LU;

elseif(bL&&!

bU&&!

bR&&bD)dir=Direction.LD;

elseif(!

bL&&bU&&!

bR&&!

bD)dir=Direction.U;

elseif(!

bL&&!

bU&&!

bR&&bD)dir=Direction.D;

elseif(!

bL&&!

bU&&bR&&bD)dir=Direction.RD;

elseif(!

bL&&bU&&bR&&!

bD)dir=Direction.RU;

elseif(!

bL&&!

bU&&bR&&!

bD)dir=Direction.R;

elsedir=Direction.STOP;

}

六、详细设计过程与算法实现

6.1游戏主窗口

游戏主窗口是人机交互的窗口,对玩家而言,他们只和游戏主窗口打交道,并不关心游戏内部是如何实现的,所以游戏主窗口部分最重要的便是游戏数据的输入、输出。

在程序中须创建一个类TankClient,继承自Frame来创建一个窗口。

6.2游戏数据的输入

游戏中坦克需要能往上、下、左、右四个方向运动,故须设立4个按键,使其能作坦克,另须设一个键控制坦克开火。

为方便操作,本游戏设置WSAD分别表示上下左右,小键盘数字键4,表示开火。

具体实现为,为窗口添加KeyListener(键盘监听器),监听键盘的按下和抬起。

在TankClient类中添加内部的适配器类,由于不需要其它类访问,将其设计为private的,以保证面向对象设计的封装性。

代码如下:

/*

*移动按键键盘监听器

*/

privateclassMoveKeyLextendsKeyAdapter{

publicvoidkeyPressed(KeyEvente){

switch(e.getKeyCode()){

caseKeyEvent.VK_A:

myTank.keyDownToDir(Direction.L);

break;

caseKeyEvent.VK_W:

myTank.keyDownToDir(Direction.U);

break;

caseKeyEvent.VK_D:

myTank.keyDownToDir(Direction.R);

break;

caseKeyEvent.VK_S:

myTank.keyDownToDir(Direction.D);

break;

}

}

publicvoidkeyReleased(KeyEvente){

switch(e.getKeyCode()){

caseKeyEvent.VK_A:

myTank.keyUpToDir(Direction.L);

break;

caseKeyEvent.VK_W:

myTank.keyUpToDir(Direction.U);

break;

caseKeyEvent.VK_D:

myTank.keyUpToDir(Direction.R);

break;

caseKeyEvent.VK_S:

myTank.keyUpToDir(Direction.D);

break;

}

}

}

/*

*开火按键键盘监听器

*/

privateclassFireKeyLextendsKeyAdapter{

publicvoidkeyReleased(KeyEvente){

switch(e.getKeyCode()){

caseKeyEvent.VK_NUMPAD4:

myTank.fire();

newTankFireMsg().send();

break;

}

}

}

6.3游戏数据的输出

玩家需要从游戏输出数据中获得游戏信息,如坦克在往上行驶、坦克发了颗子弹、坦克爆炸等,这些均需要通过游戏数据的输出来告知玩家。

由于TankClient继承自Frame,Frame类中的方法paint,可以在窗口中绘制图形,即满足了游戏需要图形界面的需求;另有方法repaint可以刷新窗口,以及时提供游戏信息,故须创建线程,不断地刷新窗口,来获取最新的游戏信息。

代码如下:

publicvoidpaint(Graphiceg){

for(inti=0;i

intallGEOldSize=allGE.size();

GameElementge=allGE.get(i);

if(geinstanceofMoveable){

Moveablemoveable=(Moveable)ge;

moveable.move();

}

ge.draw(g);

/*

*如果容器数量减少,则减少相应的遍历索引i

*/

if(0

i-=allGEOldSize-allGE.size();

}

}

/*

*刷屏线程,负责画面的刷新以及游戏时间的推进

*/

privateclassMyThimplementsRunnable{

publicvoidrun(){

while(true){

repaint();

try{

Thread.sleep(25);

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

}

}

为使游戏主窗口效率更高、更容易被引用,且游戏主窗口只有一个,故TankClient类使用单例模式来设计:

privatestaticfinalTankClienttc=newTankClient();

privateTankClient(){

...

}

publicstaticTankClientgetTc(){

returntc;

}

6.4网络管理

游戏需要对局域网对战的支持,所以需要对网络数据进行管理,使游戏能有条不紊地运行,网络管理部分主要负责输入游戏数据后发往其它游戏客户端,以及接收其它客户端发来的游戏数据。

需要发送的游戏数据有:

坦克创建消息(TankCreateMsg)、坦克开火消息(TankFireMsg)等

6.5客户端游戏数据的收发

由于每个游戏消息都有共同的特性,即发送、接受,故将其抽象出一个父类Msg,所有的消息类都继承自Msg类。

publicabstractclassMsg{

publicstaticfinalTankClienttc=TankClient.getTc();

publicstaticfinalintTANK_CREATE_MSG=1;

publicstaticfinalintTANK_CHANGEDIR_MSG=2;

publicstaticfinalintTANK_CALIBRATION_MSG=3;

publicstaticfinalintTANK_FIRE_MSG=4;

publicstaticfinalintCHAT_WORD_MSG=5;

publicstaticfinalintTANK_READY_MSG=6;

publicstaticfinalintGAME_START_MSG=7;

publicstaticfinalintGAME_OVER_MSG=8;

publicstaticfinalintGAME_EXIT_MSG=9;

publicstaticfinalintGAME_CHANGEMASTER_MSG=10;

publicabstractvoidsend();

publicabstractvoidreceive(DataInputStreamdis);

}

在需要向每个游戏客户端发送游戏消息时只需实例化一个相应的对象,在调用send方法即可,接收时调用receive方法。

6.6服务器端游戏数据的收发

服务器端的设计,只需将所有接收到的包转发给所有游戏客户端即可。

接收:

publicclassUDPThreadimplementsRunnable{

publicvoidrun(){

byte[]buf=newbyte[1024];

DatagramSocketds=null;

try{

ds=newDatagramSocket(ServerMain.SERVER_UDP_PORT);

}catch(SocketExceptione){

e.printStackTrace();

}

while(true){

DatagramPacketdp=newDatagramPacket(buf,buf.length);

try{

ds.receive(dp);

ServerMain.sendToEveryone(ds,dp);

}catch(IOExceptione){

e.printStackTrace();

}

}

}

}

转发:

publicstaticvoidsendToEveryone(DatagramSocketds,DatagramPacketdp){

for(inti=0;i

try{

Clientc=ServerMain.clients.get(i);

StringIP=c.IP;

intport=c.udpPort;

dp.setSocketAddress(newInetSocketAddress(IP,port));

ds.send(dp);

}catch(IOExceptione){

e.printStackTrace();

}

}

}

6.7封装的游戏元素

将游戏元素(坦克、子弹、墙等)封装成一个一个的类,将大大地降低游戏设计、实现难度,且符合面向对象的设计方法。

由于这些游戏元素都有一些相同的属性、方法,故将其抽象为父类GameElement。

publicabstractclassGameElement{

/**

*持有游戏主窗口的引用

*/

publicstaticfinalTankClienttc=TankClient.getTc();

/**

*元素的坐标

*/

publicRectanglerect;

/**

*元素的类型(队伍)

*/

publicGameElementKindkind=GameElementKind.DEMON;

/**

*由游戏主窗口自动调用,将决定该元素的在游戏中的表现形式

*/

publicabstractvoiddraw(Graphicsg);

}

程序中共有如下游戏元素:

Blast:

爆炸效果

Bullet:

子弹

ChatWord:

群聊的内容

Tank:

坦克

Wall:

七、程序运行结果截图

图(6)

图(7)

图(8)

图(9)

图(10)

图(11)

 

7.1发现的BUG及不足

1)由于没有添加操作说明,使玩家不知如何操作,大大地影响了游戏的可操作性。

2)在测试环境测试时,出现画面抖动现象,严重地影响了游戏的进行,必须找到原因并改正。

7.2解决方法

1)在程序启动时告知玩家游戏该如何操作,使玩家能清楚、正确地开始游戏。

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

当前位置:首页 > 经管营销 > 经济市场

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

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