示例#1
0
  public static void main(String[] args) {
    World world = new World("defense");
    ArrayList<Enemy> enemies = new ArrayList<Enemy>();
    ArrayList<Tower> towers = new ArrayList<Tower>();
    ArrayList<Bullet> bullets = new ArrayList<Bullet>();
    while (true) {

      world.draw();

      for (Bullet bullet : bullets) {
        bullet.move(); // TODO
        bullet.draw(); // TODO
      }

      for (int i = 0; i < enemies.size(); i++) {
        Enemy enemy = enemies.get(i);
        enemy.move();
        enemy.draw();

        for (int j = 0; j < bullets.size(); j++) {
          Bullet bullet = bullets.get(j);
          if (bullet.isHitting(enemy)) {
            enemies.remove(i);
            bullets.remove(j);
            i--;
            break;
          }
        }
      }
      if (Window.mouse.clicked()) {
        int x = Window.mouse.getX() / world.getScale();
        int y = Window.mouse.getY() / world.getScale();

        Space space = world.getSpace(x, y);
        String color = "orange";
        int reload = 50;
        int range = world.getScale() * 5;

        if (space.getType() == world.GRASS && space.hasTower() == false) {
          Tower tower = new Tower(space, world, color, reload, range, null);
          tower.setComparator(new CloseComparator(tower));
          towers.add(tower);
        }
      }

      for (Tower tower : towers) {
        tower.draw(world.getScale() / 2); // TODO
        Bullet bullet = tower.fire(enemies);
        if (bullet != null) {
          bullets.add(bullet);
        }
      }

      Window.frame();

      if (Window.random(-40, 40) == 0) {
        enemies.add(new Enemy(10, 3, world));
      }
    }
  }
 public float getRowY() {
   if (!this.isEmpty()) {
     Enemy e = enemyList.getFirst();
     return e.getY();
   }
   return -100;
 }
示例#3
0
 protected void specificUpdate(GameTime gameTime) {
   this.applyGravity();
   super.de.update(gameTime);
   if (!this.actable
       && (MathUtils.abs((float) (this.Pos.x - this._player.Pos.x)) <= this.actDis)) {
     this.actable = true;
   }
   if (this.actable) {
     super._Paused = false;
     if (super._Frame == 8) {
       super._TimePerFrame = 0.06666667f;
       super.setAnimation(new int[] {9, 10, 11, 10});
       this.moveable = true;
     }
   }
   if (this.moveable) {
     if ((this.Pos.x - this._player.Pos.x) >= 0f) {
       this.i_am_hardly_walking_to_left = true;
       this.i_am_hardly_walking_to_right = false;
       this.isfacingToLeft = true;
       this.Pos.x -= this.VX;
     } else {
       this.i_am_hardly_walking_to_left = false;
       this.i_am_hardly_walking_to_right = true;
       this.isfacingToLeft = false;
       this.Pos.x += this.VX;
     }
   }
   super.color = LColor.white;
 }
示例#4
0
 public static void Start(Player player, Level level, Enemy enemy) {
   System.out.println(player.getCharName() + " Health: " + player.getHealth());
   System.out.println(enemy.getName() + " " + enemy.getType() + " Health: " + enemy.getHealth());
   System.out.println("Level: " + level.getLevelType());
   int choice = ChooseAttacks();
   CalculateDamage(choice, player, level, enemy);
 }
示例#5
0
  /**
   * Creates a new "game" from the current engine.Globals.game variable. While the ANN stays the
   * same, the speed, actor positions, score, et cetera, are all reset.
   */
  public void newGame() {
    stopped = true;
    player.setLives(STARTING_LIVES);
    player.setScore(0);
    Graphics g = strategy.getDrawGraphics();
    waiting = true;

    Globals.state = ENEMY_HUNTER_STATE;

    player.setCenter(board.getPlayerStartPoint());
    player.setDirection(Player.DEFAULT_STARTING_DIRECTION);

    board.reset();
    Globals.blipsLeft = Globals.game.getBoard().getBlipCount();

    for (Enemy enemy : enemies) {
      enemy.reset();
    }

    GamePainters.drawBoard(board, g, this);
    GamePainters.drawEnemies(enemies, g, this);
    GamePainters.drawPlayer(player, g, this);
    GamePainters.paintBottomBar(player, board, g, this);
    strategy.show();
  }
