admin 管理员组

文章数量: 1086019


2024年2月28日发(作者:怎么配置tomcat服务器)

基于java的游戏坦克大战论文

文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]

0

1

2

5

1

第一章 绪论

课题研究的背景

如今我们的生活节奏越来越快,每个人的生活压力也在不断变大,长期紧绷着神经容易产生心理和生理上的双重伤害,人们需要在工作和学习之外放松自己,玩玩游戏正是放松自己的方式之一。

坦克大战,一个众所周知的小游戏,曾经在红白机时代风靡一时。其界面简单,耐玩,关卡多,可玩性高,没有局限的年龄层。

Java是现在全球最时髦的开发工具之一,它拥有庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机,总之,Java的出现,确实给整个程序界带来了巨大的冲击,也许现在还无法准确评估Java为整个IT业带来的影响,但是有一点毋庸置疑—Java将不可避免的影响一带程序员。

使用Java作为开发工具,来做坦克大战这个小游戏,是一种很理性的选择。Java游戏可以在本地桌面系统下运行,也可以在Web浏览器下运行。

我在大学四年中学到了很多计算机的知识,JAVA语言,软件工程,数据结构,软件工程等课程。如今我将用我所学的知识来完成一个坦克大战游戏,来锻炼自己的动手能力,独立作出一个小程序。

课题研究的任务

本文中所做的主要工作如下:

(1)

介绍了制作坦克大战游戏的意义和目的。

(2)

设计坦克大战游戏各个类,实现各类效果和目标。

(3)

分析并解决游戏中的若干技术问题。

(4)

完成坦克大战游戏,进行测试并分析结果.

第二章 系统分析

课题的可行性分析

1、课题要求

(1)与实践活动和相关的文件和资料由教师提供。

(2)本课题要求学生有熟练的Java开发能力,有较强的自学能力。

(3)具体问题再做详细调查研究并与指导老师面谈。

2、可行性分析

技术可行性:游戏对机器没有多大要求,现在无论什么电脑,只要能安装J2SDK,就能在电脑上开发这款游戏。制作出来的游戏可以在本地桌面运行,也可在WEB上运行,现在JAVA语言非常成熟,完全能够完成这个游戏。

经济可行性:开发这个游戏除了耗费自己的时间和精力以外,不需要其他的资金问题,完成后放到网上开放下载,无需任何费用,有兴趣的人可以自己下载来玩。

需求分析

在游戏中需要实现的功能:

(1)能够通过键盘自由控制坦克移动和发射子弹;

(2)敌方坦克能够随机移动和随机发射子弹;

(3)子弹和不同阵营坦克碰撞后会产生爆炸;

(4)消灭敌方坦克后会有个计分板记录玩家得分

(5)游戏进行到一半时可以暂停退出,下次打开游戏时选继续游戏可以继续之前的游戏。

第三章 系统总体设计

游戏总体流程设计

开始新游戏时,先进行初始化,然后调用敌方坦克类和我方坦克类,实现键盘监听功能,战场显示所有坦克的移动,发射子弹。判断子弹和敌方坦克的碰撞,调用爆炸类,调用记录类,修改玩家总得分。

图 总体流程图

游戏界面设计

(1)开始菜单

界面左上角设置个游戏菜单,里面含有“开始新游戏”、“继续游戏”、“存盘退出”、“退出游戏”这几个下拉选项,玩家可通过这些选项控制游戏的开始,存盘,与结束。

图 开始菜单

(2)战场

窗口中间是坦克大战的战场,里面显示敌我双方坦克,以及各自发出的子弹,坦克的一切行为都会显示在战场上。

图 战场

(3)坦克剩余数

战场正下方显示我方坦克剩余生命和敌方坦克剩余数量。

图 坦克剩余数

(4)玩家总成绩

战场右边显示玩家击毁敌方坦克所得到的的总成绩。

图 玩家总成绩

第四章 游戏详细设计

各个类的设计

(1) 坦克类是系统中最主要的一个类,坦克的属性:速度(X轴和Y轴速度),坦克的大小,坦克所在坐标,坦克的方向,坦克存活与否。这些属性都有一个初始化值,游戏一开始就可以运行。

设计过程中,坦克出现的位置是由坦克的坐标而定。玩家的位置由键盘监听方向,按照指定方向以一定的速度前进——这个速度是全局静态变量,当没有键盘控制的时候,坦克就会保持静止。敌方的坦克是用随机数来控制方向和路径的。通过TouchotherEnemy()来判断是否碰撞到别的敌方坦克。

