坦克大战—day 10

敌人的坦克创建和随机产生

要求随机地在屏幕的左上角和右上角产生敌人的坦克。

给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 );
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值