import java.util.ArrayList; public class Potion { public static enum Potions { POTION, SUPERPOTION, HYPERPOTION, MAXPOTION, REVIVE } private String name; private String description; private Potions type; private boolean alive; private int amount; public Potion(String name, String description, int amount, Potions type) { this.type = type; this.name = name; this.description = description; this.alive = true; this.amount = amount; } public Potion(String name, String description, int amount, Potions type, boolean alive) { this.type = Potions.valueOf(name.toUpperCase().replace(" ", "")); this.name = name; this.description = description; this.alive = alive; this.amount = amount; } public String toString() { return String.format("(%d) %s: %s", this.amount, this.name, this.description); } public String saveString() { return String.format("%s;%s;%d;%b", this.name, this.description, this.amount, this.alive); } public int getAmount() { return this.amount; } public String getName() { return this.name; } /** Checks if an item should be used on alive or fainted pokemon. */ public boolean needsAlive() { return alive; } /** * Spends an item and does something based on the type of item. * @param target Which pokemon should the item be used on. * @return True if nothing went wrong. False otherwise. */ public boolean use(Pokemon target) { if (this.amount > 0) { switch (this.type) { case POTION: return potion(target, 20); case SUPERPOTION: return potion(target, 50); case HYPERPOTION: return potion(target, 200); case MAXPOTION: return potion(target, -1); case REVIVE: if (!target.isConscious()) { this.amount--; target.revive(); System.out.printf("%s was revived.%n", target.getName()); return true; } else { System.out.println("You can't revive a conscious pokemon."); return false; } default: System.out.printf("Invalid item %s%n", name); return false; } } else { System.out.println("No cheating!"); return false; } } /** * Checks if a pokemon is able to, and in need of a potion. If it is, heal it. * @param target The pokemon to heal. * @param amount The amount to heal the pokemon. * @return True if nothing went wrong. False otherwise. */ private boolean potion(Pokemon target, int amount) { if (target.isConscious()) { if (target.isDamaged()) { this.amount--; int healed = target.heal(amount); System.out.printf("%s was healed for %d HP and now has %d HP.%n", target.getName(), healed, target.getHP()); return true; } else { System.out.printf("%s has not taken damage, and does not require a potion.%n", target.getName()); return false; } } else { System.out.println("You can't heal a fainted pokemon."); return false; } } }