// 判断坦克是否被击中 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); } } }
// 重写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); } } }
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); } } } } }