我方坦克的方向和子弹发射都是由键盘来控制,所以在坦克类里用keypressed()方法来接受键盘的按键监听,接受到相应的信息后,例如

接到X,则表示发射子弹,此时就要调用坦克类里的fire()方法。接受到方向键,则会对坦克坐标做出相应的变化。

图 坦克类

图红色我方坦克 黄色敌方坦克

(2)子弹类需要依附坦克类,每个坦克都可以发射子弹,子弹的方向和速度都在子弹类里。当子弹碰到敌方坦克或跑出战场后,子弹线程便会结束。

图 子弹类

图 红色我方子弹 黄色敌方子弹

(3)爆炸类是取决子弹类。每当子弹碰到敌方坦克时,子弹线程结束,并调用爆炸类,爆炸类会读取坦克即时的坐标,并用连续的三张图片显示出爆炸效果。

图 爆炸类

程序的其他设计

(1)图形用户界面要用抽象窗口工具AWT和Swing来实现,在选择开始新游戏前,实现屏幕中央关数的闪屏效果。

class StartPanel extends JPanel implements Runnable

{

int time=0;

public void paint(Graphics g)

{

(g);

(0, 0, 900, 600);

if(time%2==0)

{

}

}

;

(new Font("宋体",,30));

("stage:1", 400, 250);

@Override

public void run() {

程序不能由其程序员来测试。测试是为了找错。从心理学角度上讲,程序员对自己做的程序会觉得不会有多少错误。而且如果程序员的理解错误,程序员自己测试肯定是查不出错误的。

2. 在程序测试时,测试人员应有正确的输入和明确的输出结果。

3. 程序测试需要合理的输入数据,也要不合理的输入数据。

保留素有的测试案例,并作为一个软件组件。花费相当多的精力来射击测试用例。不加以保存,一旦程序错误修正或改进需要重新测试,就要重复上述工作。这是不是太浪费了,人们一般不愿重新设计测试用例,测试时难免会没有第一次测试那么认真。这往往无法发现因修改而产生的缺陷。

程序中有错误的概率和在那段程序中已经发现的错误成比例。程序中的错误总是一起出现,对这种现象,现在还没有令人满意的解释。但这样的现象表明,为了提高测试的效率,应当特别对待那些容易出错的程序段。

测试计划

进行通过测试

在软件测试过程中,我们要明白软件能够做什么,不会去测试额外的功能。因此用最简单的测试计划,来检测软件基本功能的运行。

进行有效类测试

在保证软件能够正确运行之后,就能用各种“非正常”操作和数据来暴露缺陷。纯粹是为了破坏软件而设计的测试。

测试用例

打开坦克大战的运行文件,可看到新开启的窗口如下。

图 开始窗口

打开游戏下拉选框,可看到“开始新游戏”、“退出游戏”、“存盘退出”、“继续游戏”这几个选项。

图 开始选项框

点击开始新游戏即可开始游戏,并且能听到游戏开始的声音,能看到界面上显示出来的信息,通过上下左右可以操作我方坦克的移动,按住方向键不动,坦克会不停的向那个方向移动。

图 坦克的移动

按X键可以发射子弹,子弹会击毁地方坦克,图为敌方坦克爆炸。

图 坦克的爆炸

我方坦克最多发射5发子弹,必须等子弹消失后才能再次发射子弹。

图 坦克的子弹

系统可以保存退出,记录坦克的坐标,玩家总成绩。

图 存盘退出

总 结

经过这两个月的学习,研究和开发,坦克大战游戏的基本功能已经实现出来。玩家可以通过操作坦克去击毁敌方坦克,游戏开始有游戏音效,

坦克被击毁时有爆炸效果,可以存盘和读档。因为自己知识上的欠缺,最开始设想的一些内容无法实现,但还是可以基本完成坦克大战的功能。

通过这次坦克大战的毕业设计我学到了许多知识,第一次独立完成了一个小项目,过程中碰到了一些麻烦和不足,都在同学和老师的帮助下一一找到了解决的方法。从碰到难题,到自己查书,到与同学讨论,再到向老师请教,使得我的毕业设计不断的完善,并且学到了宝贵的知识。

参考文献

[1] Java语言编程基础教程——宋振会 编着,清华大学出版社2005

[2] Java 语言程序设计——郎波 编着,清华大学出版社 2005

[3] Java 核心技术卷Ⅰ:基础知识 Cay 、Gary Cornell 编着,机械工业出版社 2008

[4] Java游戏设计2——荣钦科技 编着,清华大学出版社

[5] Java JDK实例宝典——夏先波 编着,电子工业出版社2007

[6] Java面向对象编程——孙卫琴 编着,电子工业出版社 2006

[7] Java编程思想(第4版)——(美)埃克尔 编着,陈昊鹏 译,机械工业出版社 2007

[8] Java编程模式与范例——严桂兰 刘波 刘甲 编着,机械工业出版社

2002

[9] 优秀动漫游戏系列教材—交互式漫游动画--Virtools+3ds Max虚拟——罗建勤 张明 编着 2010

[10] 锐风行技法 3ds Max/After Effects 电视品牌形象包装完全解码——肖艺 孙春星 雷荣祖 编着, 人民邮电出版社 2010.

[11] Java 典型应用彻查1000例-图形与网络游戏开发(DVD)——贾蓉生 胡大源 林金池 编着,科学出版社 2009

致谢

经过两个多月的辛苦忙碌,本次毕业设计完成了,由于经验匮乏和业务逻辑不熟悉,难免会有很多考虑不周到和不完善的地方,但在指导老师和同学的帮助下许多问题都得以解决,在此本人要特别感谢他们对我的帮助。

首先我的毕业设计能够顺利完成,和李林老师的全力指导和热心帮助是分不开的,无论是在初期的设计阶段还是后期的运行阶段都得到了李林老师的鼓励和帮助,在毕业设计过程中,给我提示游戏设计的逻辑思路;给我提供参考书籍;给我提供了很多技术资料。在碰到问题时,总是鼓励我迎难而上。特别是论文格式的修改,让我明白了一个标准的论文,其格式的重要性,哪怕是一个标点符号都要严格要求。没有李林老师的帮助,我是做不出这次毕业设计的。

其次我还要感谢大学四年来的所有老师,为我们打下的基础。以前总觉得学习的课程用处不大,但当自己真正去完成一个设计的时候,才发觉每门课程的重要性。

然后我要感谢我的几位同学,在毕业设计的开发过程中,但我遇到难题时,他们给予我支持,鼓励和帮助,帮忙查阅资料,与我共同解决难题。

通过这次毕业设计,不仅完成了我的学业,更重要的是让我从开始的需求分析到具体功能的实现,再到最终的测试和维护的软件工程有了进一步的的理解,这种思维方法对我的思想产生了极大的影响。我的动手能力和独立解决问题的能力得到了很大的锻炼和提高。

我还要感谢学校提供这次毕业设计的机会,让我在学业即将结束的时候有认识自己的机会,意识到自己的优势和不足,在这次毕业设计中明白了责任的重要性,从而提高了自己的责任心。

最后,感谢答辩组对我的毕业设计的考核,如能够得到答辩老师们的认可,即是对我的学习和工作最大的鼓励。你们的客观评价和建议一定牢记于心,在今后的工作中,更加严格要求自己。

附录一 坦克大战中的类

敌人坦克类

package myTankGame;

import .*;

import .*;

class AePlayWave extends Thread {

private String filename;

public AePlayWave(String wavfile) {

}

public void run() {

File soundFile = new File(filename);

AudioInputStream audioInputStream = null;

try {

audioInputStream = (soundFile);

filename = wavfile;

} catch (Exception e1) {

}

AudioFormat format = ();

SourceDataLine auline = null;

info = new , format);

try {

auline = (SourceDataLine) (info);

(format);

();

return;

} catch (Exception e) {

();

return;

}

}

}

();

int nBytesRead = 0;

byte[] abData = new byte[512];

try {

while (nBytesRead != -1) {

}

nBytesRead = (abData, 0, ;

if (nBytesRead >= 0)

(abData, 0, nBytesRead);

} catch (IOException e) {

();

return;

} finally {

}

();

();

etImage("");

image2=().getImage("");

image3=().getImage("");

把该炸弹从bombs向量中去掉

}

if==0)

