public void run()
{
int flag=1;
int flag2=1;
while (true)
{
flag++;
if(flag==15)
{
flag=0;
int dir1=(int)(Math.random()*4);
setDir(dir1);
}
flag2=(int)(Math.random()*20);
if(flag2%3==0)
{
fire();
}
switch (getDir())
{
case 0://上
if(!(getY()==550&&getX()<=330||getY()==550&&getX()>=430&&getX()<=730||getY()==550&&getX()>=830)&&getY()>=0)
setY(getY() - getSpeed());
System.out.println(getSpeed());
break;
case 1://左
if (!(getX()==330&&getY()>=420&&getY()<=550||getX()==730&&getY()>=420&&getY()<=550)&&getX()>=0)
setX(getX() - getSpeed());
break;
case 2:
if(!(getY()==420&&getX()<=330||getY()==420&&getX()>=430&&getX()<=730||getY()==420&&getX()>=830)&&getY()<=930)
setY(getY() + getSpeed());
break;
case 3:
if(!(getX()==400&&getY()>=420&&getY()<=550||getX()==800&&getY()>=420&&getY()<=550)&&getX()<=1170)
setX(getX() + getSpeed());
break;
}
try {
Thread.sleep(50);
}
catch (Exception e)
{
}
}
}
2.EnemyTank中的fire()函数
public void fire()//装弹 { switch (this.getDir()) { case 0: bullet = new Bullet(this.getX()+8,this.getY()-7,0); bulletVector.add(bullet); break; case 1: bullet = new Bullet(this.getX()-7,this.getY()+8,1); bulletVector.add(bullet); break; case 2: bullet = new Bullet(this.getX()+8,this.getY()+30,2); bulletVector.add(bullet); break; case 3: bullet = new Bullet(this.getX()+30,this.getY()+8,3); bulletVector.add(bullet); break; } Thread thread = new Thread(bullet); thread.start(); }
3.需要在初始化enemyTank是启动EnemyTank的线程
MyPanel() { myTank = new MyTank(120, 220);//初始化我的坦克的初始坐标 myTank.setSpeed(5); for (int i = 0; i < enemynum / 2; i++) { EnemyTank enemyTank = new EnemyTank(i * (230 + 5), 0);//给上面的enemyTank初始化坐标 enemyTank.speed=4; enemyTank.setDir(2); Thread thread = new Thread(enemyTank); thread.start(); enemyTanks.add(enemyTank);//向集合里面添加enemyTank } for (int i = 6; i < enemynum; i++) { EnemyTank enemyTank = new EnemyTank((12 - i - 1) * (230 + 5), 930);//给下面的enemyTank初始化坐标 enemyTank.speed=4; Thread thread = new Thread(enemyTank); thread.start(); enemyTanks.add(enemyTank); } }
4.在paint中绘制敌方坦克和子弹
public void paint(Graphics g) //重写paint方法
{
g.setColor(Color.black);//画笔着色
g.fillRect(0, 0, 1200, 1000);//面板
if (myTank.life) {
drawTank(myTank.getX(), myTank.getY(), myTank.getDir(), g, 0);//画我方坦克
}
for(int i=0;i<myTank.bulletVector.size();i++)//画我的坦克的子弹
{
Bullet bullet = myTank.bulletVector.get(i);
if(bullet.life)
{
g.setColor(Color.white);
g.fill3DRect(bullet.getX(),bullet.getY(),3,3,false);
}
else
{
myTank.bulletVector.remove(bullet);
}
}
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
drawTank(enemyTank.getX(), enemyTank.getY(), enemyTank.getDir(), g, 1);//画敌方坦克
}
for(int i=0;i<enemyTanks.size();i++)
{
EnemyTank enemyTank =enemyTanks.get(i);
for(int j=0;j<enemyTank.bulletVector.size();j++)
{
Bullet bullet = enemyTank.bulletVector.get(j);
if(bullet.life)
{
g.setColor(Color.white);
g.fill3DRect(bullet.getX(),bullet.getY(),3,3,false);
}
else
{
myTank.bulletVector.remove(bullet);
}
}
}
}