Example #1
0
  public MyPanel() {
    hero = new Hero(10, 100);

    for (int i = 0; i < enemysize; i++) {
      // 创建一辆敌人的坦克
      EnemyTank et = new EnemyTank((i + 1) * 50, 0);
      et.setColor(1);
      et.setDirect(2);
      ets.add(et);
    }
  }
Example #2
0
 public MyPanel() {
   // 在我的panel里构造一个坦克
   hero = new Hero(100, 100);
   for (int i = 0; i < enemySize; i++) {
     //			创建敌人的坦克,并加入到敌人坦克集合中。
     EnemyTank et = new EnemyTank((i + 1) * 50, 0);
     et.setColor(0);
     et.setDirection(2);
     Thread t = new Thread(et);
     t.start();
     ets.addElement(et);
   }
   image1 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_1.gif"));
   image2 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_2.gif"));
   image3 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_3.gif"));
 }
Example #3
0
  //	重写paint方法
  public void paint(Graphics g) {
    super.paint(g);
    //		float lineWidth = 3.0f;
    //	    ((Graphics2D)g).setStroke(new BasicStroke(lineWidth));
    //		将坦克的活动区域填充为默认黑色
    g.fillRect(0, 0, 800, 600);
    this.drawTank(hero.getX(), hero.getY(), g, hero.getDirection(), 1);

    for (int i = 0; i < hero.bombs.size(); i++) {
      Bomb myBomb = hero.bombs.get(i);
      // 画出一颗子弹
      if (myBomb != null && myBomb.isLive == true) {
        //			float lineWidth = 2.0f;
        //			((Graphics2D) g).setStroke(new BasicStroke(lineWidth));//设置线条为粗线
        g.draw3DRect(myBomb.x, myBomb.y, 2, 2, true);
      }
      if (myBomb.isLive == false) {
        hero.bombs.remove(myBomb);
      }
    }
    //		画出爆炸
    for (int i = 0; i < baozhas.size(); i++) {
      BaoZha bz = baozhas.get(i);
      System.out.println("baozhas.size()= " + baozhas.size());
      if (bz.life > 5) {
        g.drawImage(image3, bz.x, bz.y, 30, 30, this);
      } else if (bz.life > 3) {
        g.drawImage(image2, bz.x, bz.y, 30, 30, this);
      } else {
        g.drawImage(image1, bz.x, bz.y, 30, 30, this);
      }
      bz.liftDown();
      if (bz.life == 0) {
        baozhas.remove(bz);
      }
    }

    //		画出敌人的坦克
    for (int i = 0; i < ets.size(); i++) {
      EnemyTank et = ets.get(i);
      if (et.isLive) {

        this.drawTank(et.getX(), et.getY(), g, et.getDirection(), 0);
      }
    }
  }
Example #4
0
  // 判断坦克是否被击中
  public void isHit(Bomb bomb, EnemyTank et) {
    //		敌人的坦克有四个方向,每个方向的坐标不同
    switch (et.getDirection()) {
        //		朝上和朝下效果一样
      case 0:
      case 2:
        // 子弹的坐标和坦克的坐标重合即为击中
        if (bomb.x > et.getX()
            && bomb.x < et.getX() + 25
            && bomb.y < et.getY() + 30
            && bomb.y > et.getY()) {
          // 子弹死亡,敌人坦克死亡
          bomb.isLive = false;
          et.isLive = false;
          BaoZha bz = new BaoZha(et.getX(), et.getY());

          baozhas.add(bz);
        }
        //		敌人坦克朝左右两边
      case 1:
      case 3:
        if (bomb.x > et.getX()
            && bomb.x < et.getX() + 30
            && bomb.y > et.getY()
            && bomb.y < et.getY() + 25) {
          // 子弹死亡,敌人坦克死亡
          bomb.isLive = false;
          et.isLive = false;
          BaoZha bz = new BaoZha(et.getX(), et.getY());
          baozhas.add(bz);
        }
    }
  }
