坦克大战详细设计说明书_第1页
坦克大战详细设计说明书_第2页
坦克大战详细设计说明书_第3页
坦克大战详细设计说明书_第4页
坦克大战详细设计说明书_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

软件具体设计说明书一、TankWar类: TankWar继承Frame类。paint()方法paint()方法关键实现对坦克类和子弹类,障碍物类和爆炸类等画到窗口上。坦克类又分为MyTank和EnwmyTank两类。对这两类用不一样颜色画到窗口上。画子弹时经过传输坦克颜色画出对应子弹颜色。子弹画坦克死亡则不再对其进行重画。update()方法。update()方法关键是为了处理,重画频率太快,paint()方法还没有完成,重画坦克时出现闪烁现象。经过双缓冲技术将全部东西画在虚拟图片上,一次性显示出来处理闪烁现象。内部类KeyMon键盘监听KeyMon继承KeyAdapter类。经过KeyMon类监听,用户能够经过键盘控制自己坦克。内部类MyTankWarThreadMyTankWarThread实现Runnable接口,经过MyTankWarThread实现对坦克重画,实现坦克移动。showFrame()方法showFrame()方法关键是设置一个窗口及其多种参数。二、Tank类 Tank类是实现Runnable接口一个抽象类Tank类关键属性有:intx; //坦克位置 inty; // intoldx; //坦克上一步坐标 intoldy; // Dirdir; //Tank方向组员变量intspeed=5; booleanisLive=true;Tank类提供多种结构方法Tank(intx,inty) Tank(intx,inty,Dirdir) Tank(intx,inty,Dirdir,TankWartw) 依据不一样需要使用不一样结构方法。drawTank()方法drawTank()方法依据坦克类型不一样能够画出不一样类型坦克和不一样方向坦克。敌人坦克用BLUE画出来,自己坦克用RED颜色画出来,以区分敌我。fire()方法fire()方法功效是实现打出一颗子弹,fire()方法调用了画坦克颜色变量c,画出与坦克一样颜色子弹,以区分子弹是那一方发出来。isHitWall()方法该方法是用来判定Tank是否与障碍物发生碰撞publicbooleanisHitWall(){ Wallw=null; for(inti=0;i<tw.walls.size();i++){ w=tw.walls.get(i); if(w.isHits(this.getRectangle())){ returntrue; } } returnfalse; }getRectangle()方法该方法关键是用来检测是否发生了碰撞。publicRectanglegetRectangle(){ returnnewRectangle(x,y,TANK_WIDTH,TANK_HEIGHT); }add(intcount,TankWartw)方法该方法是用来添加敌人坦克,当敌人坦克数量降低时,而此时敌人count又未小于0时添加对应数量敌人坦克来增加游戏可玩性。三、MyTank类 MyTank类继承Tank类locDir(KeyEvente)方法经过键盘监听,对按键进行监听来实现用户能够经过WDSA四个方向键对坦克控制keyReleased(KeyEvente)方法该方法关键是为了预防连续发子弹问题,只有放开SPACE按键才能够发弹,这么就增加了游戏可玩性。stay()方法该方法关键实现暂停功效,这个是本游戏代码中一个亮点,经过线程来实现 publicvoidstay(){ inttc=Thread.activeCount(); Thread[]threads=newThread[tc]; Thread.enumerate(threads); if(tw.flag){ for(inti=0;i<threads.length;i++){ System.out.println(tc+":suspend"+threads[i].getName()); if(threads[i].getName().matches("^Thread-.*")){ threads[i].suspend(); tw.flag=false; } } }elseif(!tw.flag){ for(inti=0;i<threads.length;i++){ System.out.println(tc+":resume"+threads[i].getName()); if(threads[i].getName().matches("^Thread-.*")){ threads[i].resume(); tw.flag=true; } } } }move()方法该方法是实现坦克移动,假如碰到障碍物或出界,则返回上一次位置,经过(oldX,oldY)坐标统计坦克每一次移动位置。publicvoidmove(){ if(dir==Dir.U){ oldy=y; y=y-speed; if(isHitWall()){ y=oldy; } }elseif(dir==Dir.R){ oldx=x; x=x+speed; if(isHitWall()){ x=oldx; } }elseif(dir==Dir.D){ oldy=y; y=y+speed; if(isHitWall()){ y=oldy; } }elseif(dir==Dir.L){ oldx=x; x=x-speed; if(isHitWall()){ x=oldx; } } //判定坦克出界 if(x>TankWar.GAME_WIDTH-TANK_WIDTH-5){ x=TankWar.GAME_WIDTH-TANK_WIDTH-5; } if(x<5){ x=5; } if(y>TankWar.GAME_HEIGHT-TANK_HEIGHT-5){ y=TankWar.GAME_HEIGHT-TANK_HEIGHT-5; } if(y<TANK_HEIGHT){ y=TANK_HEIGHT; } }drawTank()方法这个方法是实现坦克自动移动,玩家能够经过方向键改版方向,移动过程中能够发射子弹。publicvoiddrawTank(Graphicsg){ super.drawTank(g); if(isStay){ move(); } }四、EneyTank类 EnemyTank类继承Tank类moveTrace()方法该方法实现是敌人坦克伪智能功效,这个是本坦克大战一个亮点。敌人坦克出来后会依据目前位置和hero位置比较,进而对hero进行追击。 publicvoidmoveTrace(){ if(step>0){ move(); step--; return; } intdx=this.x-tw.hero.x; intdy=this.y-tw.hero.y; if(tw.hero.isLive){ intnext=(int)(Math.random()*2); if(next==1){ if(dx>0){ this.dir=Dir.L; }elseif(dx<0){ this.dir=Dir.R; } }else{ if(dy>0){ this.dir=Dir.U; }elseif(dy<0){ this.dir=Dir.D; } } }else{ move(); } step=(int)(Math.random()*12+3); }move()方法敌人坦克移动时调用方法,方向是经过数来确定。hitTank(Tanktank)方法敌人碰撞检测方法,假如和hero发生碰撞则hero发生爆炸。run()方法敌人坦克开启线程控制。publicvoidrun(){ while(isLive){ try{ Thread.sleep(50); }catch(InterruptedExceptione){ e.printStackTrace(); } moveTrace(); } }五、Shells子弹类 子弹类继承了Runnable类,基础属性有子弹坐标(x,y),方向Dir.drawShells(Graphicsg)方法这是一个画子弹方法,子弹颜色经过调用坦克颜色this.c来实现画出与坦克一样颜色。move()子弹移动方法,子弹方法经过坦克目前方一直确定。run()子弹开启线程。publicRec

温馨提示

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

评论

0/150

提交评论