软件详细设计说明
本游戏主要用上的类包括:游戏窗口类(GameFrame )、游戏入口类(Runner )、Tank 类(坦克抽象类)、玩家坦克类(PlayerTank )、敌人坦克类(EnemyTank )。子弹类(Missile )、Direction (方向枚举类)、Explode (爆炸类)、Obstacle (障碍物抽象类)、Wood (木头类)、Stone (石头类)、TankTool(道具抽象类) 、Crystal (水晶类)、Crown(皇冠类) 。
类间关系:
PlayerTank 、EnemyTank 继承Tank 类
Wood 、Stone 继承 Obstacle 类
Crystal 、Crown 继承TankTool 类
类的详细设计:
Tank (坦克类) 抽象类
属性:
int x,y; //所在参考坐标
int oldX,oldY; //上一次的所在坐标
public static final int WIDTH =50; //默认宽度
public static final int HEIGHT =50;//默认高度
int width=WIDTH ;// 坦克图像的长和宽
int height=HEIGHT ;
int xSpeed = 10; //坦克每次水平运动的像素(速度)
int ySpeed = 10; //坦克每次垂直运动的像素(速度)
Direction dir=Direction.D ; //方向
Direction ptDir=Direction.D ; //炮筒方向
boolean bL,bU,bR,bD; //记录对应方向按钮是否按下, 缓冲键盘 按键录入信号不均匀 boolean live = true ; //是否活着
int life =100; //坦克生命值
GameFrame gf; //游戏类引用,持有本游戏对象
int team ; //所属队伍编号,0为玩家,1为敌方(2以上可以扩展为其他队伍)
抽象方法:
public abstract void draw(Graphics g); //画坦克
public abstract void move(); //移动坦克
public abstract void fire(); //开炮
public abstract void beHit(); //被击中
一般方法:
//与其他坦克相碰撞
public void collidesOtherTank(List tanks)
//获得坦克碰撞类
public Rectangle getRect()
PlayerTank (玩家坦克类,继承了Tank)
属性:
private int jump = 0; //记录坦克行走时,出现动态效果
private boolean isJump = false ; //记录当前是否跳起(解决跳动不太自然的现象)
private int jumpFrequency =6 ;//跳的频率
方法:
public void draw(Graphics g)
//移动
public void move()
//根据键盘按键,坦克作出准备移动的反应 public void keyPress(KeyEvent e) //根据按键,产生下次移动的方向 void locateDirection() public void keyReleased(KeyEvent e)
//发炮
public void fire()
//被打中 public void beHit()
EnemyTank (继承Tank )
属性:
private static Random r = new Random();//随机数产生器
private int step = r .nextInt(3)+3;//随机移动步数
方法:
public void draw(Graphics g) //画坦克方法
public void move()//坦克移动方法
public void moveRandom()//随机移动
public void moveTrace()//追踪玩家坦克移动 1.91 或者远离玩家,选择逃跑 void locateDirection()//根据所按的方向键,改变方向值
public void fire()/开炮方法
public void beHit()//被打中
Obstacle 类 (抽象类、所有障碍物的父类)
属性:
int x,y; //障碍物的参考坐标
int width,height;//障碍物的 长宽
boolean live=true ; // 障碍物是否活着
方法:
public abstract void draw(Graphics g); //画出自己
public abstract void beCollidesByTank(Tank tank); //被一台坦克碰撞 public void beCollidesByTanks(List tanks) //被一系列坦克碰撞 /被一系列子弹碰撞
public abstract void beCollidesByMissile(List missiles); public Rectangle getRect(){//取得碰撞类
石头类(继承障碍物)
属性:
public static Image image //展示的图片
public Rectangle getRect()//取得碰撞类
方法:
public void draw(Graphics g)
public void beCollidesByMissile(List missiles)//被一系列子弹打中
public void beCollidesByTank(Tank tank) //被碰中
public void beBreak()//石头被破坏
木头类(继承障碍物)
属性:
boolean live //木头是有生命的
public Image //展示图片
方法:
public Rectangle getRect()//取得碰撞类 public void draw(Graphics g) public void beCollidesByMissile(List missiles) //被子弹击中 public void beCollidesByTank(Tank tank) //被坦克碰上 public void beBreak(){//被破坏掉,产生爆炸
TankTool (抽象类,所有游戏道具的父类)
属性:
int x,y ;//道具所在的坐标
int width,height; //道具的长宽
boolean live = true ;
GameFrame gf;
方法:
public TankTool(int x,int y,GameFrame gf)
public TankTool(int x, int y, int width,int height,GameFrame gf)
abstract public void draw(Graphics g); //画出道具方法
abstract public void eatByTank(PlayerTank tank); //被玩家坦克吃掉的方法 public Rectangle getRect()
abstract public void eatByTank(PlayerTank tank); //被玩家坦克吃掉的方法 public Rectangle getRect()
Crystal(水晶类,继承游戏道具)
属性:
public static Image [] liveCrystal //展示的图片数组
方法:
public void draw(Graphics g) { public void eatByTank(PlayerTank tank) { //被玩家吃掉
Crown (王冠类、继承游戏道具)
属性:
public static Image[] liveCrystal //展示图片数组
方法:
public void draw(Graphics g)
public void eatByTank(PlayerTank tank) //被玩家吃掉
内部
private class GoldTimer implements Runnable//状态持续时间,计时器
Direction 方向枚举类
public enum Direction {
U , D , L , R , STOP ;
}
Explode(爆炸类)
属性:
private int x, y;// 爆炸出现的位置
private int step;// 爆炸的步骤
private boolean disappera = false ; // 记录爆炸是否消失
private int [] birdth = { 5, 10, 30, 50, 55, 30, 10, 5 }; // 敌人出生时的背景
private int type = 0; // 爆炸 类型: 0->大爆炸, 1->小爆炸 2->敌人出生时候的动画 1.3 type=3 石头爆炸 type=4 木头爆炸
public Image[] curExplode
public Image[] explodeImages
public Image[] explodeStone
public Image[] explodeWood
方法:
public void draw(Graphics g) // 画爆炸方法
Missile (子弹类)
属性:
private int x, y; Direction dir; public int xSpeed = 18; public int ySpeed = 18; public int width = 8; public int height = 8; GameFrame gf; private boolean live = true ; private int team;
方法:
public Missile(Tank tank) //构造方法
public void draw(Graphics g) {// 画出子弹 本身
private void move()//子弹移动
public Rectangle getRect()//返回子弹碰撞类
public boolean hitTank(Tank t) //击中一个敌人
public void hitTanks(List tanks) //打中多个敌人
public void hitMissile(Missile m ) //打中一个子弹
public void hitMissiles(List missiles) //打中多个子弹 public void beHit(){//被打中
Runner(游戏运行入口类)
public static void main(String[] args) {
}
GameFrame gf = new GameFrame(); gf.startToPlay();
GrameFrame (游戏窗口类)
属性:
int GAME_WIDTH; // 游戏窗口宽度
int GAME_HEIGHT; // 游戏窗口高度
int GAME_LOC_X; //游戏窗口水平坐标
int GAME_LOC_Y ; //游戏窗口纵坐标
int GAME_BACKGROUND;// 游戏背景粒度
boolean canFire; // 标记玩家坦克在当前瞬间是否能发炮
long fireFrequency; // 每隔 1000 毫秒才能发射子弹
boolean start; // 表示游戏是否进行
boolean pause; //标识是否暂停游戏
boolean canBoss; // 0.92 标记玩家坦克当前是否能 释放Boss 技能
long bossFrequency; // 0.92 每隔 bossFrequency 毫秒才能释放 Boss技能 long curBossTime; // 0.92 用于累计boss 键时间量 当累积到bossFrequency 时,可以发动boss 键技能
int numOfWar; // 游戏关卡数
int numOfStone; // 游戏的石头数目
int numOfWood; // 游戏的木头数目
int numOfEnemy;// 本关敌人总数量
int numOfCurrentEnemy;// 每个时刻只能出现的敌人数
int intelligence; // 1.21智能系数,值越高,敌人坦克越智能
int score = 0; // 1.4 游戏累计积分
int eacheScore = 170; // 1.4每个敌人所值分数
PlayerTank playerTank // 玩家坦克
List missiles;// 子弹容器
List enemyTanks;// 敌方坦克 容器
List explodes;// 爆炸对象的容器
List obstacles;// 障碍物的容器
List tools;// 道具的容器
内部类:
// 刷新游戏界面的线程类
private class PaintThread implements Runnable
// 监听游戏按钮的类
private class GameControl extends KeyAdapter
// 发动Boss 键的线程
private class BossThread implements Runnable
// 监听子弹发射速度的线程类
private class FireControlThread implements Runnable
// 监听boss 键冷却时间的线程, 1.81
private class BossControlThread implements Runnable
// 负责创建敌人的线程
private class CreateEnemyThread implements Runnable
// 1.4控制通关,或者重置游戏的线程
private class ClearThread implements Runnable
方法:
// 重新游戏释放资源
public void reStart()
// 通关
public void passGame()
// 开始游戏
public void startToPlay() //重写paint
public void paint(Graphics g) // 重写update 方法
public void update(Graphics g)
软件详细设计说明
本游戏主要用上的类包括:游戏窗口类(GameFrame )、游戏入口类(Runner )、Tank 类(坦克抽象类)、玩家坦克类(PlayerTank )、敌人坦克类(EnemyTank )。子弹类(Missile )、Direction (方向枚举类)、Explode (爆炸类)、Obstacle (障碍物抽象类)、Wood (木头类)、Stone (石头类)、TankTool(道具抽象类) 、Crystal (水晶类)、Crown(皇冠类) 。
类间关系:
PlayerTank 、EnemyTank 继承Tank 类
Wood 、Stone 继承 Obstacle 类
Crystal 、Crown 继承TankTool 类
类的详细设计:
Tank (坦克类) 抽象类
属性:
int x,y; //所在参考坐标
int oldX,oldY; //上一次的所在坐标
public static final int WIDTH =50; //默认宽度
public static final int HEIGHT =50;//默认高度
int width=WIDTH ;// 坦克图像的长和宽
int height=HEIGHT ;
int xSpeed = 10; //坦克每次水平运动的像素(速度)
int ySpeed = 10; //坦克每次垂直运动的像素(速度)
Direction dir=Direction.D ; //方向
Direction ptDir=Direction.D ; //炮筒方向
boolean bL,bU,bR,bD; //记录对应方向按钮是否按下, 缓冲键盘 按键录入信号不均匀 boolean live = true ; //是否活着
int life =100; //坦克生命值
GameFrame gf; //游戏类引用,持有本游戏对象
int team ; //所属队伍编号,0为玩家,1为敌方(2以上可以扩展为其他队伍)
抽象方法:
public abstract void draw(Graphics g); //画坦克
public abstract void move(); //移动坦克
public abstract void fire(); //开炮
public abstract void beHit(); //被击中
一般方法:
//与其他坦克相碰撞
public void collidesOtherTank(List tanks)
//获得坦克碰撞类
public Rectangle getRect()
PlayerTank (玩家坦克类,继承了Tank)
属性:
private int jump = 0; //记录坦克行走时,出现动态效果
private boolean isJump = false ; //记录当前是否跳起(解决跳动不太自然的现象)
private int jumpFrequency =6 ;//跳的频率
方法:
public void draw(Graphics g)
//移动
public void move()
//根据键盘按键,坦克作出准备移动的反应 public void keyPress(KeyEvent e) //根据按键,产生下次移动的方向 void locateDirection() public void keyReleased(KeyEvent e)
//发炮
public void fire()
//被打中 public void beHit()
EnemyTank (继承Tank )
属性:
private static Random r = new Random();//随机数产生器
private int step = r .nextInt(3)+3;//随机移动步数
方法:
public void draw(Graphics g) //画坦克方法
public void move()//坦克移动方法
public void moveRandom()//随机移动
public void moveTrace()//追踪玩家坦克移动 1.91 或者远离玩家,选择逃跑 void locateDirection()//根据所按的方向键,改变方向值
public void fire()/开炮方法
public void beHit()//被打中
Obstacle 类 (抽象类、所有障碍物的父类)
属性:
int x,y; //障碍物的参考坐标
int width,height;//障碍物的 长宽
boolean live=true ; // 障碍物是否活着
方法:
public abstract void draw(Graphics g); //画出自己
public abstract void beCollidesByTank(Tank tank); //被一台坦克碰撞 public void beCollidesByTanks(List tanks) //被一系列坦克碰撞 /被一系列子弹碰撞
public abstract void beCollidesByMissile(List missiles); public Rectangle getRect(){//取得碰撞类
石头类(继承障碍物)
属性:
public static Image image //展示的图片
public Rectangle getRect()//取得碰撞类
方法:
public void draw(Graphics g)
public void beCollidesByMissile(List missiles)//被一系列子弹打中
public void beCollidesByTank(Tank tank) //被碰中
public void beBreak()//石头被破坏
木头类(继承障碍物)
属性:
boolean live //木头是有生命的
public Image //展示图片
方法:
public Rectangle getRect()//取得碰撞类 public void draw(Graphics g) public void beCollidesByMissile(List missiles) //被子弹击中 public void beCollidesByTank(Tank tank) //被坦克碰上 public void beBreak(){//被破坏掉,产生爆炸
TankTool (抽象类,所有游戏道具的父类)
属性:
int x,y ;//道具所在的坐标
int width,height; //道具的长宽
boolean live = true ;
GameFrame gf;
方法:
public TankTool(int x,int y,GameFrame gf)
public TankTool(int x, int y, int width,int height,GameFrame gf)
abstract public void draw(Graphics g); //画出道具方法
abstract public void eatByTank(PlayerTank tank); //被玩家坦克吃掉的方法 public Rectangle getRect()
abstract public void eatByTank(PlayerTank tank); //被玩家坦克吃掉的方法 public Rectangle getRect()
Crystal(水晶类,继承游戏道具)
属性:
public static Image [] liveCrystal //展示的图片数组
方法:
public void draw(Graphics g) { public void eatByTank(PlayerTank tank) { //被玩家吃掉
Crown (王冠类、继承游戏道具)
属性:
public static Image[] liveCrystal //展示图片数组
方法:
public void draw(Graphics g)
public void eatByTank(PlayerTank tank) //被玩家吃掉
内部
private class GoldTimer implements Runnable//状态持续时间,计时器
Direction 方向枚举类
public enum Direction {
U , D , L , R , STOP ;
}
Explode(爆炸类)
属性:
private int x, y;// 爆炸出现的位置
private int step;// 爆炸的步骤
private boolean disappera = false ; // 记录爆炸是否消失
private int [] birdth = { 5, 10, 30, 50, 55, 30, 10, 5 }; // 敌人出生时的背景
private int type = 0; // 爆炸 类型: 0->大爆炸, 1->小爆炸 2->敌人出生时候的动画 1.3 type=3 石头爆炸 type=4 木头爆炸
public Image[] curExplode
public Image[] explodeImages
public Image[] explodeStone
public Image[] explodeWood
方法:
public void draw(Graphics g) // 画爆炸方法
Missile (子弹类)
属性:
private int x, y; Direction dir; public int xSpeed = 18; public int ySpeed = 18; public int width = 8; public int height = 8; GameFrame gf; private boolean live = true ; private int team;
方法:
public Missile(Tank tank) //构造方法
public void draw(Graphics g) {// 画出子弹 本身
private void move()//子弹移动
public Rectangle getRect()//返回子弹碰撞类
public boolean hitTank(Tank t) //击中一个敌人
public void hitTanks(List tanks) //打中多个敌人
public void hitMissile(Missile m ) //打中一个子弹
public void hitMissiles(List missiles) //打中多个子弹 public void beHit(){//被打中
Runner(游戏运行入口类)
public static void main(String[] args) {
}
GameFrame gf = new GameFrame(); gf.startToPlay();
GrameFrame (游戏窗口类)
属性:
int GAME_WIDTH; // 游戏窗口宽度
int GAME_HEIGHT; // 游戏窗口高度
int GAME_LOC_X; //游戏窗口水平坐标
int GAME_LOC_Y ; //游戏窗口纵坐标
int GAME_BACKGROUND;// 游戏背景粒度
boolean canFire; // 标记玩家坦克在当前瞬间是否能发炮
long fireFrequency; // 每隔 1000 毫秒才能发射子弹
boolean start; // 表示游戏是否进行
boolean pause; //标识是否暂停游戏
boolean canBoss; // 0.92 标记玩家坦克当前是否能 释放Boss 技能
long bossFrequency; // 0.92 每隔 bossFrequency 毫秒才能释放 Boss技能 long curBossTime; // 0.92 用于累计boss 键时间量 当累积到bossFrequency 时,可以发动boss 键技能
int numOfWar; // 游戏关卡数
int numOfStone; // 游戏的石头数目
int numOfWood; // 游戏的木头数目
int numOfEnemy;// 本关敌人总数量
int numOfCurrentEnemy;// 每个时刻只能出现的敌人数
int intelligence; // 1.21智能系数,值越高,敌人坦克越智能
int score = 0; // 1.4 游戏累计积分
int eacheScore = 170; // 1.4每个敌人所值分数
PlayerTank playerTank // 玩家坦克
List missiles;// 子弹容器
List enemyTanks;// 敌方坦克 容器
List explodes;// 爆炸对象的容器
List obstacles;// 障碍物的容器
List tools;// 道具的容器
内部类:
// 刷新游戏界面的线程类
private class PaintThread implements Runnable
// 监听游戏按钮的类
private class GameControl extends KeyAdapter
// 发动Boss 键的线程
private class BossThread implements Runnable
// 监听子弹发射速度的线程类
private class FireControlThread implements Runnable
// 监听boss 键冷却时间的线程, 1.81
private class BossControlThread implements Runnable
// 负责创建敌人的线程
private class CreateEnemyThread implements Runnable
// 1.4控制通关,或者重置游戏的线程
private class ClearThread implements Runnable
方法:
// 重新游戏释放资源
public void reStart()
// 通关
public void passGame()
// 开始游戏
public void startToPlay() //重写paint
public void paint(Graphics g) // 重写update 方法
public void update(Graphics g)