4.2.5 爆炸效果类算法
1、爆炸效果类通过在子弹有效打击的时候,在子弹和击杀坦克接触的坐标上按规定的爆炸步数,画出不同半径的圆来模拟爆炸效果的。
2、爆炸效果类的设计源码:
import java.awt.*;
public class Explosion {
private int x;
private int y;
private TankClient tc = null;
private int step = 6;
private int size[][] = {{10,10},{20,20},{30,30},{35,35},{20,20},{5,5}};
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public Explosion(int x, int y, TankClient tc) {
super();
this.x = x;
this.y = y;
this.tc = tc;
}
public void drawExplosion(Graphics g){
Color c = g.getColor();
g.setColor(Color.YELLOW);
for(int i = 0;i < step;i++ )
{
g.fillOval(x + 10, y + 10, size[i][0], size[i][1]);
}
g.setColor(c);
}
}
4.2.6 墙体类算法
1、墙体类实现了游戏中墙体的draw方法:通过调用JAVA内部封装的画图方法实现了简易墙体的绘制。
2、子弹与墙体的碰撞检测以及敌我双方坦克与墙体的额碰撞检测是在坦克大战管理类中实现的。碰撞检测是通过判断对象实例的双方所占的额范围是否重合来实现的。挡子弹与墙体(非水墙)碰撞时,子弹live = false,并将该子弹从坦克大战管理类的子弹集合中删除(线程重画将不会再次画出该子弹)。当坦克和墙体发生碰撞时,坦克的坐标会自动返回坦克上一次的坐标(oldx,oldy),这样就可以解决坦克穿墙的问题了。
墙体类设计源码:
import java.awt.*;
public class Wall {
private int x;
private int y;
private int width;
private int height;
private int number;//墙体类型编号
private TankClient tc = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public int getNumber() {
return number;
}
public Wall(int x, int y, int width, int height, int number, TankClient tc) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.number = number;
this.tc = tc;
}
public void drawWall(Graphics g){
Color c = g.getColor();
//土墙
if(number == 0)
{
g.setColor(Color.GRAY);
g.fillRect(x, y, width, height);
}
//海
if(number == 1)
{
g.setColor(Color.BLUE);
g.fillRect(x, y, width, height);
}
g.setColor(c);
}
public Rectangle getRect(){
return new Rectangle(x,y,width,height);
}
}