Java坦克大战设计报告_第1页
Java坦克大战设计报告_第2页
Java坦克大战设计报告_第3页
Java坦克大战设计报告_第4页
Java坦克大战设计报告_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业 程序语言综合课程设计设计报告 学院:信息工程学院专业班级:学号:3姓名:指导老师:完成时间:2011年7月22日目录 TOC o 1-3 h z u 题目一 坦克大战1.1题目简介坦克大战是运用java高级编程语言使用MyEclipse8.6实现的一个游戏系统,它具有单人游戏和双人游戏的游戏界面以及对游戏的属性进行编辑的游戏设置对话框。1.2设计的内容、要求和目标1.2.1设计内容 本项目的内容包括技术和非技术两大部分:技术上需要进行数据存储和图片的处理、整个窗口的布

2、局、代码的编写及调试。非技术部分包括:人力资源的充分利用。1.2.2设计要求 (1)设计GUI界面的坦克大战。坦克大战中有我军坦克一辆,敌军坦克若干。初始状态是我军坦克位于屏幕正下方,而敌军坦克分布屏幕正上方,敌军坦克可以自由移动并发射子弹,我军坦克可以按“A”,“S”,“D”,“W”键操作我军坦克向不同的四个方向前进,按“J”键可以发射子弹;(2)程序要求用户在通过按下指定按钮来控制自己的坦克,敌人坦克是随机运动并发射子弹的;(3)当然用户还可以点击文件菜单选择各种需要的操作;(4)实现帮助功能,用户有不明白的地方可以查看帮助文档;(5)实现与数据库的连接,用户使用时必须登录。1.2.3设计

3、目标系统应该尽量做到以下的目标:人力与设备费用的减少;采用现代程序设计技术;数据的处理速度提高;管理信息服务的改进;人员利用率尽可能提高;1.3总体设计1.3.1系统功能结构图下面列出了本系统的整体功能结果图以及各个模块之间的彼此联系,见图1-1所示。图1-1 系统各个功能模块之间的联系说明:用户根据主界面,在菜单项里可以选择开始游戏,可以开始单人游戏,也可以开始双人游戏,在游戏中倘若你有其他事情要做,你可以选择暂停游戏,当然你还可以选择存盘退出,这样当你以后想再玩没玩完的游戏你就可以选择继续上局游戏,这样你可以接着上次玩的游戏,你还可以选择游戏设置,设置敌人的坦克数量和敌人坦克的速度,以及我

4、军坦克速度,还有你可以设置娱乐方式,你可以选择使用背景音乐,和游戏音效。 1.3.2系统总体流程图坦克大战的总体流程图见图1-2所示。图1-2 总体流程图3.3系统所有类之间的关系系统所有类之间的关系如图1-3所示图1-3类之间的关系设计一个系统的时候,把不同功能的具体实现放到不同的类里面,这样便于以后程序的扩展以及修改;类的名称最好是体现出这个类实现的功能,这样可以达到看类名就知道这个类的功能,方便以后程序的维护。本系统的实现一共用到了以上的12个类,它们之间的关系见图1-3所示,箭头方向代表是被依赖的类,各个类实现了一些单独的功能。1.4详细设计及实现1.4.1界面及布局设计系统的整体布局

5、为:BorderLayout布局, 采用了菜单、按钮、面板等组件,菜单主要包括选择开始新游戏,暂停游戏,继续上局游戏,存盘退出,退出游戏,游戏设置等功能。1.4.2开机欢迎画面的实现方法FirstPanel类是javax.swing包中JPanel容器的一个子类,它主要是重写了paint()方法,先从文本文件里读取数据,然后把数据通过画笔画在画板上,标明FirstPanel类的主要成员变量和方法以及和TankGames类之间组合关系的UML图如图1-4所示。图1-4 FirstPanel类的UML图以下是UML图中有关数据和方法的详细说明。1、成员变量(1)word是WordMove型数据,它