Example #5
0
  public void paint(Graphics g) {
    super.paint(g);
    // 画出我的坦克(到时再封装成函数)
    g.setColor(Color.darkGray);
    g.fillRect(0, 0, 400, 300);

    // 画出提示信息
    this.showInfo(g);

    // 画出自己的坦克
    if (myTank.alive) {
      this.drawTank(myTank.getX(), myTank.getY(), g, myTank.direct, 0);
    }
    // 绘制子弹
    // 从bb中取出每一颗子弹并绘制(遍历)
    for (int i = 0; i < this.myTank.bb.size(); i++) {
      // 取出一颗子弹
      Bullet myBullet = myTank.bb.get(i);
      // 下面是画出一颗子弹
      if (myBullet != null && myBullet.alive == true) {
        g.draw3DRect(myBullet.x, myBullet.y, 2, 2, false);
      }
      // 判断子弹死亡之后从Vector移除
      if (myBullet.alive == false) {
        myTank.bb.remove(myBullet);
      }
    }
    // 画出炸弹
    for (int i = 0; i < bombs.size(); i++) {
      //            System.out.println("bombs.size()="+bombs.size());
      // 取出炸弹
      Bomb bomb = bombs.get(i); // 不需要强转,因为用了泛型
      //            System.out.println("炸弹炸弹炸弹"+bomb);
      if (bomb.life > 6) {
        // 画出最大的效果
        g.drawImage(image3, bomb.x, bomb.y, 30, 30, this);
      } else if (bomb.life > 3) {
        g.drawImage(image2, bomb.x, bomb.y, 30, 30, this);
      } else {
        g.drawImage(image1, bomb.x, bomb.y, 30, 30, this);
      }

      // 让bomb的生命值减小
      bomb.lifeDown();
      // 如果炸弹值生命值为零,就把炸弹从Vector中去掉
      if (bomb.life == 0) {
        bombs.remove(bomb);
      }
    }

    // 画出敌人的坦克
    for (int i = 0; i < enemySize; i++) {
      EnemyTank et = enemyTanks.get(i);

      if (et.alive) {
        this.drawTank(et.getX(), et.getY(), g, et.direct, 1);
        // 再画出敌人的子弹
        for (int j = 0; j < et.bb.size(); j++) {
          // 取出一颗子弹
          Bullet enemyBullet = et.bb.get(j);
          if (enemyBullet.alive) {
            g.draw3DRect(enemyBullet.x, enemyBullet.y, 1, 1, false);
          } else {
            // 如果敌人的坦克死亡就从Vector去掉
            et.bb.remove(enemyBullet);
          }
        }
      }
    }
  }
Example #6
0
  // 构造函数
  public MyPanel(String flag) {
    apw.start();

    // 恢复记录
    Recorder.getRecord();
    //        bombs.add(new Bomb(0,0));
    // 括号里的是初始位置
    myTank = new MyTank(100, 100);

    if (flag.equals("newGame")) {
      // 初始化敌方坦克
      for (int i = 0; i < enemySize; i++) {
        // 创建一辆敌人的坦克
        EnemyTank et = new EnemyTank((i + 1) * 50, 0);
        et.setColor(1);
        et.setDirect(2);
        // 將MyPanel的敵人坦克向量交給該敵人坦克
        et.setEts(enemyTanks);

        // 启动敌人的坦克
        Thread t = new Thread(et);
        t.start();
        // 给敌人坦克添加一颗子弹
        Bullet b = new Bullet(et.x + 10, et.y + 30, 2);
        // 加入敌人坦克
        et.bb.add(b);
        Thread t2 = new Thread(b);
        t2.start();
        // 加入
        enemyTanks.add(et);
      }
    } else {

      nodes = new Recorder().getNodesAndEnNums();
      // 初始化敌方坦克
      for (int i = 0; i < nodes.size(); i++) {
        Node node = nodes.get(i);
        // 创建一辆敌人的坦克
        EnemyTank et = new EnemyTank(node.x, node.y);
        et.setColor(1);
        et.setDirect(node.direct);
        // 將MyPanel的敵人坦克向量交給該敵人坦克
        et.setEts(enemyTanks);

        // 启动敌人的坦克
        Thread t = new Thread(et);
        t.start();
        // 给敌人坦克添加一颗子弹
        Bullet b = new Bullet(et.x + 10, et.y + 30, 2);
        // 加入敌人坦克
        et.bb.add(b);
        Thread t2 = new Thread(b);
        t2.start();
        // 加入
        enemyTanks.add(et);
      }
    }
    // 初始化爆炸图片

    //        try {
    //            image1= ImageIO.read(new File("/3.png"));
    //            image2= ImageIO.read(new File("/2.png"));
    //            image3= ImageIO.read(new File("/1.png"));
    //        } catch (IOException e) {
    //            e.printStackTrace();
    //        }
    image1 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/3.png"));
    image2 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/2.png"));
    image3 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.png"));
    bombs.add(new Bomb(0, 0));
  }