{

}

(b);

etX(), (i).getY(), g, (i).getDirect(), 1);

}

//再画出敌人的子弹

{

//取出子弹

if

{

, , 3, 3);

}else{

//如果敌人坦克子弹死亡就从Vector中去

}

}

}

}

//写一个函数专门判断子弹是否击中坦克

public boolean hitTank(Shot s,Tank et)

{

boolean bl=false;

//判断该坦克的方向

switch

{

//如果敌人坦克的方向是上或者下

case 0:

case 2:

if>&&<+40&&>&&<+60)

{

}

break;

//击中

//子弹死亡

=false;

//坦克死亡

=false;

bl=true;

//创建一颗炸弹,

Bomb b=new Bomb,;

//放入Vector

(b);

case 1:

case 3:

}

}

if>&&<+60&&>+14&&<+14+40)

{

}

break;

//击中

=false;

//坦克死亡

=false;

bl=true;

//创建一颗炸弹,

Bomb b=new Bomb,+14);

//放入Vector

(b);

return bl;

//判断我的子弹是否击中敌人坦克

public void hitEnemyTank()

{

{

//取出子弹

//判断子弹是否有效(是否活着)

if==true)

}

}

{

}

//取出每个坦克。与他判断

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

{

}

//取出坦克

EnemyTank et=(j);

