001package vooga.turnbased.gameobject.battleobject; 002 003import java.awt.Image; 004import java.util.List; 005import java.util.Map; 006import java.util.Random; 007import java.util.Set; 008 009 010/** 011 * This is a test battle monster that will be used to see if the BattleMode 012 * functions. 013 * Extends the abstract class BattleObject. 014 * 015 * @author Michael Elgart, Tony 016 * 017 */ 018public class BattleSimpleObject extends BattleObject { 019 private final String HEALTH_STAT = "health"; 020 private final String ATTACK_STAT = "attack"; 021 private final String DEFENSE_STAT = "defense"; 022 private final String MAX_HEALTH_STAT = "maxHealth"; 023 private final String USED = " used "; 024 025 private final double OPTION1_LOWER_BOUND = .0; 026 private final double OPTION1_UPPER_BOUND = .5; 027 private final double OPTION2_LOWER_BOUND = .5; 028 private final double OPTION2_UPPER_BOUND = .7; 029 private final double OPTION3_LOWER_BOUND = .7; 030 private final double OPTION3_UPPER_BOUND = .9; 031 private final double OPTION4_LOWER_BOUND = .9; 032 private final double OPTION4_UPPER_BOUND = 1; 033 034 /** 035 * Creates a test battle monster. 036 * 037 * @param allowableModes Set of string names of modes in which object should 038 * be. 039 * @param condition The action that this object can pass to the GameManager, 040 * can be GameEvent.NO_ACTION if no action needed 041 * @param stats Map of string names of characteristics to their numerical 042 * values i.e. defense to 043 * 10. 044 * @param name String name of monster. 045 * @param image The image of this testMonster. 046 */ 047 public BattleSimpleObject (Set<String> allowableModes, String condition, 048 Map<String, Number> stats, String name, Image image) { 049 super(allowableModes, condition, stats, name, image); 050 } 051 052 public BattleSimpleObject (Set<String> allowableModes, String condition, 053 Image image, List<String> stats) { 054 super(allowableModes, condition, image, stats); 055 } 056 057 @Override 058 public void takeDamage (int damageDone, List<String> battleMessages) { 059 int healthLost = damageDone - getStat(DEFENSE_STAT).intValue(); 060 if (healthLost > 0) { 061 changeStat(HEALTH_STAT, getStat(HEALTH_STAT).intValue() 062 - healthLost); 063 } 064 } 065 066 @Override 067 public void attackEnemy (BattleObject enemy, List<String> battleMessages) { 068 enemy.takeDamage(getStat(ATTACK_STAT).intValue(), battleMessages); 069 } 070 071 @Override 072 public String getDeathMessage () { 073 return this.getName() + " fainted."; 074 } 075 076 @Override 077 public String getStartFightingMessage (boolean isPlayerControlled) { 078 String name = this.getName(); 079 Random randomGenerator = new Random(); 080 int i = randomGenerator.nextInt(2); 081 082 if (isPlayerControlled) { 083 String[] messages = { name + " sent out.", name + " GO!" }; 084 return messages[i]; 085 } 086 else { 087 String[] messages = { name + " encountered.", name + " appeared." }; 088 return messages[i]; 089 } 090 091 } 092 093 @Override 094 public String[] getOptions () { 095 String[] ret = { "ATTACK", "DEFEND", "CHARGE", "HEAL" }; 096 return ret; 097 } 098 099 @Override 100 public void doOption1 (BattleObject target, List<String> battleMessages) { 101 attackEnemy(target, battleMessages); 102 battleMessages.add(getName() + USED + getOptions()[0]); 103 } 104 105 @Override 106 public void doOption2 (BattleObject target, List<String> battleMessages) { 107 changeStat(DEFENSE_STAT, getStat(DEFENSE_STAT).intValue() + 1); 108 battleMessages.add(getName() + USED + getOptions()[1]); 109 } 110 111 @Override 112 public void doOption3 (BattleObject target, List<String> battleMessages) { 113 changeStat(ATTACK_STAT, getStat(ATTACK_STAT).intValue() + 1); 114 battleMessages.add(getName() + USED + getOptions()[2]); 115 } 116 117 @Override 118 public void doOption4 (BattleObject target, List<String> battleMessages) { 119 setCurrentMessage(getName() + USED + getOptions()[3]); 120 changeStat(HEALTH_STAT, getStat(HEALTH_STAT).intValue() + 3); 121 if (getStat(HEALTH_STAT).intValue() > getStat(MAX_HEALTH_STAT) 122 .intValue()) { 123 changeStat(HEALTH_STAT, getStat(MAX_HEALTH_STAT).intValue()); 124 } 125 battleMessages.add(getName() + USED + getOptions()[3]); 126 } 127 128 @Override 129 public void doRandomOption (BattleObject target, List<String> battleMessages) { 130 Random randomGenerator = new Random(); 131 double random = randomGenerator.nextDouble(); 132 if (random >= OPTION1_LOWER_BOUND && random < OPTION1_UPPER_BOUND) { 133 doOption1(target, battleMessages); 134 } 135 if (random >= OPTION2_LOWER_BOUND && random < OPTION2_UPPER_BOUND) { 136 doOption2(target, battleMessages); 137 } 138 if (random >= OPTION3_LOWER_BOUND && random < OPTION3_UPPER_BOUND) { 139 doOption3(target, battleMessages); 140 } 141 if (random >= OPTION4_LOWER_BOUND && random < OPTION4_UPPER_BOUND) { 142 doOption4(target, battleMessages); 143 } 144 } 145 146 @Override 147 protected String[] getStatLines () { 148 String[] ret = new String[3]; 149 int myHealth = getStat("health").intValue(); 150 int myMaxHealth = getStat("maxHealth").intValue(); 151 int myAttack = getStat("attack").intValue(); 152 int myDefense = getStat("defense").intValue(); 153 154 ret[0] = "Health: " + myHealth + "/" + myMaxHealth; 155 ret[1] = "Attack: " + myAttack; 156 ret[2] = "Defense: " + myDefense; 157 158 return ret; 159 160 } 161 162 @Override 163 public void doOption (int MenuOptionSelected, BattleObject target, 164 List<String> battleMessages) { 165 switch (MenuOptionSelected) { 166 case 1: 167 doOption1(target, battleMessages); 168 break; 169 case 2: 170 doOption2(target, battleMessages); 171 break; 172 case 3: 173 doOption3(target, battleMessages); 174 break; 175 case 4: 176 doOption4(target, battleMessages); 177 break; 178 default: 179 break; 180 } 181 } 182 183}