敌人的坦克创建和随机产生
要求随机地在屏幕的左上角和右上角产生敌人的坦克。
给Tank类新增一个变量isEnemy,默认为false。
创建我方坦克的名字容易区分,为myTank。但是敌人的坦克不可能一个个命名。所以敌方的坦克需要用容器来存储。
//敌人的坦克集合
private static List<Tank> enemies =new ArrayList<>();
创建敌人坦克的方法
public static Tank createEnemy(){
int x=MyUtil.getRandomNumber(0,2)==0?RADIUS:
Constant.FRAME_WIDTH-RADIUS;
int y=GameFrame.titleBarh+RADIUS;
int dir=DIR_DOWN;
Tank enemy=new Tank(x,y,dir);
enemy.isEnemy=true;
enemy.state=STATE_MOVE;
return enemy;
}
使用一个单独的线程用于控制生产敌人的坦克
/**
* 开始新游戏的方法
*/
private void newgame() {
gameState = STATE_RUN;
//创建坦克对象,敌人的坦克对象
mytank = new Tank(400, 200, Tank.DIR_DOWN);
//使用一个单独的线程用于控制生产敌人的坦克
new Thread(() -> {
while (true) {
if(enemies.size()<ENEMY_MAX_COUNT)
{
Tank enemy=Tank.createEnemy();
enemies.add(enemy);
}
try {
Thread.sleep(ENEMY_BORN_INTERVAL);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
画敌人的坦克的方法。
private void drawRun(Graphics g) {
g.setFont(GAME_FONT);
//绘制黑色的背景
g.setColor(Color.black);
g.fillRect(0, 0, FRAME_WIDTH, FRAME_HEIGHT);
drawEnemies(g);
mytank.draw(g);
}
private void drawEnemies(Graphics g)
{
for(int i=0;i<enemies.size();i++)
{
Tank enemy=enemies.get(i);
enemy.draw(g);
}
}
那么isEnemy可以用来在画坦克时区分敌我坦克。
/**
* 使用图片的方法绘制坦克
* @param g
*/
private void drawImgTank(Graphics g)
{
if(isEnemy==true) g.drawImage(enemyImg[dir],x-RADIUS,y-RADIUS,null );
else g.drawImage(tankImg[dir],x-RADIUS,y-RADIUS,null );
}