示例#6
0
  public void fire() {
    if (!canFire()) return;
    Enemy target = getTargetEnemy();

    if (target == null) return;

    if (this.towerType == TowerType.ArrowTower) {
      Effect effect =
          new Effect(
              1, TowerType.ArrowTower.getAttack(level), Effect.Target.SINGLE, Effect.Type.DAMAGE);
      effect.setTargetEnemy(target);
      grid.getLevel().getCurrentWave().addEffect(effect);
      grid.getLevel()
          .getCurrentWave()
          .addAmmoSprite(
              new AmmoSprite(
                  this.grid, target.getLastGrid(), Configuration.TOWER_ARROWTOWER_AMMOSPRITE_TYPE));
    } else if (this.towerType == TowerType.CannonTower) {
      Effect effect =
          new Effect(
              1, TowerType.CannonTower.getAttack(level), Effect.Target.SPLASH, Effect.Type.DAMAGE);
      effect.setTargetGrid(target.getGrid());
      grid.getLevel().getCurrentWave().addEffect(effect);
      grid.getLevel()
          .getCurrentWave()
          .addAmmoSprite(
              new AmmoSprite(
                  this.grid,
                  target.getLastGrid(),
                  Configuration.TOWER_CANNONTOWER_AMMOSPRITE_TYPE));
    } else throw new AssertionError();

    // setib turns to fire kuhugi
    // efekt vaja tekitada
  }
示例#7
0
 /**
  * determines whether a projectile hits an enemy
  *
  * @param enemy - enemy projectile hits
  * @return - true if enemy gets hit, false otherwise
  */
 public boolean hitEnemy(Enemy enemy) {
   if (myX >= enemy.getX() - 25 && myX <= enemy.getX() + 25) {
     if (myY <= enemy.getY() + 25 && myY >= enemy.getY() - 25) {
       return true;
     }
   }
   return false;
 }
示例#8
0
 public static void enemyDead(Position pos) {
   for (Enemy en : enList) {
     if (en.getPosition().getRow() == pos.getRow()
         && en.getPosition().getColumn() == pos.getColumn()) {
       en.declareDead();
     }
   }
 }
 public void update() {
   for (Iterator ite = enemyList.iterator(); ite.hasNext(); ) {
     Enemy e = (Enemy) ite.next();
     if (!e.isAlive()) {
       ite.remove();
     }
   }
 }
  @Override
  public ArrayList<Position> getEnemiesPositions() {
    ArrayList<Position> positions = new ArrayList<Position>();
    for (Enemy enemy : enemyList) {
      positions.add(enemy.getPosition());
    }

    return positions;
  }
示例#11
0
 private int getNextYForEnemy(Enemy en, DataPoint dp) {
   double dist = computeDistance(en.getCoordX(), en.getCoordY(), dp.getCoordX(), dp.getCoordY());
   if (dist <= ENEMY_DIST_BY_TURN) {
     return dp.getCoordY();
   } else {
     return (int)
         (en.getCoordY() + ((dp.getCoordY() - en.getCoordY()) * ENEMY_DIST_BY_TURN / dist));
   }
 }
示例#12
0
 private void decreaseAglie(Enemy enemy) {
   System.out.println(enemy.getType() + "的敏捷下降:" + deAglieNum);
   int td = enemy.getAgile() - deAglieNum;
   if (td < 0) {
     enemy.setAgile(0);
     System.out.println(enemy.getType() + "的敏捷已经下降为0");
   } else {
     enemy.setAgile(td);
   }
 }
示例#13
0
 private int testEnemyCol() {
   for (int i = 0; i < game.enemies.size(); i++) {
     Enemy e = game.enemies.get(i);
     if (bounding.intersects(e.getBounding()) && e.isAlive()) {
       e.die();
       return i;
     }
   }
   return -1;
 }
