我设计了一款很简单的射击类型小游戏。潜艇发射炮弹攻击飞机。
每个飞机是一个线程,每点击一次发射按钮产生一个炮弹进程。但是如果一直都按着发射按钮的话会影响游戏平衡。
所以我想限制一下进程的数量,让同时运行的炮弹数量不超过10个。超过10个的话对于点击发射按钮不进行反应。
下面是我的发射按钮:
shootBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//初始化一个对象
shoot=new Shoot(n,map);//对进行炮弹的位置初始化
shoot.setSize(10,10);
shoot.setIcon(zhadan);//显示炸弹的位置
//初始化炮弹的位置
shoot.setLocation(10*i, 10*(j+1));
xianshi.add(shoot);
//点击一次开火就创建一个新的线程
new Thread(shoot).start();
//记录线程的数量n
n++;
}
});
下面是shoot炮弹类:
public class Shoot extends JLabel implements Runnable {
private int index;
Map<Integer, Fighter> map; public Shoot(int index,Map<Integer, Fighter> map){//线程创建了多个对象,每个对象传入的list都是不一样的。
this.index=index;
this.map=map;//能得到list内存储的fighter的位置
}
public void run(){
boolean flag=true;
int len =10;
while(flag){
this.setLocation(this.getX(),this.getY()-len);
//System.out.println(this.getY());
//记录炮弹距离
if(this.getY()<=-10){
flag=false;
}
//对fighter的位置进行遍历,看是否炸弹有击中的飞机,如果有,该炸弹的进程结束
for(int i=0;i<10;i++){
if((this.getX()>=(map.get(i).getX()-9))
&&(this.getX()<=(map.get(i).getX()+11))
&&(this.getY()>=(map.get(i).getY()-1))
&&(this.getY()<=(map.get(i).getY()+9))
){
System.out.println("这是被击中的飞机"+i+"   飞机的位置是:");
System.out.println(map.get(i).getX()-9);
System.out.println("这是"+index+"号炮弹击中的");
map.get(i).setFlag();//让被击中的对象Fighter中的飞机也不再运行
flag=false;
}
}
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//对炸弹的位置以及图片进行擦除
this.setIcon(null);
this.setLocation(-20,-20);
}
}
应该怎样进行限制?