版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件详细设计说明书一、TankWar类:TankWar继承Frame类。1、 paint( )方法paint( ) 方法主要实现对坦克类和子弹类,障碍物类和爆炸类等画到窗口上。坦克类又分为MyTank和EnwmyTank 两类。对这两类用不同的颜色画到窗口上。画子弹时通过传递坦克的颜色画出相应的子弹颜色。子弹画坦克死亡则不再对其进行重画。2、 update( )方法。update( ) 方法主要是为了解决,重画频率太快,paint( ) 方法还没有完成,重画坦克时出现的闪烁现象。通过双缓冲技术将所有东西画在虚拟图片上,一次性显示出来解决闪烁现象。3、 内部类KeyMon键盘监听KeyMon继承
2、KeyAdapter类。通过KeyMon类的监听,用户可以通过键盘控制自己的坦克。4、 内部类MyTankWarThreadMyTankWarThread实现Runnable接口,通过MyTankWarThread实现对坦克的重画,实现坦克的移动。5、 showFrame( )方法showFrame( )方法主要是设置一个窗口及其各种参数。二、Tank类Tank类是实现Runnable接口的一个抽象类1、 Tank类的主要属性有:int x;/坦克的位置int y;/int oldx;/坦克上一步的坐标int oldy;/Dir dir;/ Tank方向的成员变量int speed = 5;b
3、oolean isLive = true;2、 Tank类提供各种的构造方法Tank(int x, int y) Tank(int x, int y, Dir dir) Tank(int x, int y, Dir dir, TankWar tw)根据不同的需要使用不同的构造方法。3、 drawTank ()方法drawTank()方法根据坦克的类型不同可以画出不同类型的坦克和不同方向的坦克。敌人的坦克用BLUE画出来,自己的坦克用RED颜色画出来,以区分敌我。4、 fire()方法fire()方法的功能是实现打出一颗子弹,fire()方法调用了画坦克的颜色变量 c ,画出与坦克一样颜色的子弹
4、,以区别子弹是那一方发出来的。5、 isHitWall()方法该方法是用来判断Tank是否与障碍物发生碰撞public boolean isHitWall() Wall w = null;for (int i = 0; i < tw.walls.size(); i+) w = tw.walls.get(i);if (w.isHits(this.getRectangle() return true;return false;6、 getRectangle()方法该方法主要是用来检测是否发生了碰撞。public Rectangle getRectangle() return new Rect
5、angle(x, y, TANK_WIDTH, TANK_HEIGHT);7、 add(int count, TankWar tw)方法该方法是用来添加敌人坦克的,当敌人坦克数量减少时,而此时敌人的count又未小于0时添加相应数量的敌人坦克来增加游戏的可玩性。三、MyTank类MyTank类继承Tank类1、 locDir(KeyEvent e)方法通过键盘监听,对按键进行监听来实现用户可以通过W D S A四个方向键对坦克的控制2、 keyReleased(KeyEvent e)方法该方法主要是为了防止连续发子弹的问题,只有放开SPACE按键才可以发弹,这样就增加了游戏的可玩性。3、 st
6、ay()方法该方法主要实现暂停的功能,这个是本游戏代码中的一个的亮点,通过线程来实现的public void stay() int tc = Thread.activeCount();Thread threads = new Threadtc;Thread.enumerate(threads);if (tw.flag) for (int i = 0; i < threads.length; i+) System.out.println(tc + ":suspend " + threadsi.getName();if (threadsi.getName().matche
7、s("Thread-.*") threadsi.suspend();tw.flag = false; else if (! tw.flag) for (int i = 0; i < threads.length; i+) System.out.println(tc + ":resume " + threadsi.getName();if (threadsi.getName().matches("Thread-.*") threadsi.resume();tw.flag = true; 4、 move()方法该方法是实现坦克的移动
8、,如果遇到障碍物或出界,则返回上一次的位置,通过(oldX , oldY)坐标记录坦克每一次移动的位置。public void move() if (dir = Dir.U) oldy = y;y = y - speed;if (isHitWall() y = oldy; else if (dir = Dir.R) oldx = x;x = x + speed;if (isHitWall() x = oldx; else if (dir = Dir.D) oldy = y;y = y + speed;if (isHitWall() y = oldy; else if (dir = Dir.L)
9、 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;5、 d
10、rawTank()方法这个方法是实现坦克自动移动,玩家可以通过方向键改版方向,移动过程中可以发射子弹。public void drawTank(Graphics g) super.drawTank(g);if (isStay) move();四、EneyTank类EnemyTank类继承Tank类1、 moveTrace()方法该方法实现的是敌人坦克伪智能功能,这个是本坦克大战的一个亮点。敌人坦克出来后会根据当前位置和hero的位置比较,进而对hero进行追击。public void moveTrace()if(step>0)move();step-;return;int dx = th
11、is.x- tw.hero.x ;int dy = this.y- tw.hero.y ; if (tw.hero.isLive) int next = (int) (Math.random() * 2);if (next = 1) if (dx > 0) this.dir = Dir.L; else if (dx < 0) this.dir = Dir.R; else if (dy > 0) this.dir = Dir.U; else if (dy < 0) this.dir = Dir.D; else move();step = (int) (Math.rando
12、m()*12+3);2、 move()方法敌人的坦克移动时调用的方法,方向是通过随机数来确定的。3、 hitTank(Tank tank)方法敌人的碰撞检测方法,如果和hero发生碰撞则hero发生爆炸。4、 run()方法敌人坦克的启动线程控制。public void run() while(isLive) try Thread.sleep(50); catch (InterruptedException e) e.printStackTrace();moveTrace();五、Shells子弹类子弹类继承了Runnable类,基本属性有子弹的坐标(x , y),方向Dir.1、 drawShells(Graphics g)方法这是一个画子弹的方法,子弹颜色通过调用坦克的颜色this.c来实现画出与坦克一样颜色的。2、 move() 子弹移动的方法,子弹方法通过坦克当前的方向来确定。3、 run()子弹启动的线程。4、 public Rectangle ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 互联网医疗平台合同纠纷的管辖权确定
- 互联网+健康科普内容品牌建设
- 临床路径标准化在院前急救中应用
- 临床路径实施中的跨部门协作障碍突破
- 临床路径在医疗纠纷防范中的作用分析
- 临床营养师与多学科团队的饮食干预
- 临床模拟设备在医学教育中的价值
- 临床技能递进培养中的临床决策能力培养
- 临床技能虚拟培训中的团队领导力培养
- 临床技能知识图谱构建应用
- DB51-T 3287-2025 设施农业土壤熏蒸消毒技术规程
- 坡地沟租赁合同范本
- 区域性股权市场的发展现状、现实困境及解决对策
- 药物经济学教案
- 雨课堂学堂云在线《中国特色社会主义理论与实践研究(北理 )》单元测试考核答案
- 社区家庭医生签约培训
- DB44-T 2668-2025 高速公路服务区和停车区服务规范
- 2025-2026学年浙美版二年级美术上册全册教案
- 物业设施设备保养计划表
- 胶济铁路428事故讲解
- 髋关节置换围手术期加速康复护理
评论
0/150
提交评论