if==true)

{

}

if(myShot, et))

{

}

();

();

//判断敌人子弹是否击中我的坦克

public void hitHeroTank()

{

//取出每一个敌人的坦克

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

type)

}

{

}

//取出坦克

EnemyTank et=(i);

//取出每一颗子弹

{

}

//取出子弹

if

{

}

if(enemyShot, hero))

{

}

//画坦克的函数(扩展)

public void drawTank(int x,int y,Graphics g,int direct,int

{

//判断是什么类型的坦克

switch(type)

{

case 0:

;

break;

case 1:

}

//判断方向

//向上

if(direct==0)

{

(x, y, 10, 60,false);

(x+10, y+10, 20, 40, false);

(x+30, y, 10, 60, false);

(x+10, y+20, 18, 20);

(x+18, y, 3, 30);

;

break;

}else if(direct==1)//向右

{

(x-10, y+14, 60, 10,false);

(x-10+10, y+14+10, 40, 20, false);

(x-10, y+14+30, 60, 10, false);

(x-10+20, y+14+9, 18, 20);

(x-10+30, y+14+18, 30, 3);

}else if(direct==2)//向下

//

}

{

(x, y, 10, 60,false);

(x+10, y+10, 20, 40, false);

(x+30, y, 10, 60, false);

(x+10, y+20, 18, 20);

(x+18, y+30, 3, 30);

}else if(direct==3)//向左

{

}

();

(x-10, y+14, 60, 10,false);

(x-10+10, y+14+10, 40, 20, false);

(x-10, y+14+30, 60, 10, false);

(x-10+20, y+14+9, 18, 20);

(x-10, y+14+18, 30, 3);

@Override

public void keyTyped(KeyEvent e) {

}

@Override

public void keyPressed(KeyEvent e) {

// TODO Auto-generated method stub

// TODO Auto-generated method stub

//

}

if()==

{

}else if()==

{

}else if()==

{

}else if()==

{

}

//判断玩家是否按下X键

if()==

{

}

if()==

{

}

();

//让坦克最多只能发5发子弹

{

}

@Override

public void keyReleased(KeyEvent e) {

//

//

//

//

//

}

// TODO Auto-generated method stub

@Override

public void run() {

// TODO Auto-generated method stub

//每隔100毫秒去重绘

while(true)

{

try {

(10);

} catch (InterruptedException e) {

}

//判断是否击中敌人坦克

();

//判断敌人坦克是否击中我的坦克

();

//判断是否需要给敌人坦克加入新的子弹

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

{

EnemyTank et=(i);

if

// TODO Auto-generated catch block

();

// {

// {

//

//

//

//

//

//

//

//

//

+14+18,1);

//

//

//

//

//

//

//

//

//

//

//

Shot s=null;

//没有子弹,添加

switch

{

case 0:

s=new Shot+18, ,0);

break;

case 1:

s=new Shot+30+30,

break;

case 2:

s=new Shot+18, +30+30,2); break;

case 3:

s=new Shot, +14+18,3);

break;

}

//启动子弹线程

Thread t=new Thread(s);

();

//

//

//

//

}}

}

}

}

//重绘

();

}


本文标签: 坦克 游戏 子弹 测试 敌方