示例#14
0
 public void initEnemy() {
   List<Map<String, Object>> lst =
       gameDao.getSimpleJdbcTemplate().queryForList(RelationDAO.SQL_SELECT_ENEMY, player.getId());
   for (Map<String, Object> map : lst) {
     Enemy enemy = gameDao.getRelationDAO().loadEnemy(map);
     if (enemy != null) {
       emyMgr.put(enemy.getEnemyId(), enemy);
     }
   }
 }
  public void addEnemy(Position position) {
    boolean positionAlreadyUsed = false;
    for (Enemy enemy : enemyList) {
      if (enemy.getPosition().equals(position)) {
        positionAlreadyUsed = true;
        enemyList.remove(enemy);
        break;
      }
    }

    if (!positionAlreadyUsed)
      enemyList.add(new Enemy(new Position(position.getX(), position.getY()), Direction.UP));
  }
示例#16
0
 @Override
 public void create(Vector2f loc, Vector2f dir) {
   Enemy alien = (Enemy) entities.get(ndx);
   if (count < maxCount) {
     alien.create();
     alien.setLoc(loc);
     alien.setDir(dir);
     activeNdxs.add(ndx);
     count++;
     ndx++;
     if (ndx == maxCount) ndx = 0;
   }
 }
示例#17
0
  /**
   * Remove enemies that are either out of bound or dead. Also checks if this wave is defeated. If
   * it is, starts a new wave and adds 25 to the money
   *
   * @return none
   */
  private void remove() {
    Iterator<Enemy> iterator = enemies.iterator();
    while (iterator.hasNext()) {
      Enemy enemy = iterator.next();
      if (enemy.isDead() || enemy.isOutOfBound()) {
        iterator.remove();
      }

      if (enemies.isEmpty()) {
        money += 25;
        TowerDefenseGame.getControlPanel().newWave();
      }
    }
  }
示例#18
0
 public void checkEnemyCollision() {
   for (Enemy e : enemyList) {
     if (e.getOnScreen()) { // can be removed later on
       // goes through all the enemies and checks if they collide
       if (e.checkCollision(e.getPics().get(e.getCounter()), player1)) {
         if (player1.getInvi() == false) {
           // If the player is not invisble then you get spiked.
           if (player1.getVelocity() > 0) { // if the player hits it from the bottom
             player1.setSpikeVelo();
             loseCoins();
           } else {
             player1.setVelo(
                 50); // if the player is on top instead the player bounces off the enemy
             if (musicOn) {
               bounce.play();
             }
           }
         }
         eRemove.add(e); // once we hit, we remove the enemy
       }
     } else {
       eRemove.add(e); // if the enemy goes of the screen, we remove
     }
   }
   for (Enemy e : eRemove) {
     poofList.add(new Poof(e.getX(), e.getY(), 1)); // removes all the enemies
     enemyList.remove(e);
   }
   eRemove = new ArrayList<Enemy>();
 }
示例#19
0
  public void paintComponent(Graphics g) {
    super.paintComponent(g);

    height = this.getHeight();
    width = this.getWidth();

    drawPlayers(g);
    g.setColor(Color.WHITE);
    g.drawString("Score", width - 60, 25);
    g.drawString(String.valueOf(score), width - 60, 40);

    if (countdownF) {
      g.drawString(String.valueOf(counterN), width / 2 - 10, height / 2);
    } else {
      if ((spawnCircleB) && (spawnIncrease)) {
        spawnCircles();
      }
      if (spawnMonsterB) {
        spawnMonsters();
      }
      if (spawnRandomersB) {
        spawnRandomers();
      }
      if (spawnRainB) {
        spawnRain();
      }
      if (spawnBombB()) {
        spawnBomb();
      }

      try {
        Iterator i = enemies.iterator();
        while (i.hasNext()) {
          Enemy e = (Enemy) i.next();
          Iterator j = players.iterator();
          while (j.hasNext()) {
            Player p = (Player) j.next();
            e.move(players, programSpeedAdjust /*/players.size()*/);
            if ((e.collidesWith(p.getX(), p.getY())) && (!p.getImmunity())) {
              p.decLives(p.getX(), p.getY());
              p.setImmunity(true);
            }
          }
          e.paint(g);
        }
      } catch (Exception e) {
      }
    }
    drawLayout(g);
  }
