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); } }
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")); }
// 重写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 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); } } }
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); } } } } }
// 构造函数 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)); }