Java坦克大战设计报告

更新时间:2023-05-20 00:34:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《程序语言综合课程设计》

设计报告

学 院: 信息工程学院 专业班级: 学 号: 3 姓 名: 指导老师:

完成时间: 2011年7月22日

目录

目录 .......................................................................... 2 题目一 坦克大战 ............................................................... 4 1.1题目简介 ................................................................... 4 1.2设计的内容、要求和目标 ..................................................... 4 1.2.1设计内容 ............................................................... 4 1.2.2设计要求 ............................................................... 4 1.2.3设计目标 ............................................................... 4 1.3总体设计 ................................................................... 5 1.3.1系统功能结构图 ........................................................ 5 1.3.2系统总体流程图 ........................................................ 6 1.4详细设计及实现 ............................................................. 7 1.4.1界面及布局设计 ......................................................... 7 1.4.2开机欢迎画面的实现方法 ................................................. 7 1.4.3单人游戏的实现方法 ..................................................... 9 1.4.4添加背景音乐的方法 .................................................... 12 1.4.5双人游戏实现的方法 .................................................... 12 1.4.6游戏设置方法 .......................................................... 14 1.4.7存盘退出实现方法 ...................................................... 16 1.4.8运行效果图 ............................................................ 17 1.4.9源代码分析 ............................................................ 19 1.5系统运行及使用说明 ........................................................ 37 题目二 都昌大酒店餐饮管理系统 ................................................. 38 2.1题目简介 .................................................................. 38 2.2设计的内容、要求和目标 .................................................... 38 2.2.1设计的内容 ............................................................ 38 2.2.2要求 .................................................................. 38 2.2.3目标 .................................................................. 38 2.3总体设计 .................................................................. 39 2.3.1功能模块设计 .......................................................... 39 2.3.2系统所有类之间的关系 .................................................. 39 2.4数据库设计 ................................................................ 40 2.4.1关系模式 .............................................................. 40 2.4.2 E-R图 ................................................................ 40 2.4.3数据库管理物理实现 .................................................... 41 2.4.4数据库表 .............................................................. 41 2.4.5表的建立 .............................................................. 42 2.4.6表与表之间的关系 ...................................................... 43 2.5详细设计及实现 ............................................................ 43 2.5.1操作界面设计 .......................................................... 44

2.5.2类成员变量及方法设计 .................................................. 47 2.5.3源代码分析 ............................................................ 53 2.6系统运行及使用说明 ........................................................ 64 题目三 俄罗斯方块(手机版) ..................................................... 65 3.1 题目简介 .................................................................. 65 3.2 需求分析 .................................................................. 65 3.2.1 设计目的和意义 ........................................................ 65 3.2.2 任务概述 .............................................................. 65 3.2.3 需求分析 .............................................................. 66 3.3 总体设计 .................................................................. 67 3.3.1 系统功能结构图 ........................................................ 67 3.3.2 系统总体流程图 ........................................................ 67 3.4 详细设计 .................................................................. 68 3.4.1 功能分析和描述 ........................................................ 68 3.4.2 程序系统的结构 ........................................................ 68 3.4.3 游戏的前景和背景设计 .................................................. 70 3.5主要技术的实现 ............................................................ 71 3.5.1 开机动画的实现 ........................................................ 71 3.5.2 排行榜设计 ............................................................ 71 3.5.3 消去方块的实现 ........................................................ 72 3.6 系统实现 .................................................................. 73 3.6.1 程序系统的结构 ........................................................ 73 3.6.2 程序设计说明 .......................................................... 73 总 结 ....................................................................... 77 附录一 ....................................................................... 78 附录二 ....................................................................... 81 附录三 ....................................................................... 84

题目一 坦克大战

1.1题目简介

坦克大战是运用java高级编程语言使用MyEclipse8.6实现的一个游戏系统,它具有单人游戏和双人游戏的游戏界面以及对游戏的属性进行编辑的游戏设置对话框。

1.2设计的内容、要求和目标

1.2.1设计内容

本项目的内容包括技术和非技术两大部分:

技术上需要进行数据存储和图片的处理、整个窗口的布局、代码的编写及调试。

非技术部分包括:人力资源的充分利用。 1.2.2设计要求

(1)设计GUI界面的坦克大战。坦克大战中有我军坦克一辆,敌军坦克若干。初始状态是我军坦克位于屏幕正下方,而敌军坦克分布屏幕正上方,敌军坦克可以自由移动并发射子弹,我军坦克可以按“A”,“S”,“D”,“W”键操作我军坦克向不同的四个方向前进,按“J”键可以发射子弹;

(2)程序要求用户在通过按下指定按钮来控制自己的坦克,敌人坦克是随

机运动并发射子弹的;

