// 重写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); } } }
@Override public void timePassed() { // Moves if there is empty space underneath if (this.world.getTunnel().isPositionEmptySpaceUnder(this.getPosition())) { this.timeWaited++; // Delays the falling so it won't kill you if you empty the space // right under it if (this.timeWaited > 80) { this.emptySpacesUnder++; this.moveTo(new Point2D.Double(this.getPosition().getX(), this.getPosition().getY() + 3)); Monster m = this.encounteredWithMonster(); if (m != null) { m.die(); } // Kills the hero if it encounters it while falling if (this.encounteredWithHero()) { this.getWorld().getHero().die(); } Bag bag = this.bagEncounteredWithBag(); // If a bag falls on top of another bag, they both break // Value of gold is doubled since it was two bags if (bag != null) { Gold gold = new Gold(this.getWorld(), this.getPosition()); bag.die(); this.die(); gold.setValue(gold.getValue() * 2); this.world.addBlocks(gold); return; } } } else { this.timeWaited = 0; // If it dropped more than one block, it will break into gold if (this.emptySpacesUnder > 47) { Bag bag = this.bagEncounteredWithBag(); Gold gold = new Gold(this.getWorld(), this.getPosition()); // If a bag falls on top of another bag, they both break // Value of gold is doubled since it was two bags if (bag != null) { bag.die(); gold.setValue(gold.getValue() * 2); } this.die(); this.world.addBlocks(gold); } this.emptySpacesUnder = 0; } // Moves the bag if the hero encounters it int deltaX = 0; int deltaY = 0; if (this.encounteredWithHero()) { Hero hero = this.getWorld().getHero(); char direction = hero.getDirection(); if (direction == 'u') if (hero.getPosition().getX() > this.getPosition().getX()) deltaX -= 3; if (direction == 'd') if (hero.getPosition().getX() < this.getPosition().getX()) deltaX += 3; this.moveTo( new Point2D.Double( this.getPosition().getX() + deltaX, this.getPosition().getY() + deltaY)); } // Adds an empty space if there isn't one already where the bag abject // is if (!this.getWorld().getTunnel().isInEmptySpace(this)) { this.getWorld().getFootprintsToAdd().add(new FootPrint(this.getWorld(), this.getPosition())); } }