示例#20
0
 private int getTurnToKillEnemyInThisPosition(Enemy en, DataPoint dp) {
   int i = 0;
   int enemyLife = en.getEnemyLife();
   int currentX = en.getCoordX();
   int currentY = en.getCoordY();
   while (enemyLife > 0) {
     currentX = getNextXForEnemy(currentX, currentY, dp);
     currentY = getNextYForEnemy(currentX, currentY, dp);
     int dist = computeDistance(getCoordX(), getCoordX(), currentX, currentY);
     enemyLife -= computeImpactEfficiency(dist);
     i++;
   }
   return i;
 }
示例#21
0
  public static void CalculateDamage(int choice, Player player, Level level, Enemy enemy) {
    float locationMultiplier = 1;
    float defenderMultiplier = 1;
    float totalMultiplier;
    float calcDmg;

    lType = level.getLevelType();
    eType = enemy.getType();
    defenderMultiplier = setDefenderMultiplier(defenderMultiplier, choice);
    locationMultiplier = setLocationMultiplier(locationMultiplier, choice);
    totalMultiplier = (defenderMultiplier * locationMultiplier);
    calcDmg = player.getBaseDamage() * totalMultiplier;
    enemy.setHealth(enemy.getHealth() - calcDmg);
  }
示例#22
0
 /**
  * Can i kill enemy in one shoot at the next turn
  *
  * @param en
  * @param enemyLife
  * @return
  */
 private boolean enoughDamageToKillInOneShootNextTurn(Enemy en, DataPoint dp) {
   int dist =
       computeDistance(
           getCoordX(), getCoordY(), getNextXForEnemy(en, dp), getNextYForEnemy(en, dp));
   int damage = computeImpactEfficiency(dist);
   return damage >= en.getEnemyLife() ? true : false;
 }
示例#23
0
 public Enemy2(Player player) {
   super.actWidth = 42f;
   super.actHeight = 58f;
   this._player = player;
   super.life = 3;
   super.loadSe("assets/enemyDE", 0.3f);
   super.Load("assets/e2", 0x12, 9, 2f, true);
   super.setAnimation(new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11});
   super._Paused = true;
   this.Origin.x = super.getWidth() / 2f;
   this.Origin.y = super.getHeight();
   this.bounds.x = (int) (-super.actWidth / 2f);
   this.bounds.y = -((int) super.actHeight);
   this.bounds.width = (int) super.actWidth;
   this.bounds.height = (int) super.actHeight;
 }
示例#24
0
 private boolean spawnBombB() {
   boolean bombPartsExist = false;
   try {
     Iterator i = enemies.iterator();
     while (i.hasNext()) {
       Enemy e = (Enemy) i.next();
       if (e.getClass().equals(EnemyTypes.Bomb.class)
           || (e.getClass().equals(EnemyTypes.Shrapnel.class))) {
         bombPartsExist = true;
         break;
       }
     }
   } catch (Exception e) {
   }
   return !bombPartsExist;
 }
示例#25
0
  /**
   * This method will move mario vertically and then check if he should be removed because he is out
   * of the world. It will also check if mario should kill an enemy which he is standing on. If the
   * s key is pressed and there is a pipe below mario, the world will change.
   */
  protected void moveVertically() {
    ySpeed++;
    setLocation(getX(), getY() + ySpeed / 2);
    onGround = false;
    while (getOneObjectAtOffset(0, getImage().getHeight() / 2 - 2, Ground.class) != null) {
      setLocation(getX(), getY() - 1);
      onGround = true;
      ySpeed = 0;
    }
    while (getOneObjectAtOffset(0, getImage().getHeight() / 2 - 2, Brick.class) != null) {
      setLocation(getX(), getY() - 1);
      onGround = true;
      ySpeed = 0;
    }

    while (getOneObjectAtOffset(0, -getImage().getHeight() / 2 + 1, Block.class) != null) {
      setLocation(getX(), getY() + 1);
      ySpeed = 0;
    }
    while (getOneObjectAtOffset(0, -getImage().getHeight() / 2 + 1, Brick.class) != null) {
      setLocation(getX(), getY() + 1);
      ySpeed = 0;
    }

    Enemy g = (Enemy) getOneIntersectingObject(Enemy.class);
    // Actor ghost = getOneObjectAtOffset (0, getImage().getHeight()/2, Ghost.class);
    Actor evilminion = getOneObjectAtOffset(0, getImage().getHeight() / 2, EvilMinion.class);
    Actor Scarlet = getOneObjectAtOffset(0, getImage().getHeight() / 2, Scarlet.class);
    // if(ghost != null)
    // {
    //   ySpeed = -20;
    // squish.play();
    //  getWorld().removeObject(ghost);
    // }
    // if(evilminion != null)
    // {
    //    ySpeed = -20;
    //    //squish.play();
    //    getWorld().removeObject(evilminion);
    // }
    if (g != null) {
      ySpeed = -20;
      // squish.play();
      g.hit(1);
    }
  }