(3)当然用户还可以点击文件菜单选择各种需要的操作; (4)实现帮助功能,用户有不明白的地方可以查看帮助文档; (5)实现与数据库的连接,用户使用时必须登录。 1.2.3设计目标

系统应该尽量做到以下的目标: 1) 人力与设备费用的减少; 2) 采用现代程序设计技术;

3) 数据的处理速度提高; 4) 管理信息服务的改进; 5) 人员利用率尽可能提高;

1.3总体设计

1.3.1系统功能结构图

下面列出了本系统的整体功能结果图以及各个模块之间的彼此联系,见图1-1所示。

也可以开始双人游戏,在游戏中倘若你有其他事情要做,你可以选择暂停游戏,当然你还可以选择存盘退出,这样当你以后想再玩没玩完的游戏你就可以选择继续上局游戏,这样你可以接着上次玩的游戏,你还可以选择游戏设置,设置敌人

说明:用户根据主界面,在菜单项里可以选择开始游戏,可以开始单人游戏,

图1-1 系统各个功能模块之间的联系

的坦克数量和敌人坦克的速度,以及我军坦克速度,还有你可以设置娱乐方式,你可以选择使用背景音乐,和游戏音效。

1.3.2系统总体流程图

坦克大战的总体流程图见图1-2所示。

图1-2 总体流程图

3.3系统所有类之间的关系 系统所有类之间的关系如图1-3所示

图1-3类之间的关系

设计一个系统的时候,把不同功能的具体实现放到不同的类里面,这样便于以后程序的扩展以及修改;类的名称最好是体现出这个类实现的功能,这样可以达到看类名就知道这个类的功能,方便以后程序的维护。

本系统的实现一共用到了以上的12个类,它们之间的关系见图1-3所示,箭头方向代表是被依赖的类,各个类实现了一些单独的功能。

1.4详细设计及实现 1.4.1界面及布局设计

系统的整体布局为:BorderLayout布局, 采用了菜单、按钮、面板…等组件,菜单主要包括选择开始新游戏,暂停游戏,继续上局游戏,存盘退出,退出游戏,游戏设置等功能。

1.4.2开机欢迎画面的实现方法

FirstPanel类是javax.swing包中JPanel容器的一个子类,它主要是重写了paint()方法,先从文本文件里读取数据,然后把数据通过画笔画在画板上,标明FirstPanel类的主要成员变量和方法以及和TankGames类之间组合关系的UML图如图1-4所示。

图1-4 FirstPanel类的UML图

以下是UML图中有关数据和方法的详细说明。 1、成员变量

(1)word是WordMove型数据,它是用来改变文字的纵坐标的,使文字动态的画在画板上。

(2)fr是FileReader型数据,它是用来读取文本文件的。

(3)br是BufferedReader型数据,是缓冲输出流,用它来读取fr里面的数据。 (4)str是String型数据,接受读取到得文本文件。

(5)aa是Vector<String>型数据,是类型为字符串类型的集合,用它来装一个个str。

(6)img是Image型数据,是图片类型数据,用来设置背景图片的。 (7)f,f1,f2都是Font类型的数据,用来确定动态显示字的字体。 2、方法

(1)FirstPanel()是构造方法,负责完成FirstPanel容器的初始化。

(2)容器调用paint(Graphics g)方法可以在画板上把文本文件画出来,以便动态的显示出来。

(3)容器调用show()方法可以将画板上的文字显示出来。

(4)容器调用run()方法可以改变文字的纵坐标,使原本静态的文字运动起来。 综上所述,FirstPanel创建的容器效果如图1-5所示。

图1-5 FirstPanel创建的容器

1.4.3单人游戏的实现方法

mypanel类是javax.swing包中JPamel类的子类,所创建的对象是一个面板,面板上有坦克大战的敌我双方坦克,和战场,以及我军消灭敌军数量的标识,标明mypanel类的主要成员变量、方法以及和TankGames类之间组合关系的UML如图1-6所示。

图1-6 mypanel类的UML图

以下是UML图中有关数据和方法的详细说明。 1、成员变量

(1)isZanT、isSounds、isMusic都是boolean类型数据,分别确定是否游戏暂停,是否使用背景音乐,是否使用音效。

(2)word是WordMove类型数据,用于制造动态字。

(3)mt,en分别是mytank和enemyTank类型数据,用于在画板上定义敌我双方坦克。

(4)zd,zhd分别是ZDan和ZhaDan类型数据,在画板上定义子弹和炸弹。 (5)image1、imge2、imgae3都是Image类型数据,在击中坦克时,将这三幅图片画出来,制造爆炸效果。

(6)f是Font类型数据,用于定义游戏结束时动态字的字体。 2、方法

(1)mypanel()构造方法,初始化定义的成员变量。

(2)paint(Graphics g)在画板上画坦克,画子弹,画炸弹等各种作战场面。