6、是用来改变文字的纵坐标的,使文字动态的画在画板上。(2)fr是FileReader型数据,它是用来读取文本文件的。(3)br是BufferedReader型数据,是缓冲输出流,用它来读取fr里面的数据。(4)str是String型数据,接受读取到得文本文件。(5)aa是Vector型数据,是类型为字符串类型的集合,用它来装一个个str。(6)img是Image型数据,是图片类型数据,用来设置背景图片的。(7)f,f1,f2都是Font类型的数据,用来确定动态显示字的字体。2、方法(1)FirstPanel()是构造方法,负责完成FirstPanel容器的初始化。(2)容器调用paint(Gra

7、phics g)方法可以在画板上把文本文件画出来,以便动态的显示出来。(3)容器调用show()方法可以将画板上的文字显示出来。(4)容器调用run()方法可以改变文字的纵坐标,使原本静态的文字运动起来。综上所述,FirstPanel创建的容器效果如图1-5所示。图1-5 FirstPanel创建的容器1.4.3单人游戏的实现方法mypanel类是javax.swing包中JPamel类的子类,所创建的对象是一个面板,面板上有坦克大战的敌我双方坦克,和战场,以及我军消灭敌军数量的标识,标明mypanel类的主要成员变量、方法以及和TankGames类之间组合关系的UML如图1-6所示。 图1-

8、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类型数据,用于定

9、义游戏结束时动态字的字体。2、方法(1)mypanel()构造方法,初始化定义的成员变量。(2)paint(Graphics g)在画板上画坦克,画子弹,画炸弹等各种作战场面。(3)addmytank()方法用来增加我军坦克,我军坦克的生命值是3,当我军生命值大于0时,每死一次就增加一辆我军坦克,直至我军坦克生命值为0。(4)addEnemytank()方法是用来增加敌军坦克,敌军坦克默认情况下是20辆,而战场只允许敌军4辆坦克作战,所以每击毁敌军一辆坦克就会调用此方法增加一辆敌军坦克,直至敌军坦克数量小于或者等于4。(5)zhanji()方法是用来记录我军击毁坦克数量。(6)Bomp()方法

10、是在击中坦克时画出爆炸效果。(7)drawtank()用来在画板上画出敌我双方坦克。(8)drawzd()用来在画板上画子弹。(9)shotEnemytank()是在我军发射子弹时调用的,用户按下指定键就会激发此方法。(10)shotmytank()是敌军发射子弹时调用此方法。(11)isjizhong()是用来判断子弹是否击中坦克。(12)GameOver()是在游戏结束时调用的,用来描述游戏结束。因此mypanel创建的画板的效果如图1-7所示。图1-7 mypanel创建的画板的效果爆炸效果如下图:图1-8 爆炸效果图1.4.4添加背景音乐的方法 为了在应用程序中播放音乐,首先根据相应的

11、音频文件创建一个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类之间组合关

12、系的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都是Ima

13、ge类型数据,在击中坦克时,将这三幅图片画出来,制造爆炸效果。(7)f是Font类型数据,用于定义游戏结束时动态字的字体。2、方法(1)SRen()构造方法,初始化定义的成员变量。(2)paint(Graphics g)在画板上画坦克,画子弹,画炸弹等各种作战场面。(3)addmytank()方法用来增加我军坦克,我军坦克的生命值是3,当我军生命值大于0时,每死一次就增加一辆我军坦克,直至我军坦克生命值为0。(4)addEnemytank()方法是用来增加敌军坦克,敌军坦克默认情况下是20辆,而战场只允许敌军4辆坦克作战,所以每击毁敌军一辆坦克就会调用此方法增加一辆敌军坦克,直至敌军坦克数量小

14、于或者等于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游戏设置方法F

15、irstDialog是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类型数据,分别用来控制敌军坦克数量,敌军坦克速

16、度,我军坦克速度。(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存盘退出实现方法本程序是利用输出输入流将战场敌我双方

17、坦克坐标保存到文本文件里面,详细请见下图。图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 Fir

18、stPanel extends JPanel implements Runnable public WordMove word = null;FileReader fr = null;BufferedReader br = null;String str=;Vector 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

19、WordMove(30,340);word.setHH(500);word.b=true;aa = new Vector();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;iaa.size();i+) String a = aa.get

