Android Open Source - feup-lpoo-android-tower-defense Turret Tower






From Project

Back to project page feup-lpoo-android-tower-defense.

License

The source code is released under:

MIT License

If you think the Android project feup-lpoo-android-tower-defense listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package pt.up.fe.lpoo.towerdefense;
/*from  www .  ja v a 2  s . co m*/
import java.util.ArrayList;

import pt.up.fe.lpoo.framework.Image;

/**
 * This class represents the turret tower defense object. It shoots small, rapid projectiles at a high rate
 *  of fire to enemies within a large radius. It targets enemies closer to their goal first.
 * @author Joao Marinheiro
 * @author Luis Cleto
 * @see DefenseObject
 */
public class TurretTower extends DefenseObject{
  private static final int TURRET_HP = 500;
  private static final float RELOAD_TIME = 1f;
  private static final double TURRET_RADIUS = 200.0;
  /** cost to build a turret tower */
  public static final int TURRET_COST = 50;
  private static final int TURRET_MAX_LEVEL = 2;
  private int projectileDamage, projectileSpeed;

  /**
   * Constructor for the TurretTower class. Calls the constructor for the DefenseObject class and sets the base
   *  stats for projectile damage and speed
   * @param xPos position of the tower in the x axis of the game map
   * @param yPos position of the tower in the y axis of the game map
   */
  public TurretTower(int xPos, int yPos){
    super(RELOAD_TIME, TURRET_HP, xPos, yPos, TURRET_RADIUS);
    projectileDamage = 4; projectileSpeed = 10;

  }

  @Override
  protected void attack(ArrayList<Enemy> enemies) {
    Enemy toAttack = null;
    for(int i=0; i < enemies.size(); i++){
      if(isWithinRadius(enemies.get(i))){
        if(toAttack == null)
          toAttack = enemies.get(i);
        else if(toAttack.getDistToGoal() > enemies.get(i).getDistToGoal())
          toAttack = enemies.get(i);
      }
    }

    if(toAttack != null){
      LevelScreen.gameElems.addProjectile( new TurretProjectile(this.getCenterX(), this.getCenterY(), 
          toAttack.getCenterX(), toAttack.getCenterY(), projectileSpeed, projectileDamage));
      foundEnemies = true;
    }
  }

  /**
   * Returns the current Image to represent the tower.
   * 
   * @return returns the Image object corresponding the current image of the tower
   */
  @Override
  public Image getCurrentImage() {
    if(level == 1)
      return Assets.turretTowerLevel1;
    else
      return Assets.turretTowerLevel2;
  }
  
  /**
   * Indicates whether this tower can be upgraded or not
   * 
   * @return returns true if it can be upgraded, false otherwise
   */
  @Override
  public boolean isUpgradable() {
    return (level < TURRET_MAX_LEVEL);
  }

  /**
   * Returns the cost to upgrade the tower
   * 
   * @return returns the necessary credit to upgrade this tower
   */
  @Override
  public int getUpgradeCost() {
    return level*200;
  }

  /**
   * Upgrades the tower as long as the user has enough credits to cover the upgrade.
   * 
   * Increases the tower level and base stats as well as the stats for any new projectiles it creates
   */
  @Override
  public void upgrade() {
    int cost = getUpgradeCost();
    if(LevelScreen.gameElems.currentBalance >= cost){
      LevelScreen.gameElems.currentBalance -= cost;
      level++;
      attackRadius += 50;
      projectileDamage += 2;
      maxHitpoints += 500;
      hitpoints = maxHitpoints;
      projectileSpeed += 5;
      reloadTime -= 0.3f;
    }
  }

  /**
   * @return returns the cost to build this tower
   */
  @Override
  public int getCost() {
    return TURRET_COST;
  }

  /**
   * Indicates whether this defense will block an enemies path or not
   * 
   * @return returns false if enemies cant walk across this defense, true otherwise
   */
  @Override
  public boolean isCrossable() {
    return false;
  }

  /**
   * Indicates whether this tower is part of the ground terrain or if it has a height (for visibility purposes)
   * 
   * @return returns true if the tower is at ground level, false otherwise
   */
  @Override
  public boolean isGroundObject() {
    return false;
  }