(3)addmytank()方法用来增加我军坦克,我军坦克的生命值是3,当我军生命值大于0时,每死一次就增加一辆我军坦克,直至我军坦克生命值为0。

(4)addEnemytank()方法是用来增加敌军坦克,敌军坦克默认情况下是20辆,而战场只允许敌军4辆坦克作战,所以每击毁敌军一辆坦克就会调用此方法增加一辆敌军坦克,直至敌军坦克数量小于或者等于4。 (5)zhanji()方法是用来记录我军击毁坦克数量。 (6)Bomp()方法是在击中坦克时画出爆炸效果。 (7)drawtank()用来在画板上画出敌我双方坦克。 (8)drawzd()用来在画板上画子弹。

(9)shotEnemytank()是在我军发射子弹时调用的,用户按下指定键就会激发此方法。

(10)shotmytank()是敌军发射子弹时调用此方法。 (11)isjizhong()是用来判断子弹是否击中坦克。

(12)GameOver()是在游戏结束时调用的,用来描述游戏结束。 因此mypanel创建的画板的效果如图1-7所示。

图1-7 mypanel创建的画板的效果

爆炸效果如下图:

图1-8 爆炸效果图

1.4.4添加背景音乐的方法

为了在应用程序中播放音乐,首先根据相应的音频文件创建一个File对象,例如:

File file=new File(“十年.Wav”);

然后,file对象调用toURL()方法返回一个URL对象,例如: URL url=file.toURL();

最后,使用Applet类的静态方法返回一个音频对象,例如: clip=Applet.newAudioClip(url);

1.4.5双人游戏实现的方法

SRen类是javax.swing包中JPamel类的子类,所创建的对象是一个面板,面板上有坦克大战的敌我双方坦克(此时我军坦克数量为2),和战场,以及我军消灭敌军数量的标识,标明SRen类的主要成员变量、方法以及和TankGames类之间组合关系的UML如图1-9所示。

图1-9 SRen类的UML图

以下是UML图中有关数据和方法的详细说明。 1、成员变量

(1)isZanT、isSounds都是boolean类型数据,分别确定是否游戏暂停,是否使用音效。

(2)word是WordMove类型数据,用于制造动态字。

(3)myts0life、myts1life都是int类型的数据,分别用来记录我方两辆坦克的生命值。 (4)myts0XM、myts1XM都是int类型的数据,分别来记录我方两辆坦克消灭敌军坦克数量。

(5)zd,zhd分别是ZDan和ZhaDan类型数据,在画板上定义子弹和炸弹。 (6)image1、imge2、imgae3都是Image类型数据,在击中坦克时,将这三幅图片画出来,制造爆炸效果。

(7)f是Font类型数据,用于定义游戏结束时动态字的字体。 2、方法

(1)SRen()构造方法,初始化定义的成员变量。

(2)paint(Graphics g)在画板上画坦克,画子弹,画炸弹等各种作战场面。 (3)addmytank()方法用来增加我军坦克,我军坦克的生命值是3,当我军生命值大于0时,每死一次就增加一辆我军坦克,直至我军坦克生命值为0。

(4)addEnemytank()方法是用来增加敌军坦克,敌军坦克默认情况下是20辆,而战场只允许敌军4辆坦克作战,所以每击毁敌军一辆坦克就会调用此方法增加一辆敌军坦克,直至敌军坦克数量小于或者等于4。 (5)zhanji()方法是用来记录我军击毁坦克数量。 (6)Bomp()方法是在击中坦克时画出爆炸效果。 (7)drawtank()用来在画板上画出敌我双方坦克。 (8)drawzd()用来在画板上画子弹。

(9)shotEnemytank()是在我军发射子弹时调用的,用户按下指定键就会激发此方法。

(10)shotmytank()是敌军发射子弹时调用此方法。 (11)isjizhong()是用来判断子弹是否击中坦克。

(12)GameOver()是在游戏结束时调用的,用来描述游戏结束。 因此mypanel创建的画板的效果如图1-10所示。

图1-10 SRen创建的画板

1.4.6游戏设置方法

FirstDialog是java.swing包中Dialog类的子类,它创建的是一个对话框,此对话框里面主要有选择按钮,滚动条,还有两个按钮。标明FirstDialog类的主要成员变量、方法以及和TankGames类之间组合关系的UML如图1-11所示。

图1-11 SRen类的UML图

以下是UML图中有关数据和方法的详细说明。 1、成员变量

(1)jbl1,jbl2,jbl3,jbl4都是JLabel类型数据,用于提示标签。 (2)jck1,jck2是JCheck类型数据,用来控制音效和背景音乐。

(3)jsc1,jsc2,jsc3都是JScrollBox类型数据,分别用来控制敌军坦克数量,敌军坦

克速度,我军坦克速度。

