Java语言坦克大战游戏设计附有代码和图片Word格式文档下载.docx
《Java语言坦克大战游戏设计附有代码和图片Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Java语言坦克大战游戏设计附有代码和图片Word格式文档下载.docx(41页珍藏版)》请在冰豆网上搜索。
andotherclassicgameshavebeenmanypeopleknow,ishowmany80oreven90afterthetalk.
BasedonthedesignoftheJavaTankWarsgameusingjavalanguagefortheobjectofthought,intheprocessofdesign,thegameofallobjectsaregiventheconceptoftheobjectandattribute.Thegame'
sdesignisinthegame,theplayers,throughtheupperandlowerkeystocontrolthetank,andhittheshell,todestroyalltheenemiesforthepurposeofthegame.Inthecourseofthegame,theenemy'
stankswillalsobeintelligenttoescapetheplayerstoplayoutthebullet.Throughthegamedesign,isaconvenientandflexibleuseofJavalanguage.
Keywords:
networktechnology,Java,object-oriented,intelligent
第一章游戏简要说明
《坦克大战》作为曾经风靡全球的一款FC游戏,可谓是曾经经典中的经典,其极为出色的游戏性令全球众多玩家为之疯狂,更是多少80后甚至90后津津乐道的游戏之一。
《坦克大战》是一款以红白机为平台操作设计游戏。
玩家通过控制自己的坦克进行射击,以击毁敌方坦克为目的,每个关卡中有着不同的地形和障碍物,玩家可以利用地形中的障碍物进行射击,障碍物可以阻挡敌方的坦克的子弹,同时,也可以阻挡玩家自身打出来的子弹。
因此在游戏中,玩家要利用好地图中的障碍物,来保障自身的安全,以达到消灭敌军的目的。
在游戏中,还设置了有各种各样的补给。
游戏中坦克能向八个方向移动和开炮,并且坦克与坦克之间不可相互穿越。
坦克打出来的炮弹若击中对方,就会产生爆炸现象。
玩家的坦克不仅有生命值,而且还有生命个数,当玩家坦克遭到敌方坦克子弹的击打之后,玩家坦克的生命值就会减少,当玩家坦克的生命值减到0时,玩家的坦克就爆炸,同时也会减少一辆坦克数量,玩家也可以通过地图上随机出现的血块来增加自己的血量。
当玩家消灭所有的敌方坦克的时候,此时游戏结束;
若玩家的坦克被打死,可以按F2键进行开始新的游戏。
其操作简单且娱乐性强,是一款男女老少皆宜的游戏。
游戏附带地图编辑器,玩家可自行编辑地图进行游戏。
游戏中的众多经典关卡至今还让许多玩家记忆犹新,在80年代时曾经在无数家庭中带来了无尽的欢乐。
第二章开发环境介绍
2.1开发环境
操作系统:
win8.1
开发语言:
java
开发工具:
Eclipse
2.2java语言特点简介
(1)简单
java语言的语法很简单,容易掌握,并且它是纯面向对象的语言。
Java语言的简单性可以在下面几点体现出来:
1.1语言的语法与C++很相似,从某种角度上说,java是C和C++转变来的,因此,学过C语言的人员可以很轻松的掌握java的语法。
1.2java对C++语言进行了提高和简化。
如,java取消了指针,并且使用接口取代了多重继承,因指针和多重继承往往使程序变得复杂。
1.3java提供了很多类库,API文档和第三方开发包,此外,还有丰富的基于java的开发项目,JDK已经开放源代码,学者可通过分析这些源代码,从而来提高自己的水平。
(2)面向对象
面向对象是java语言的最重要的部分,同时也是java语言的基础部分,java语言本身就是一种纯面向对象的语言。
在Java语言中,提倡万物皆面向对象,语法中不能在类外面定义单独的数据和函数,简而言之,java语言最外部的函数类型是对象,所有的元素只能通过类和对象来访问。
(3)分布性
Java语言的分布性包括操作分布和数据分布,操作分布是指在多个不同的主机上布置相关操作。
(4)可移植性
Java语言程序具有与体系结构无关的特性,可以很方便的移植到不同型号的计算机中。
此外,java的类库中也实现了多不同平台的接口,使得这些类库可以移植。
(5)解释性
Java语言程序的运行需要解释器。
任何移植了java解释器的计算机或者其他设备都可以用java字节码进行解释执行。
字节码独立于平台,他本身携带了许多编译时的信息,使得连接过程更加简单,开发过程更加迅速,更加具有探索性。
(6)安全性
Java语言没有像C语言中的指针和内存释放等语法,可以有效避免非法操作内存,并且java代码要经过指针校验,代码校验等测试步骤才能运行,因此,可以很好的保护系统平台。
(7)健壮性
java程序是以编写多方面的、可靠性的运用为目标的。
在编译运行时可以检查错误,消除错误。
能更好的帮助用户检测早期出现的错误。
(8)多线程
多线程机制能够让程序在同一个时间点同时运行多个任务,同时相应的同步机制可以保证不同线程能够正确的共享数据。
(9)高性能
java编译后的字节码是在解释器中运行的,因此它的速度比多数交互式运用程序提高了许多,此外,字节码可以在程序运行时被翻译成特定平台的机器指令,从而实现运行速度的提高。
(10)动态
java语言在很多方面比C或C++更能适应发展的环境,可以动态调整库中的方法和增加变量,而客户端却不需要任何更改。
在java中进行动态调整是非常简单和直接的。
2.3Eclipse开发工具的简介
Eclipse是由IBM公司投资4000万美元开发的集成开发工具。
它是基于java语言编写,并且是开放源代码的、可扩展的,也是目前全球最流行、使用最多的java开发工具之一。
另外,IBM公司捐出Eclipse源代码,组建Eclipse联盟,它专门负责这种工具的后续开发。
Eclipse为程序员提供了很好的java程序开发环境,它的平台系统结构是在插件概念的基础上构建起来的,插件是Eclipse平台最具有特色的特征,同时也是区别于其他开发工具的特征之一。
第三章系统总体设计
3.1程序功能的总和
表
(1)程序表的功能
程序名
程序功能
TankClient.java
游戏的主窗口
Tank.java
坦克的数据和方法
Missile.java
炮弹的数据和方法
Explore.java
爆炸的数据和方法
Wall.java
墙的数据和方法
Blood.java
血块的数据和方法
3.2主体模块
主体是由TankClient.java文件来实现的,主要负责各个类的调用和游戏窗口的创建。
该类中的变量还有:
1.游戏的高度intGAME_HEIGHT
2.游戏的宽度intGAME_WIDTH
此外,lauchFrame()方法、paint()方法和update()方法也包括在该类中,其功能分别为实现显示坦克主窗口、重画时调用和使用双缓冲消除闪烁现象。
3.3子弹模块
子弹模块由Missile.java文件实现,可以实现子弹打坦克和判断子弹是否是活着的功能。
该类的变量有如下:
1.x方向上的速度intXSPEED
2.Y方向上的速度intYSPEED
3.子弹的高度intHEIGHT
除了这几个变量外,hitTank()方法和Islive()方法也包括在该类中,其功能分别为实现子弹撞坦克和判断子弹是否还活着。
3.4坦克模块
在坦克模块中可以实现很多功能,如:
创建坦克,让坦克能打出子弹,处理坦克和墙相互穿越的问题,为玩家坦克加入血条以及让敌人的坦克智能化的问题。
在Tank类中的变量有:
3.坦克的高度intHEIGHT
该类中还包括collidesWithWall()方法和Eat()方法,其功能分别为实现判断坦克和墙相撞的问题和坦克吃到血的问题。
3.5墙模块
该模块由Wall.java文件实现,在游戏添加两堵墙,处理坦克和墙相撞的问题。
Wall类中成员变量有:
1.坦克在x方向上的速度intXSPEED
2.坦克在y方向上的速度intYSPEED
该类中还包括collidesWithWall()方法,其功能为处理坦克和墙相撞的问题。
3.6血液模块
该模块由Blood.java文件实现,添加必要的方法,让血块按照一定轨迹运动,并在一定时间消失。
该类中的变量有:
1.血块在X轴的坐标intX
2.血块在X轴的坐标intY
3.血块的高度intH
该类中还包括Move()方法和islive()方法,其功能分别为处理血块移动的问题和判断血块是否还活着的问题。
3.7爆炸模块
该模块由Explode.java文件实现,击毙一辆坦克后产生爆炸。
1.坦克生死的描述booleanLive
2.主类的变量TankClientTc
该类中还包括GetDefaultToolkit()方法Draw(Graphics)方法,其功能分别为拿到的工具包和画爆炸现象。
第四章游戏详细设计过程
4.1创建游戏窗口
在游戏设计的前期,要先创建游戏的界面,也就是要为所设计的游戏创建一个窗口,可通过如下代码实现:
importjava.awt.*;
publicclassTankClientextendsFrame{
publicvoidlauchFrame(){
this.setLocation(400,300);
this.setSize(800,600);
setVisible(true);
}
publicstaticvoidmain(String[]args){
TankClienttc=newTankClient();
tc.lauchFrame();
}
当运行代码是会发现,这样建立的窗口的大小是可以随意变化的,然而在实际中我们不希望窗口任意改变,这样不仅影响了用户体验,而且还会影响游戏的可行性,因此,我们需要对现有的窗口进行有必要的改进,把窗口的大小固定,改进的代码如下:
importjava.awt.event.*;
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
this.setResizable(false);
setVisible(true);
}产生如下不可随意改动窗口:
图
(1)游戏窗口
4.2改变游戏背景颜色。
图
(2)改变颜色的游戏窗口
this.setBackground(color.GREEN);
/*改变背景颜色,这里改为绿色,我们还可以改成其他的颜色*/
4.3创建坦克
我们用创建一个实心圆来表示游戏中的坦克,此坦克代表我方的坦克,通过重写paint方法来实现。
图(3)我方坦克的创建
publicvoidpaint(Graphicsg){
Colorc=g.getColor();
g.setColor(Color.RED);
g.fillOval(50,50,30,30);
g.setColor(c);
}
4.4让坦克动起来
上面我们所创建的坦克还不能动,显然不是我们要设计游戏的目的,因此。
我们要给我们所设计的坦克赋予“生命”。
具体实现步骤为:
(1)将位置改变为变量;
(2)启动线程不断重画;
(3)每次重画改变坦克的位置。
需要注意的是x,y值得含义指的是小方块左上角的点。
图(4)单个坦克单个方向移动
privateclassPaintThreadimplementsRunnable{
publicvoidrun(){
while(true){
repaint();
try{
Thread.sleep(100);
}catch(InterruptedExceptione){
e.printStackTrace();
}
4.5改变窗口的大小
很多时候我们需要调节窗口的大小,在程序少的情况下我们可以通过直接改程序中的参数,但是,当我们的程序变得很多的时候,我们会发现当我们要改窗口的大小时,会觉得力不从心,不仅要改的地方很多,既费时又费力,而且还很容易出错,这时,我们可以给窗口的宽度和高度定义一个变量,通过代码重构实现,将以后可能需要多处改变的量定义为常量。
如下:
publicstaticfinalintGAME_WIDTH=800;
publicstaticfinalintGAME_HEIGHT=640;
以后我们需要用到窗口尺寸的地方就可以用GAME_WIDTH、GAME_HEIGHT来代替,这样就可为我们的以后修改提供很多便捷。
注意:
常量一般是publicstaticfinal的。
且常量名一般都用大写。
4.6让坦克受控制
在4.4中我们建立的坦克虽然可以移动,但移动方向为一直向下,且不受控制,因此我们要为TankClient建立一个键盘监听类,让坦克听从我们的控制。
步骤:
(1)添加键盘监听器类KeyMonitor;
(2)TankClient添加键盘监听器;
(3)针对不同的键改变坦克的位置,与重画线程结合产生不同方向运动。
图(5)可向四个方向移动的坦克
privateclassKeyMonitorextendsKeyAdapter{
publicvoidkeyPressed(KeyEvente){
intkey=e.getKeyCode();
switch(key){
caseKeyEvent.VK_LEFT:
x-=5;
break;
caseKeyEvent.VK_UP:
y-=5;
caseKeyEvent.VK_RIGHT:
x+=5;
caseKeyEvent.VK_DOWN:
y+=5;
}
4.7创建一个Tank类
1.将坦克单独包装成类
2.步骤:
(1)建立坦克类;
(2)为Tank类添加成员变量x,y;
(3)添加draw方法,使Tank类独立控制自己的画法;
(4)添加Tank类的处理按键的方法;
(5)根据Tank类修改TankClient类。
publicclassTank{
intx,y;
publicTank(intx,inty){
this.x=x;
this.y=y;
publicvoiddraw(Graphicsg){
Colorc=g.getColor();
g.setColor(Color.RED);
/*坦克是颜色*/
g.fillOval(x,y,30,30);
g.setColor(c);
intkey=e.getKeyCode();
4.8让坦克向8个方向移动
前面所设计的坦克只能朝4个方向走,为了让游戏更加具有可玩性,我们为坦克再添加四个方向,让坦克能够朝8个方向移动。
具体的步骤为:
(1)添加记录按键状态的布尔量;
(2)添加代表方向的量(枚举);
(3)根据按键状态确定Tank的方向;
(4)根据方向进行下一步的移动(move)。
voidmove(){
switch(dir){
caseL:
x-=XSPEED;
break;
caseLU:
y-=YSPEED;
caseU:
caseRU:
x+=XSPEED;
caseR:
caseRD:
y+=YSPEED;
caseD:
caseLD:
caseSTOP:
bL=true;
bU=true;
bR=true;
bD=true;
locateDirection();
}voidlocateDirection(){
if(bL&
&
!
bU&
bR&
!
bD)dir=Direction.L;
elseif(bL&
bU&
bD)dir=Direction.LU;
elseif(!
bL&
bD)dir=Direction.U;
bR&
bD)dir=Direction.RU;
bD)dir=Direction.R;
bD)dir=Direction.RD;
bD)dir=Direction.D;
bD)dir=Direction.LD;
bD)dir=Direction.STOP;
4.9修改4.8中所设计的不足
(1)处理键抬起的消息;
(2)修改TankClient相关代码
4.10添加子弹类
通过前面的的操作,我们所设计的坦克已经能够听从我们的控制。
在这一节中,我们要为坦克设计子弹。
具体的操作为:
1.添加子弹Missile类;
2.添加x,y,dir等属性以及常量;
1)添加构造方法,draw方法等必要方法;
2)根据不同的方向进行不同的运动;
3)在TankClient中模拟一颗子弹(new一颗子弹出来,画出子弹)。
图(6)坦克打出的子弹
publicclassMissile{
publicstaticfinalintXSPEED=10;
publicstaticfinalintYSPEED=10;
Tank.Directiondir;
publicMissile(intx,inty,Tan