20、(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();try fr = new FileReader(Directions.txt); /读取文本文件里面的文字br = new BufferedReader(fr);str =br.readLine();aa.add(str);while (str

21、=br.readLine()!=null) aa.add(str); catch (Exception e) e.printStackTrace();finally try br.close();fr.close(); catch (IOException e) e.printStackTrace();public void run() while(true) try Thread.sleep(50); catch (InterruptedException e) e.printStackTrace();this.repaint();2.单人游戏界面的实现代码public class mypa

22、nel 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;Ima

23、ge image1 = null,image2 = null,image3 = null;public Vector enemy = new Vector();public Vector myt = new Vector();public Vector ZDs = new Vector();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)

24、for(int i=0;i4;i+) 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 /继续上局进这for(int j=0;jRecord.nodes.size();j+) en = new enemyTank(Record.nodes.get(j).getX(),Record.nodes.get(j).getY(),Record.nodes.get(j).getDirect();Threa

25、d tt = new Thread(en);tt.start();enemy.add(en);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); catch (IOException e) e.printStackTrace();/画图public

26、 void paint(Graphics g)super.paint(g);g.fill3DRect(0,0,700,400,false);g.setColor(Color.BLUE);g.drawString(敌军坦克还有+Record.enemyCount+辆,600,20);g.setFont(f);g.setColor(Color.red);g.drawString(str,702,30);/对我军坦克进行处理addmytank(g);/显示销毁敌军坦克数zhanji(g);/处理敌军坦克addEnemytank(g);/炸弹爆炸Bomp(g);/游戏结束处理GameOver(g);/

27、画我的坦克public void addmytank(Graphics g)for(int i=0;imyt.size();i+)mt=myt.get(i);drawtank(mt.x,mt.y,1,mt.direct,g);drawzd(mt,g);shotEnemy(mt);/记录我的成绩public void zhanji(Graphics g) drawtank(740,60,0,0,g);g.setColor(Color.red);g.drawString(X +mt.record.getXMenemy(),800,80);/画敌人的坦克及子弹public void addEnemy