(4)box1,box2,box3,box4都是Box类型数据,用于整体布局。 (5)jp是JPanel类型数据,整体布局需要。 (6)jbt1,jbt2都是JButton数据类型。 2、方法

(1)FirstDialog()构造方法,初始化定义的成员变量。 (2)actionPerformed(Event e)方法用于出来监听事件。

(3)ItemStatechanged(Event e)方法用于处理选择框事件的处理。 因此FirstDialog创建的画板的效果如图1-12所示。

图1-12 FirstDialog创建的对话框

1.4.7存盘退出实现方法

本程序是利用输出输入流将战场敌我双方坦克坐标保存到文本文件里面,详细请见下图。

图1-13 存盘退出菜单

当点击存盘退出,程序就会在F盘下新建一个文本文件,如:

图1-14 保存游戏信息的文本

这时当我们点击继续上局时,又回回到刚才玩的游戏,如:

图1-15 继续上局菜单

继续上局后的效果图如下图:

图1-16 继续上局效果图

1.4.8运行效果图

系统运行的主界面如图1-17所示

图1-17 运行欢迎界面效果图

坦克大战单人游戏效果如图1-18所示

图1-18 单人游戏效果图

双人游戏效果如图1-19所示

图1-19 双人游戏效果图

菜单选择如图1-20所示

图1-20 菜单选择

1.4.9源代码分析

1.开机欢迎界面实现的代码。

public class FirstPanel extends JPanel implements Runnable { public WordMove word = null; FileReader fr = null; BufferedReader br = null; String str="";

Vector<String> aa =null; Image img;

Font f = new Font("华文姚体",Font.BOLD,25); Font f1 = new Font("华文姚体",Font.BOLD,35); Font f2 = new Font("华文彩云",Font.BOLD,150); public FirstPanel() { word = new WordMove(30,340); word.setHH(500); word.b=true;

aa = new Vector<String>(); this.setBackground(Color.black); show(); try { img = ImageIO.read(new File("123.jpg")); } catch (IOException e) {

e.printStackTrace(); }

}

public void paint(Graphics g) { super.paint(g);

g.setColor(Color.yellow); for(int i=0;i<aa.size();i++) { String a = aa.get(i); if(i==0) { g.setFont(f1); }else if(i==24) { g.setFont(f2); }else {

g.setFont(f);

}

g.drawString(a,word.x,word.HH+(i+1)*50); //画出运动的文字 }

}

public void show() { Thread t = new Thread(word);

t.start();

}

}

}

fr = new FileReader("Directions.txt"); //读取文本文件里面的文字 br = new BufferedReader(fr); str =br.readLine(); aa.add(str);

while ((str=br.readLine())!=null) { }

e.printStackTrace(); try { }

br.close(); fr.close();

e.printStackTrace(); aa.add(str);

} catch (Exception e) { }finally {

} catch (IOException e) {

public void run() { }

while(true) { }

try { }

this.repaint();

Thread.sleep(50); e.printStackTrace();

} catch (InterruptedException e) {

2.单人游戏界面的实现代码

public class mypanel extends JPanel implements Runnable,KeyListener {

//所有的成员变量

public boolean isZanT = false; public WordMove word = null; public mytank mt = null; public enemyTank en = null; public ZDan zd = null;

public static boolean isSounds=true; public static boolean ismusic=true; public ZhaDan zhd = null; int BZ = 0;

Image image1 = null,image2 = null,image3 = null;

public Vector<enemyTank> enemy = new Vector<enemyTank>();

public Vector<ZhaDan> ZDs = new Vector<ZhaDan>(); String str="击毁敌军坦克数量";

Font f = new Font("华文新魏",Font.BOLD,20); public int tan[]={0,150,300,450}; //构造方法

public mypanel(String n){

String ss=n;

//新游戏进这

if(ss.equals("First")) {

for(int i=0;i<4;i++) { }

//继续上局进这

for(int j=0;j<Record.nodes.size();j++) {

en = new

en = new enemyTank(i*150,0,0); en.setDirect(2);

Thread tt = new Thread(en); tt.start(); enemy.add(en);

enemyTank.enemy.add(en);

}else {

enemyTank(Record.nodes.get(j).getX(),Record.nodes.get(j).getY(),Record.nodes.get(j).getDirect());

}

word = new WordMove(200,350); mt = new mytank(200,350,1); myt.add(mt); try {

image1 = ImageIO.read(new File("bomb_1.gif")); image2 = ImageIO.read(new File("bomb_2.gif")); image3 = ImageIO.read(new File("bomb_3.gif")); e.printStackTrace();

}

Thread tt = new Thread(en); tt.start(); enemy.add(en);

} catch (IOException e) { }

}

//画图

public void paint(Graphics g){

super.paint(g);

g.fill3DRect(0,0,700,400,false);

本文来源:https://www.bwwdw.com/article/2bq4.html

Top