当前位置:文档之家› 坦克大战详细设计说明书

坦克大战详细设计说明书

目录1绪论 (1)1.1开发背景………………………………………………………………………1.2开发思路………………………………………………………………………1.3开发工具………………………………………………………………………2程序设计……………………………………………………………………………2.1主要设计思路……………………………………………………………………2.2思路设计实现……………………………………………………………………3程序简介………………………………………………………………………3.1程序一些类的介绍……………………………………………………………4程序运行与测试……………………………………………………………………4.1程序开始………………………………………………………………………4.2程序界面………………………………………………………………………4.3系统启动测试………………………………………………………………4.4子弹发射测试………………………………………………………………4.5玩家移动测试………………………………………………………………4.6信息发送测试………………………………………………………………5程序有关代码………………………………………………………………………5.1………………………………………………………………………5.2………………………………………………………………………5.3………………………………………………………………………6………………………………………………………………………6.1………………………………………………………………………参考文献………………………………………………………………………1绪论1.1开发背景随着信息社会的迅猛发展,人们对游戏的要求也越来越高1.2开发思路该游戏的界面使用了JA V A awt界面显示技术实现,游戏主窗口类TankClient继承了Frame类,重写了paint方法,在该方法中绘出游戏背景,各种元件和控件等。

游戏的每个组成部分都被封装为一个Java类,例如坦克对象被封装在Tank类中,该类提供了构建坦克对象方法、坦克上下左右移动方法、fire发射炮弹方法、keyReleased按键松开事件处理方法和keyPressed按键按下事件处理方法。

炮弹类Missile,提供了移动方法;坦克攻击判定,坦克中保存一个isgood成员变量,判定是否是敌人坦克,在子弹飞行轨迹中判定是否有坦克,若有则判定击毁该坦克。

1.3开发工具该坦克大战游戏是在Eclipse 集成开发环境中开发的,它目标是实现一个单机版本的人机对战游戏程序,该程序界面比较美观,操作灵活流利。

具体实现了游戏界面布局设计、坦克图片绘制、子弹绘制、坦克移动、坦克对战,障碍墙绘制等功能。

坦克游戏结束的条件是,游戏中我方坦克守护的围墙区域被敌人击破,四面围墙被攻破则判定游戏结束。

本游戏中为了增加趣味性,对坦克做了人工智能处理,即随机生成坦克的下一步移动方向,随机发射炮弹等。

另外,在游戏地图上还增加了墙壁,分为普通墙壁和金属墙壁,普通墙壁一发炮弹即可击破。

游戏地图上还绘制了河流、森林等图片,进一步模拟真实的游戏场景,使得该游戏更富有趣味性。

本游戏程序直接在eclipse开发环境中运行,建议使用jdk1.6版本,在eclipse直接右击工程名,选择run as Java Application即可正常运行程序,使用键盘上的方向键和S按键发射炮弹。

2程序设计2.1主要设计思路2.2成粗设计的实现3.1有关类的介绍TankWar类:TankWar继承Frame类。

1、paint( )方法paint( ) 方法主要实现对坦克类和子弹类,障碍物类和爆炸类等画到窗口上。

坦克类又分为MyTank和EnwmyTank 两类。

对这两类用不同的颜色画到窗口上。

画子弹时通过传递坦克的颜色画出相应的子弹颜色。

子弹画坦克死亡则不再对其进行重画。

2、update( )方法。

update( ) 方法主要是为了解决,重画频率太快,paint( ) 方法还没有完成,重画坦克时出现的闪烁现象。

通过双缓冲技术将所有东西画在虚拟图片上,一次性显示出来解决闪烁现象。

3、内部类KeyMon键盘监听KeyMon继承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;boolean 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 ,画出与坦克一样颜色的子弹,以区别子弹是那一方发出来的。

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 Rectangle(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、stay()方法该方法主要实现暂停的功能,这个是本游戏代码中的一个的亮点,通过线程来实现的public void stay() {int tc = Thread.activeCount();Thread[] threads = new Thread[tc];Thread.enumerate(threads);if (tw.flag) {for (int i = 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;}}} else if (! tw.flag) {for (int i = 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;}}}}4、move()方法该方法是实现坦克的移动,如果遇到障碍物或出界,则返回上一次的位置,通过(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) {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、drawTank()方法这个方法是实现坦克自动移动,玩家可以通过方向键改版方向,移动过程中可以发射子弹。

public void drawTank(Graphics g) {super.drawTank(g);if (isStay) {move();}}EneyTank类EnemyTank类继承Tank类1、moveTrace()方法该方法实现的是敌人坦克伪智能功能,这个是本坦克大战的一个亮点。

相关主题