说明:这个版本中添加了爆炸的效果.
1.爆炸效果在子弹击中坦克时发生.
2.要在窗口中看到爆炸,必须由窗口画出爆炸.....
1.新建爆炸类.
import java.awt.Color;
import java.awt.Graphics;
public class Explode extends Thread{
int i;
int j;
TankClient tc;
public void run() {
try {
Explode.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tc.AE.remove(this);
}
public Explode(int i,int j,TankClient tc) {
this.i=i;
this.j=j;
this.tc=tc;
}
public void draw(Graphics g) {
g.setColor(Color.pink);
g.fillOval(i-35, j-35, 60, 60);
}
public static void main(String[] args) {
}
}
爆炸类从Thread类中继承,因为爆炸的类需要自动在生成的一段时间类消失...需要让TankClient中画出这个生成的类..那我们必须把它放在TankClient的容器中去.
2.
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawString("There are those numbers of bullets: "+N1.BTA.size(), 50, 50);
g.drawLine(pt.x, 0, pt.x, 550);
g.drawLine(0, pt.y, 700, pt.y);
drawTank(GATK,g,Color.green);
drawTank(BATK,g,Color.MAGENTA);
drawExplode(g);
N1.drawBullets(g);
}
public void drawExplode(Graphics g) {
for(int i=0;i<AE.size();i++) {
AE.get(i).draw(g);
}
}
在Client函数新增了画出爆炸的方法,同时在paint()方法中调用.
3.子弹方法中加入当达到坦克时产生爆炸.
public void run() {
while((x>=0)&&(x<=700)&&(y>=0)&&(y<=550)) {
for(int i=0;i<tc.BATK.size();i++) {
if(this.rectangle().intersects(tc.BATK.get(i).rectangle())) {
ex=new Explode(this.x,this.y,tc);
tc.AE.add(ex);
ex.start();
tk.BTA.remove(this);
tc.BATK.remove(tc.BATK.get(i));
}
}