还剩38页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
广东工贸职业技术学浣桌面应用系统开发学期项目实训报告java课程实训题目版坦克大战java业计算机软件级软件班133号1313344名洪朝亮鲁指导教师庆完成时间2014/6/16-2014/7/4VK_DOWN}else ifargO.getKeyCodeQ==KeyEvent.mytank.setDirect2;myta nk.m oveDown;}else ifarg
0.getKeyCode==KeyEvent.VK_LEFT{mytank.setDirect3;myta nk.m oveLeftQ;}、可以连续发射多颗炮弹(不多于发)3m yT an k6VK_J{ifargO.getKeyCodeQ==KeyEvent.〃我的坦克开火//this.mytank.shotEnemyO;〃最多发射颗子弹5ifthis.mytank.ss.size=5{this.mytank.shotEnemyO;、当发射的炮弹击中时,从画面上消失,4myTank enemy Tank enemy Tank要求有爆炸效果〃写一个函数专门判断子弹是否击中敌人坦克public voidhitTankShot senemyTank et{z〃判断该坦克的方向switchet.direct{〃如果敌人坦克的方向是上或者是下case0:case2:ifs.xet.xs.xet.x+20s.yet.y s.yet.y+30{〃击中〃子弹死亡敌人坦克死亡s.isLive=false;et.isLive=false;〃创建一颗炸弹,放入bombsBomb b=new Bombet.x et.y;zbombs.addb;case1:case3:ifs.xet.xs.xet.x+30s,yet.y s.yet.y+20{〃击中〃子弹死亡敌人坦克死亡s.isLive=false;二et.isLive false;〃创建一颗炸弹,放入bombsBomb b=new Bombet.x,et.y;bombs.addb;}、可以随机自由运动,可以随机发射炮弹5enemyTank国软件班案例13class enemyTankextends Tankimplements Runnable{〃炮弹集合类VectorShot ss=new VectorShot;//Shot s=null;〃随机变量完全是做随机处理坦克发射炮弹int times=O;boolean isLive=true;public enemyTankintxjnt y{superx,y;}©Overridepublic voidrun{whiletrue{try Thread.s/eep50;}catch InterruptedExceptione{//TODO Auto-generated catchblocke.printStackTrace;this.times++;ifthis.times%2==0{ifthis.isLive=true{〃规定敌人坦克可以发射课炮弹5ifss.size=5{Shot s=null;switchthis.direct{case0:〃说明坦克正在向上走forint i=0;i30;i++{ifyo{y-=speed;}tryThread.s/eep50;}catchException e{e.printStackTrace;}〃创建一颗炮弹s=new Shotx+10,y0;zss.adds;break;forint i=0;i30;i++{ifx400{x+=speed;}try白夕Threads/50;}catchException e{e.printStackTraceO;}s=new Shotx+30y+10,1;zss.adds;break;〃说明坦克正在向下走forint i=0;i30;i++{ify300{y+=speed;}tryThread.s/eeyXSO;}catchException e{e.printStackTraceQ;}s=new Shotx+10y+30,2;zss.adds;break;forint i=O;i3O;i++{ifx0{x-=speed;}tryThread.s/e6y50;}catchException e{e.printStackTraceO;}}s=new Shotx,y+103;zss.adds;break;}//switch〃启动炮弹线程Thread t=new Threads;t.start;}//ifss.size=5{}//ifthis.isLive=true{//二〃随机产t hi s.d ire cti nt Ma th.3/7do/77*4;生一个新的方向〃判断敌人坦克是否死亡ifthis.isLive==false{〃让坦克退出线程break;、发射的炮弹击中时,从画面上消失,要求有爆炸效6enemyTank myTankmyTank果,最好有爆炸声音效果public voidhitMe{//取出每一辆敌人坦克for inti=0;ithis.vv.size;i++{enemyTank et=vv.geti;//取出每一发炮弹for intj=0;jet.ss.size;j++{Shot s=et.ss.getj;if this.mytank.isLive{this.hitTanks this.mytank;z、课程实训任务书及成绩评定、实训时间及目的1本次实训时间为第周,共三周时间,完成一个综合游戏项目的开发17-19在本次项目开发过程中,会应用前面所学习过的知识编程基础知识、java面向对象编程、常用类如集合类的使用、绘图技术、设计、事件Vector GUI编程、多线程编程技术等知识、实训要求2本次实训内容为完成一个坦克游戏项目,项目要求如下)在界面上绘制出敌我坦克,自己坦克辆,敌人坦克不少于辆我的坦115克()敌人坦克()myTank,enemy Tank)可以通过方向键控制它的运动(上、下、左、右)2myTank)可以连续发射多颗炮弹(不多于发)_3myTank6)当发射的炮弹击中时,从画面上消失,要4myTank enemy Tank enemyTank求有爆炸效果)可以随机自由运动,可以随机发射炮弹5enemyTank)发射的炮弹击中时,从画面上消失,要求有6enemyTank myTankmyTank爆炸效果,最好有爆炸声音效果)防止与之间,和之间重叠7enemyTank enemyTankenemyTank myTank运动)游戏开始前有提示,有声音等效果8)可以实现游戏的分关例如第一关,第二关等9)游戏界面可以记录玩家的成绩,记录击中数等信息10)可以实现游戏的存盘退出,继续上局游戏等功能*11)游戏画面可以设置有砖墙、钢墙、障碍物等道具*12)可以通过吃魔法块等方式增强功力,打穿钢墙等障碍物,从而*13myTank直接击毁enemyTanko上述要求中,带星号(*)的为选做,请认真撰写实训报告,完成实训所提出的功能要求指导教师评语成绩指导教师签字日期}}©Overridepublic voidrun{I ITODO Auto-generated methodstub//每隔毫秒去重绘100while true{try Thread.s/eep100;}catch InterruptedExceptione{//TODO Auto-generated catchblock e.printStackTrace;//判断我的坦克是否击中敌人坦克this.hitEnemyTank;//判断敌人的坦克是否击中我的坦克this.hitMe;//重绘this.repaintQ;、防止与之间,和之间重叠运7enemyTankenemyTankenemyTankmyTank//检测坦克重叠函数public booleanisChongdie{〃取出面板上活着的坦克〃默认不重叠boolean b=false;switchthis.direct{case0:〃我的坦克向上〃取出所有敌人的坦克forint i=O;iaa.size;i++〃取出第一个坦克enemyTank et=aa.geti;〃如果不是自己ifet!=this〃敌人的坦克是向上或向下ifet.direct==O||et.direct==2ifthis.x=et.xthis.x=et.x+20this.y=et.ythis.y=et.y+30{b=true;}ifthis.x+20=et.xthis.x+20=et.x+20this.y=et.ythis.y=et.y+30{b=true;}}〃敌人的坦克是向左或向右ifet.direct==1||et.direct==3ifthis.x=et.xthis.x=et.x+30this.y=et.ythis.y=et.y+20{b=true;}ifthis.x+20=et.xthis.x+20=et.x+30this.y=et.ythis.y=et.y+20b=true;}break;〃我的坦克向右forint i=O;iaa.size;i++ifet!=thisifet.di rect==O||et.di rect==2〃上一点ifthis.x+30=et.xthis.x+30=et.x+20this.y=et.ythis.y=et.y+30b=true;〃下一点ifthis.x+30=et.xthis.x+30=et.x+20this.y+20=et.ythis.y+20=et.y+30b=true;ifet.direct==1||et.direct==3ifthis.x+30=et.xthis.x=et.x+30this.y=et.ythis.y=et.y+20{b=true;}〃下一点ifthis.x+30=et.xthis.x+30=et.x+30this.y+20=et.ythis.y+20=et.y+20b=true;}break;〃我的坦克向下forint i=O;iaa.size;i++ifet!=this{ifet.direct==O||et.direct==2〃左一点ifthis.x=et.xthis.x=et.x+20this.y+30=et.ythis.y+30=et.y+30b=true;〃右一点ifthis.x+20=et.xthis.x+20=et.x+20this.y+30=et.ythis.y+30=et.y+30b=true;ifet.direct==1||et.direct==3ifthis.x=etxthis.x=etx+30this.y+30=etythis.y+30=et.y+20b=true;ifthis.x+20=et.xthis.x+20=et.x+30this.y+30=et.ythis.y+30=et.y+20b=true;}break;〃我的坦克向左〃取出所有敌人的坦克forint i=O;iaa.size;i++enemyTank et=aa.geti;〃如果不是自己ifet!=this〃上一点ifet.direct==O||et.direct==2ifthis.x=et.xthis.x=et.x+20this.y=et.ythis.y=et.y+30b=true;ifthis.x=et.xthis.x=et.x+20this.y+20=et.ythis.y+20=et.y+30b=true;〃下一点ifet.di rect==1||et.di rect==3ifthis.x=et.xthis.x=et.x+30this.y=et.ythis.y=et.y+20b=true;ifthis.x=et.xthis.x=et.x+30this.y+20=et.ythis.y+20=et.y+20b=true;起至日期工作内容备注完成上述所提出的功能l-5o
二、课程实训进度计划完成上述所提出的功能6-8o完成上述所提出的功能9-10上交电子版实训报告、所设计的项目
三、课程实训所需要软件、硬件等资源说明及以上操作系统;♦Windows7及以上版本、eclipse或者myEclipse等软件♦JDK
1.6
四、可参考的资料、文献)教材《语言实用教程》,杨晓燕主编,清华大学出版社,1Java
2009.04)上课讲解演示的代码、所给的一些资料、2ppt3)图书馆、网上相关内容
五、实训内容及代码详细说明(请从此处开始写)初始化界面:
1.printStackTrace;return;AudioFormat format=audioInputStream.getFormat;SourceDataLine auline=null;DataLine.Info info=newDataLine.InfoSourceDataLine.class format;ztry.getUneiyauline=SourceDataLine AudioSy stem nf o;auline.openformat;}catchException e{e.printStackTrace;return;auline.startO;int nBytesRead=O;〃这是缓冲byte[]abData=new byte
[1024];trywhilenBytesRead!=-1nBytesRead=audioInputStream.readabData OabData.leng th;z zifnBytesRead=0auline.writeabData,0,nBytesRead;}}catchIOException e{e.printStackTrace;return;}finally{auline.drain;auline.closeO;)可以实现游戏的分关例如第一关,第二关等9喙大战V
04.0繇戏但开始新演戏N继续下局脐我岱存盘并退出C退出演戏EStage1游戏界面可以记录玩家的成绩,记录击中数等信息10可以实现游戏的存盘退出,继续上局游戏等功能*11〃记录类,同时也可以保存玩家设置class Recorder〃记录每关有多少敌人enNum-2Q]private staticint〃设置我有多少可以用的人my Life-3]private staticint〃记录总共消灭了多少敌人a//EnNum=O;private staticint〃从文件中恢复记录点VectorNode nodes=new VectorNode;private staticFileWriter/i^null;private staticBufferedWriter Zw^null;於private staticFileReader null;private staticBufferedReader Zr=null;二static VectorEnemyTanke8newVectorEnemyTank;〃完成读取任务public VectorNodegetNodesAndEnNumtryfr=v\e\NFileReaderG:\\MyRecording.txt;br=ne\NBufferedReader^;String n=〃先读取第一行n=Z/:readLine;aHEnNum=\ntegejparseIntj\;whilen=Z/:readLine!=null〃文件中的数据中间用空格隔开的String[]xyz=n.split;.夕Node node=new NodeQnteger7Kxyz
[0],.夕小丽Integer3”xyz
[1],Integer•夕8%eTKxyz
[2];nodes.addnode;}catchException e......//System.out.println;e.printStackTrace;}finally{try〃先开后关原则、安全——和数据库一样Z7/:close;「;close}catchException ee.printStackTrace;return nodes;〃保存击毁敌人的数量和敌人的坦克坐标,方向public voidkeepRecAndEnemyTanktry〃创建fw=ne\NFileWriterg:/MyRecording.txt;Zn^new BufferedWriter/i^;bw.wr\te〈a IIEn Num+\r\n;笈forint i=0;ie size;i++〃取出第一个坦克EnemyTank et=e^.geti;ifet.isLive〃活的就保存String recorde=et.getX++et.getY+n+et.direct;〃写入到//System.out.printlnCok;,,Zkzwriterecorde+\r\n;}catch Exceptione{//TODO:handle exception}finally{try〃后开先关闭Zpzclose;Zkclose;Jcatch Exceptione{//TODO:handle exceptione.printStackTrace;
六、实训总结通过在本次项目开发过程中,应用到了前面所学习过的知识编程基java础知识、面向对象编程、常用类如集合类的使用、绘图技术、设Vector GUI计、事件编程、多线程编程技术等知识使得所学知识更加巩固,也更加全面的学习到了语言编程JAVAimport java.io.IOException;importjava.util.Vector;import javax.imageio.ImagelO;import javax.swing.*;public classTankGame7extends JFrame{MyPanel mp=null;public staticvoid mainString[]args{TankGame7demol=new TankGame7;public TankGame7{mp=new MyPanelQ;;mp.setBackgroundColor.ZZcA//启动口史线程Thread t=new Threadmp;t.startQ;//将如添加到窗体上this.addmp;//注册事件监听this.addKeyListenermp;this.setSize400300;z软件班案例this.setTitle13//关闭jvmthis.setDefaultCloseOperationJFrame.£A7rthis.setVisibletrue;}、在界面上绘制出敌我坦克,自己坦克辆,敌人坦克不少于辆我的坦克
1.215敌人坦克myTank,enemyTank//绘制坦克public voiddrawTankint x,int y,Graphics g,int type,intdirect{〃画笔g-〃一类型》我的坦克红色,》敌人的坦克蓝色type0-1-一方向》上》右》下左“direct0-1-2—3-4//判断是什么类型的坦克switch type{case0:g.setColorColor.cj4/7;break;case1:g.setColorColor.ye/Z9M^;break;switch direct{//向上case0://画出我的坦克侄!]时再封装成一个函数〃.画出左边的矩形1g.fill3DRectx y5,30,false;f z.画出右边矩形//2g.fill3DRectx+15,y,5,30,false;.画出中间矩形//320,g.fill3DRectx+5,y+5,10,false;〃.画出圆形4g.fillOvalx+5,y+10,10,10;.画出线//5g.drawLinex+10,y+15x+10,y;zbreak;//炮筒向右//画出上面矩形g.fill3DRectx y,30,5,false;,//画出下面的矩形g.fill3DRectx y+1530,5false;z ZZ//画出中间的矩形20,g.fill3DRectx+5,y+5,10,false;//画出圆形g.fillOvalx+10,y+5,10,10;//画出线g.drawLinex+15,y+10,x+30,y+10;break;//向下//画出我的坦克侄!时再封装成一个函数J.画出左边的矩形//1g.fill3DRectx y,5,30false;z z.画出右边矩形//2g.fill3DRectx+15,y,5,30,false;.画出中间矩形//320,g.fill3DRectx+5,y+5,10,false;〃.画出圆形4g.fillOvalx+5,y+10,10,10;.画出线//5g.drawLinex+10,y+15x+10,y+30;zbreak;//向左//画出上面矩形g.fill3DRectx y30,5false;z zZ//画出下面的矩形g.fill3DRectx y+15,305false;z zZ//画出中间的矩形g.fill3DRectx+5,y+5,20,10false;z//画出圆形g.fillOvalx+10,y+5,10,10;//画出线g.drawLinex+15,y+10,x,y+10;break;、可以通过方向键控制它的运动(上、下、左、右)2myTankpublic voidkeyPressedKeyEvent argO{//TODOAuto-generated methodstubVK_ifarg
0.getKeyCode==KeyEvent.UP}{mytank.setDirectO;mytank.moveUpO;}else ifarg
0.getKeyCode==KeyEvent.VK_RIGHT{mytank.setDirectl;mytank.moveRightQ;。