示例#26
0
 public void scrollEnemies() {
   for (Enemy i : enemyList) {
     i.setY(i.getY() + (int) (player1.getVelocity() * 0.3));
     i.setYPos(i.getYPos() + (int) (player1.getVelocity() * 0.3));
     i.setYMax(i.getYMax() + (int) (player1.getVelocity() * 0.3));
   }
 }
示例#27
0
  public void paint(Graphics g) {
    // update drawing

    for (int i = 0; i < 14; i++)
      for (int j = 0; j < 10; j++) g.drawImage(backgroundImage, 60 * i, 60 * j, this);

    g.drawImage(
        playerImage,
        player.getCenterX(),
        player.getCenterY(),
        player.getCenterX() + 60,
        player.getCenterY() + 60,
        player.getRotation() * 60,
        0,
        player.getRotation() * 60 + 60,
        60,
        this);
    for (Enemy e : enemies) {
      g.drawImage(
          enemyImage,
          e.getCenterX(),
          e.getCenterY(),
          e.getCenterX() + 60,
          e.getCenterY() + 60,
          e.getRotation() * 60,
          0,
          e.getRotation() * 60 + 60,
          60,
          this);
    }
    for (Wall w : walls) {
      g.drawImage(wallImage, w.getCenterX(), w.getCenterY(), this);
    }
  }
示例#28
0
  /**
   * Paints all the components on the game map. Towers are painted first, then the path, then all
   * the enemies.
   *
   * @return none.
   */
  @Override
  public void paintComponent(Graphics g) {
    super.paintComponent(g);

    // Draws all the towers
    for (Tower tower : towers) {
      tower.draw(g);
    }

    // Draws the path
    for (PathFragment fragment : paths) {
      fragment.draw(g);
    }

    // Draws all the enemies
    for (Enemy enermy : enemies) {
      enermy.draw(g);
    }
  }
示例#29
0
  @Override
  public void update(int elapsedTime) {
    super.update(elapsedTime);

    if (stunned <= 0.0) {
      // TODO: Different logic
      facePlayer();
      approachPlayer();
    }
  }
示例#30
-1
  private void doShooting() {
    PositionFinder p = new PositionFinder(enemies, this);
    en = p.findNearest();
    if (en == null) return;

    Point2D myPos = new Point2D.Double(getX(), getY());

    if (HoT) {
      /* Perform head on target for gun movement */
      aimingPoint = new Point2D.Double(en.getX(), en.getY());
      double turnGunAmt = (getHeadingRadians() + en.getBearingRadians() - getGunHeadingRadians());
      turnGunAmt = Utils.normalRelativeAngle(turnGunAmt);
      setTurnGunRightRadians(turnGunAmt);
    } else {
      /* Perform circular targeting */
      Rectangle2D battlefield =
          new Rectangle2D.Double(0, 0, getBattleFieldWidth(), getBattleFieldHeight());
      long when = calcTimeToReachEnemy();
      aimingPoint = org.pattern.utils.Utils.getFuturePoint(en, when);
      if (!battlefield.contains(aimingPoint)) {
        HoT = true;
        return;
      }
      double theta =
          Utils.normalAbsoluteAngle(
              Math.atan2(aimingPoint.getX() - getX(), aimingPoint.getY() - getY()));
      setTurnGunRightRadians(Utils.normalRelativeAngle(theta - getGunHeadingRadians()));
    }

    if (getGunHeat() == 0) {
      double firePower = 3.0;
      fire(firePower);
    }
  }