28、tank(Graphics g) for(int j=0;jenemy.size();j+) enemyTank t = enemy.get(j);if(t.isLive) drawtank(t.x,t.y,0,t.direct,g);if(t.zx!=null) drawzd(t,g);shotmytank(t);if(enemy.size()=4) int i=(int)(Math.random()*3);enemyTank k = new enemyTank(tani+10,0,0);k.setDirect(2);if(!enemyTank.isContact(k) Thread t =

29、 new Thread(k);t.start(); this.enemy.add(k);enemyTank.enemy.add(k);/爆炸效果public void Bomp(Graphics g) for(int i=0;i6) g.drawImage(image1,zh.x,zh.y,30,30,this);else if(zh.LifeTime3) g.drawImage(image2,zh.x,zh.y,30,30,this);else g.drawImage(image3,zh.x,zh.y,30,30,this);zh.lifeDown();if(zh.LifeTime=0) Z

30、Ds.remove(zh);/画坦克(不管是画敌人坦克还是画自己坦克都须调用此方法)public void drawtank(int x,int y,int type,int direct,Graphics g) switch(type) case 0:g.setColor(Color.CYAN);break;case 1:g.setColor(Color.yellow);break;switch(direct) case 0:g.fill3DRect(x,y,5,30,false);g.fill3DRect(x+15,y,5,30,false);g.fill3DRect(x+5,y+5,10

31、,20,false);g.fillOval(x+7,y+10,7,10);g.drawLine(x+10,y+10,x+10,y);break;case 1:g.fill3DRect(x,y,30,5,false);g.fill3DRect(x,y+15,30,5,false);g.fill3DRect(x+5,y+5,20,10,false);g.fillOval(x+10,y+7,10,7);g.drawLine(x+20,y+10,x+30,y+10);break;case 2:g.fill3DRect(x,y,5,30,false);g.fill3DRect(x+15,y,5,30,f

32、alse);g.fill3DRect(x+5,y+5,10,20,false);g.fillOval(x+7,y+10,7,10);g.drawLine(x+10,y+20,x+10,y+30);break;case 3:g.fill3DRect(x,y,30,5,false);g.fill3DRect(x,y+15,30,5,false);g.fill3DRect(x+5,y+5,20,10,false);g.fillOval(x+10,y+7,10,7);g.drawLine(x+10,y+10,x,y+10);break;/画子弹public void drawzd(Tank tank,

33、Graphics g) if(tank.zx!=null) for(int k=0;ktank.zx.size();k+) ZDan s = tank.zx.get(k);if(s.isLive) g.draw3DRect(s.x,s.y,1,1,false);else tank.zx.remove(s);Thread t = new Thread(s);t.start();/射击敌人坦克public void shotEnemy(mytank mt) for(int i=0;imt.zx.size();i+) zd= mt.zx.get(i);for(int j=0;jenemy.size(

34、);j+) en = enemy.get(j);if(isJizhong(en,zd) zhd = new ZhaDan(en.x,en.y); ZDs.add(zhd);if(isSounds) sounds.clip.play();mt.zx.remove(zd);en.isLive=false;enemy.remove(en);mt.record.enemyCDwon();mt.record.myCJ();/射击我军坦克public void shotmytank(enemyTank t) for(int i=0;it.zx.size();i+) zd= t.zx.get(i);for(

35、int j=0;jmyt.size();j+) mt = myt.get(j);if(isJizhong(mt,zd) zhd = new ZhaDan(mt.x,mt.y); ZDs.add(zhd);if(isSounds)sounds.clip.play();t.zx.remove(zd);Record.mylifeD();myt.remove(mt); if(myt.size()0) mytank k = new mytank(200,350,1);myt.add(k);/判断子弹是否击中坦克public boolean isJizhong(Tank en,ZDan zd) boole

36、an b = false;switch(zd.direct) case 0:if(zd.xen.x&zd.xen.x+20&zd.yen.x&zd.xen.x+30&zd.yen.x&zd.xen.y)|(zd.xen.x&zd.xen.y) b=true;break;case 1:if(zd.yen.y&zd.yen.x)|(zd.yen.y&zd.yen.x) b=true;break;case 3:if(zd.yen.y&zd.yen.y+30&zd.xen.y&zd.yen.y+20&zd.x0) for(int i=0;i200) et.bl=false;sounds.clip2.s

37、top();/键盘事件处理public void keyPressed(KeyEvent e) if(!isOver()&!isZanT) if(e.getKeyCode()=KeyEvent.VK_W) mt.setDirect(0);mt.y-=mytank.myspeed;if(mt.y670)mt.x-=mytank.myspeed;else if(e.getKeyCode()=KeyEvent.VK_S) mt.setDirect(2);mt.y+=mytank.myspeed;if(mt.y370) mt.y-=mytank.myspeed;else if(e.getKeyCode

38、()=KeyEvent.VK_A) mt.setDirect(3);mt.x-=mytank.myspeed;if(mt.x0) for(int i=0;i200) et.bl=false;sounds.clip2.stop();/画坦克(不管是画敌人坦克还是画自己坦克都须调用此方法)public void drawtank(int x,int y,int type,int direct,Graphics g) switch(type) case 0:g.setColor(Color.CYAN);break;case 1:g.setColor(Color.yellow);break;case

39、2:g.setColor(Color.orange);break;switch(direct) case 0:g.fill3DRect(x,y,5,30,false);g.fill3DRect(x+15,y,5,30,false);g.fill3DRect(x+5,y+5,10,20,false);g.fillOval(x+7,y+10,7,10);g.drawLine(x+10,y+10,x+10,y);break;case 1:g.fill3DRect(x,y,30,5,false);g.fill3DRect(x,y+15,30,5,false);g.fill3DRect(x+5,y+5,

40、20,10,false);g.fillOval(x+10,y+7,10,7);g.drawLine(x+20,y+10,x+30,y+10);break;case 2:g.fill3DRect(x,y,5,30,false);g.fill3DRect(x+15,y,5,30,false);g.fill3DRect(x+5,y+5,10,20,false);g.fillOval(x+7,y+10,7,10);g.drawLine(x+10,y+20,x+10,y+30);break;case 3:g.fill3DRect(x,y,30,5,false);g.fill3DRect(x,y+15,3

41、0,5,false);g.fill3DRect(x+5,y+5,20,10,false);g.fillOval(x+10,y+7,10,7);g.drawLine(x+10,y+10,x,y+10);break;/画子弹public void drawzd(Tank tank,Graphics g) if(tank.zx!=null) for(int k=0;k0) mytank k = myts0.get(0);drawtank(k.x,k.y,k.type,k.direct,g);drawzd(k,g);shotEnemy(k);if(myts1.size()0) mytank k = m

42、yts1.get(0);drawtank(k.x,k.y,k.type,k.direct,g);drawzd(k,g);shotEnemy(k);/画敌军坦克public void addenemytank(Graphics g) if(enemys.size()0) for(int i=0;ienemys.size();i+) enemyTank k = enemys.get(i);k.zh=46;k.zhy=45;k.zhx=145;drawtank(k.x,k.y,k.type,k.direct,g);drawzd(k,g);shotmytank(k);if(enemys.size()=

43、8) int i=(int)(Math.random()*7);enemyTank k = new enemyTank(eemi+10,0,0);k.setDirect(2);if(!enemyTank.isContact(k) Thread t = new Thread(k);t.start(); this.enemys.add(k);enemyTank.enemy.add(k);/记录我的成绩public void zhanji(Graphics g) drawtank(10,60,0,0,g);drawtank(765,60,0,0,g);g.setColor(Color.red);g.

44、drawString(X +myts0XM,50,80); g.drawString(X +myts1XM,795,80);/g.drawString(X +mt.record.getXMenemy(),800,80);/判断子弹是否击中坦克public boolean isJizhong(Tank en,ZDan zd) boolean b = false;switch(zd.direct) case 0:if(zd.xen.x&zd.xen.x+20&zd.yen.x&zd.xen.x+30&zd.yen.x&zd.xen.y)|(zd.xen.x&zd.xen.y) b=true;bre

45、ak;case 1:if(zd.yen.y&zd.yen.x)|(zd.yen.y&zd.yen.x) b=true;break;case 3:if(zd.yen.y&zd.yen.y+30&zd.xen.y&zd.yen.y+20&zd.xen.x+30) b=true;break;return b;/射击敌人坦克public void shotEnemy(mytank mt) for(int i=0;imt.zx.size();i+) ZDan zd= mt.zx.get(i);for(int j=0;j0) k = myts0.get(0);if(k=mt) myts0XM+;if(my

46、ts1.size()0) kk = myts1.get(0);if(kk=mt) myts1XM+;if(isSouds) sounds.clip.play();mt.zx.remove(zd);en.isLive=false;enemys.remove(en);mt.record.enemyCDwon();mt.record.myCJ();/射击我军坦克public void shotmytank(enemyTank t) for(int i=0;it.zx.size();i+) ZDan zd= t.zx.get(i);for(int j=0;jmyts0.size();j+) mytan

47、k mt = myts0.get(j);if(isJizhong(mt,zd) ZhaDan zhd = new ZhaDan(mt.x,mt.y); zhs.add(zhd);myts0life-;if(isSouds) sounds.clip.play();t.zx.remove(zd);myts0.remove(mt); if(myts0.size()0) mytank k = new mytank(290,415,1);myts0.add(k);for(int j=0;jmyts1.size();j+) mytank mt = myts1.get(j);if(isJizhong(mt,

48、zd) ZhaDan zhd = new ZhaDan(mt.x,mt.y); zhs.add(zhd);myts1life-;if(isSouds) sounds.clip.play();t.zx.remove(zd);Record.mylifeD();myts1.remove(mt); if(myts1.size()0) mytank k = new mytank(580,415,1);myts1.add(k);/爆炸效果public void Bomp(Graphics g) for(int i=0;i6) g.drawImage(image1,zh.x,zh.y,30,30,this)

49、;else if(zh.LifeTime3) g.drawImage(image2,zh.x,zh.y,30,30,this);else g.drawImage(image3,zh.x,zh.y,30,30,this);zh.lifeDown();if(zh.LifeTime=0) zhs.remove(zh);public void run() while(true) try Thread.sleep(100); catch (InterruptedException e) e.printStackTrace();this.repaint();public void keyPressed(K

50、eyEvent arg0) if(!isOver()&!isZanT) if(arg0.getKeyCode()=KeyEvent.VK_UP&myts1.size()0) mytank k = myts1.get(0);k.setDirect(0);k.y-=mytank.myspeed;if(k.y0) mytank k = myts1.get(0);k.setDirect(2);k.y+=mytank.myspeed;if(k.y415) k.y-=mytank.myspeed;else if(arg0.getKeyCode()=KeyEvent.VK_RIGHT&myts1.size(

51、)0) mytank k = myts1.get(0);k.setDirect(1);k.x+=mytank.myspeed;if(k.x716) k.x-=mytank.myspeed;else if(arg0.getKeyCode()=KeyEvent.VK_LEFT&myts1.size()0) mytank k = myts1.get(0);k.setDirect(3);k.x-=mytank.myspeed;if(k.x0) mytank k = myts1.get(0);k.feed(k);if(arg0.getKeyCode()=KeyEvent.VK_W&myts0.size(

52、)0) mytank k = myts0.get(0);k.setDirect(0);k.y-=mytank.myspeed;if(k.y0) mytank k = myts0.get(0);k.setDirect(2);k.y+=mytank.myspeed;if(k.y415) k.y-=mytank.myspeed;else if(arg0.getKeyCode()=KeyEvent.VK_D&myts0.size()0) mytank k = myts0.get(0);k.setDirect(1);k.x+=mytank.myspeed;if(k.x716) k.x-=mytank.m

53、yspeed;else if(arg0.getKeyCode()=KeyEvent.VK_A&myts0.size()0) mytank k = myts0.get(0);k.setDirect(3);k.x-=mytank.myspeed;if(k.x0) mytank k = myts0.get(0);k.feed(k); 1.5系统运行及使用说明系统在Eclips、DOS环境下都可以运行。用户根据主界面,菜单里有二级菜单开始新游戏,选择开始新游戏又有单人游戏和双人游戏。菜单还包刮继续上局,存盘退出,暂停游戏,游戏设置等。本程序运用了多线程编程,每个坦克和子弹的运动都是因为线程的原因,本系

54、统还用到了输出输入流的知识,将战场的坦克坐标记录到文本文件中。题目二 都昌大酒店餐饮管理系统2.1题目简介都昌大酒店餐饮管理系统是采用Java编程语言,用JDBC连接到数据库的单机版小型系统。为方便餐饮管理,记录酒店日常管理有关信息,都昌大酒店管理系统孕育而生。2.2设计的内容、要求和目标2.2.1设计的内容 都昌大酒店管理系统,设计了数据库,实现了对数据库的数据插入,查询,更新等各项操作。在都昌大酒店管理系统中,开发了面向员工的管理平台。对员工提供的服务有登陆,浏览,以及对员工的添加、查询、修改、删除功能。2.2.2要求 1. 登录界面 2. 人事管理模块 3. 部门管理模块.,输入时部门名

55、称用下拉框选择,必须是部门表的部门名称,保存到数据库中时将保存到部门表中。4. 人事信息管理模块,可以进行对员工的查询,当然可以添加新的员工,还可以删除一些员工。2.2.3目标 能够实现对数据库的操作,可以实现对用户的用户名和密码进行验证,如果登陆成功,则进入都昌大酒店餐饮管理系统的主界面,通过主界面提供的菜单,可以实现对菜谱,人事信息,部门信息,以及对以上信息的添加、查询、修改、删除。2.3总体设计2.3.1功能模块设计下面列出了本系统的整体功能结果图以及各个模块之间的彼此联系,见图2-1所示。图2-1 系统模块各个功能间的联系说明:用户根据登录系统的主界面,在此主页面里可以选择人事管理模块

56、,它提供为本酒店所有员工的基本信息,还可以进行添加或者删除员工操作,在主页面里你还可以选择部门管理模块,它为本酒店提供开设和废除部门的功能,等等。2.3.2系统所有类之间的关系系统所有类之间的关系如图2-2所示图2-2系统所有类之间的关系在都昌大酒店餐饮管理系统中,需要编写12个Java源文件;其中有一个专门连接数据库的类,那就是GetRs.java类,它就相当于我们要访问的数据库里面的表,属于数据层,而RSModel.java和departModel.java属于业务逻辑层,主要负责与数据层联系,从数据层里面取得数据,而其他的属于界面层,主要是将从数据库里面取出来的数据显示出来。2.4数据库

57、设计 2.4.1关系模式 员工登录(员工编号,密码)员工信息(员工编号,员工姓名,性别,年龄,住址,职位,所在部门编号)部门信息(部门编号,部门名称,职位)菜谱信息(菜单编号,菜品名称,菜品价格,所用材料,材料库存,材料购地)2.4.2 E-R图图2-3 E-R图2.4.3数据库管理物理实现数据库是采用SQL server 2005,数据库名是Restaurant。2.4.4数据库表 员工登录信息表( Login_info )对应的数据字典如表2-1所示:表2-1 员工登录信息名字:员工登录信息描述:员工登录的基本信息定义:员工登录信息=员工编号+员工密码员工基本信息表( stuff_info

58、 )对应的数据字典如表2-2所示:表2-2 员工基本信息表名字:员工基本信息表描述:员工基本信息表定义:员工基本信息表=员工编号+员工姓名+性别+年龄+地址+职位+部门编号部门管理信息表( depart_info )对应的数据字典如表2-3所示:表2-3 部门管理信息表名字:部门管理信息表描述:部门管理信息表定义:部门管理信息表=部门编号+部门名称+职位菜谱信息表( menu_info )对应的数据字典如表2-4所示:表2-4 菜谱基本信息名字:菜谱基本信息描述:菜谱基本信息定义:菜谱基本信息=菜的编号+菜名+单价+库存+购进地址2.4.5表的建立1. 员工基本信息表的建立图2-4 员工基本信

59、息表的建立2. 登录日志表的建立图2-5 登录日志表的建立3. 部门信息表的建立图2-6 部门信息表的建立4. 菜谱信息表的建立图2-7 菜谱基本信息表的建立2.4.6表与表之间的关系各表之间的关系如图2-8所示:图 2-8 各个表间的关系图2.5详细设计及实现登录界面:登录界面是有帐号,密码一个文本框和一个密码框,帐号和密码存在数据库的表格中,用户先输入用户名和密码,程序先从数据库中核实密码是否正确,如果正确,再核实输入的用户的职位是否在经理或者经理以上,如果是,则登录成功,如果不是,则输入的用户没有访问权限。系统主界面:该主界面布局有点复杂,主要以BorderLayout,和CarderL

60、ayout布局为主。人事管理模块:用户用于添加、删除、修改、查询人事信息的模块。部门管理模块:用户用于添加、删除、修改、查询部门信息的模块。菜谱管理模块:用户用于添加、删除、修改、查询菜品信息的模块。2.5.1操作界面设计窗体功能描述 窗口默认大小为宽600,高600,窗口大小设置为可变的,可以用鼠标拉动界面,改变界面大小。文字颜色为默认,黑体,字体为默认的。登陆界面,如图2-9图2-9登陆界面所有的帐号和密码都存在数据库中,登录成功进入管理系统的主界面,登录帐号或密码输入错误会弹出相应的提示对话框,如图2-10所示图2-10 登录失败信息提示登录成功进入管理系统的主界面,管理系统的主界面如图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论