  /**
   * @return returns the cost required to repair the tower
   */
  @Override
  public int getRepairCost() {
    return level*(maxHitpoints-hitpoints);
  }
}




Java Source Code List

pt.up.fe.lpoo.framework.Audio.java
pt.up.fe.lpoo.framework.FileIO.java
pt.up.fe.lpoo.framework.Game.java
pt.up.fe.lpoo.framework.Graphics.java
pt.up.fe.lpoo.framework.Image.java
pt.up.fe.lpoo.framework.Input.java
pt.up.fe.lpoo.framework.Music.java
pt.up.fe.lpoo.framework.Pool.java
pt.up.fe.lpoo.framework.Screen.java
pt.up.fe.lpoo.framework.Sound.java
pt.up.fe.lpoo.framework.implementation.AndroidAudio.java
pt.up.fe.lpoo.framework.implementation.AndroidFastRenderView.java
pt.up.fe.lpoo.framework.implementation.AndroidFileIO.java
pt.up.fe.lpoo.framework.implementation.AndroidGame.java
pt.up.fe.lpoo.framework.implementation.AndroidGraphics.java
pt.up.fe.lpoo.framework.implementation.AndroidImage.java
pt.up.fe.lpoo.framework.implementation.AndroidInput.java
pt.up.fe.lpoo.framework.implementation.AndroidMusic.java
pt.up.fe.lpoo.framework.implementation.AndroidSound.java
pt.up.fe.lpoo.framework.implementation.MultiTouchHandler.java
pt.up.fe.lpoo.framework.implementation.SingleTouchHandler.java
pt.up.fe.lpoo.framework.implementation.TouchHandler.java
pt.up.fe.lpoo.towerdefense.Animation.java
pt.up.fe.lpoo.towerdefense.Assets.java
pt.up.fe.lpoo.towerdefense.BarricadeDefense.java
pt.up.fe.lpoo.towerdefense.BoulderProjectile.java
pt.up.fe.lpoo.towerdefense.BoulderTower.java
pt.up.fe.lpoo.towerdefense.BuildingOption.java
pt.up.fe.lpoo.towerdefense.DefenseObject.java
pt.up.fe.lpoo.towerdefense.DescriptionObject.java
pt.up.fe.lpoo.towerdefense.Enemy.java
pt.up.fe.lpoo.towerdefense.FreezeTower.java
pt.up.fe.lpoo.towerdefense.GameElements.java
pt.up.fe.lpoo.towerdefense.GameObj.java
pt.up.fe.lpoo.towerdefense.Golem.java
pt.up.fe.lpoo.towerdefense.InstructionsScreen.java
pt.up.fe.lpoo.towerdefense.LevelScreen.java
pt.up.fe.lpoo.towerdefense.LevelSelectionScreen.java
pt.up.fe.lpoo.towerdefense.LoadingScreen.java
pt.up.fe.lpoo.towerdefense.MainMenuScreen.java
pt.up.fe.lpoo.towerdefense.Messages.java
pt.up.fe.lpoo.towerdefense.MusicPlayer.java
pt.up.fe.lpoo.towerdefense.PathCluster.java
pt.up.fe.lpoo.towerdefense.PoisonTower.java
pt.up.fe.lpoo.towerdefense.Projectile.java
pt.up.fe.lpoo.towerdefense.Skull.java
pt.up.fe.lpoo.towerdefense.Slime.java
pt.up.fe.lpoo.towerdefense.SplashLoadingScreen.java
pt.up.fe.lpoo.towerdefense.StatusEffect.java
pt.up.fe.lpoo.towerdefense.TarPoolDefense.java
pt.up.fe.lpoo.towerdefense.TextParser.java
pt.up.fe.lpoo.towerdefense.Tile.java
pt.up.fe.lpoo.towerdefense.TowerDefenseGame.java
pt.up.fe.lpoo.towerdefense.TurretProjectile.java
pt.up.fe.lpoo.towerdefense.TurretTower.java
pt.up.fe.lpoo.towerdefense.Wave.java