坦克大战详细设计说明书样本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件详细设计说明书
一、 TankWar类:
TankWar继承Frame类。
1、paint( )方法
paint( ) 方法主要实现对坦克类和子弹类, 障碍物类和爆炸类等画到窗口上。坦克类又分为MyTank和EnwmyTank 两类。对这两类用不同的颜色画到窗口上。画子弹时经过传递坦克的颜色画出相应的子弹颜色。
子弹画坦克死亡则不再对其进行重画。
2、update( )方法。
update( ) 方法主要是为了解决, 重画频率太快, paint( ) 方法还没有完成, 重画坦克时出现的闪烁现象。
经过双缓冲技术将所有东西画在虚拟图片上,一次性显示出来解决闪烁现象。
3、内部类KeyMon键盘监听
KeyMon继承KeyAdapter类。经过KeyMon类的监听, 用户能够经过键盘控制自己的坦克。
4、内部类MyTankWarThread
MyTankWarThread实现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;