总结一下几点
1:在hero中修改子弹,并且把原有初始化子弹语句初始化,利用线程安全的集合类 Vector来进行,并在switch中进行加入
Vector <show>ss=new Vector<show>();
show s=null;
2:在paint中画出子弹
for(int i=0;i<hero.ss.size();i++)
{
//取出子弹
show s=hero.ss.get(i);
if(s!=null&&s.Vlist==true)
{
//先判断子弹是否为空
g.draw3DRect(s.x,s.y, 1,1, false);
}
//如果子弹没有则删除前面打出的子弹
if(s.Vlist==false)
{
//从ss中删除掉该子弹
hero.ss.remove(s);
}
}
3:上面画出许多子弹,但是我么为对其进行判断,当按下J
//判断是否按下J键发射子弹,按下J键则调用发射子弹函数
if(hero.ss.size()<=4) //这条语句控制子弹数,打完5颗子弹就不能打出,做出处理
{
//在第2写上了删除子弹功能,才可以以进行从新发射子弹
this.hero.showEmp();
}
4:敌人坦克消失,在paint画出坦克,坦克被击中必须要2参数,一个是子弹,一个是敌人坦克
//打中敌人坦克后,敌人坦克消失
public void hitTank(show s,BadTank bt)
{
//判断坦克方向
switch(bt.dome) //判断敌人坦克方向
{
case 0:
case 1:
if(s.x>bt.x&&s.x<bt.x+20&&s.y>bt.y&&s.y<bt.y+20)
{
//子弹击中坦克后消失
s.Vlist=false;
//敌人坦克消失
bt.Tanke=false;
}
case 2:
if(s.x>bt.x && s.x<bt.x+30 && s.y>bt.y && s.y<bt.y+30)
{
//子弹击中坦克后消失
s.Vlist=false;
//敌人坦克消失
bt.Tanke=false;
}
}
}
6:在哪里调用坦克方法,在paint中的run方法中,因为run里面有个刷新方法没进行一次就被判断一次,因此在该方法中定义
//调用敌人坦克方法消失函数
for(int i=0;i<hero.ss.size();i++) //子弹
{
//取出子弹
show s=hero.ss.get(i);
//判断子弹是否有效
if(s.Vlist)
{
//取出每个坦克,与他判断
for(int j=0;j<vt.size();j++)
{
//取出坦克
BadTank bt=vt.get(j);
if(bt.Tanke) //判断坦克是否还存在
{
this.hitTank(s, bt);
}
}
}
7:在画出坦克中进行判断
//画出敌人的坦克
for(int i=0;i<vt.size();i++)
{
//Vector vt=(Vector)vt.get(i);
BadTank bt=vt.get(i);
if(bt.Tanke)
{
this.drawTank(bt.getX(),bt.getY(),g,bt.getDome(),0);
//如果第四个参数是this.hero.dome则会出现意想不到的结果
}
}