-
Notifications
You must be signed in to change notification settings - Fork 0
/
Squirtle.java
175 lines (154 loc) · 6.12 KB
/
Squirtle.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import java.util.Random;
/*
*Squirtle Pokemon Object Class
*Single-Type Water Type implementes one type interface
*Parent class to Wartortle
*Original code by Lisa Miller
* @editor Nicholas Miyamoto-Pennywell
*@since 9/29/17
*
*/
public class Squirtle extends Pokemon implements WaterType{
static final int BASE_ATTACK_POWER = 94;
static final int BASE_DEFENSE_POWER = 122;
static final int BASE_STAMINA_POWER = 88;
//boolean
protected boolean fastIsWater = true;
protected boolean specialIsWater = true;
/*Constructor with no name
*uses Pokemon superclass Constructor
*attacks must be set after construction of Pokemon Object
*because of dependence of type interface
*/
public Squirtle(){
super("Squirtle", "Squirtle", 7, WATER_COLOR, 0.5, 9, WATER_TYPE, "", BASE_ATTACK_POWER, BASE_DEFENSE_POWER, BASE_STAMINA_POWER);
//pick Attacks after construct
chooseFastAttack();
chooseSpecialAttack();
}
//Constructor with name
public Squirtle(String name){
super("Squirtle", name, 7, WATER_COLOR, 0.5, 9, WATER_TYPE, "", BASE_ATTACK_POWER, BASE_DEFENSE_POWER, BASE_STAMINA_POWER);
chooseFastAttack();
chooseSpecialAttack();
}
protected Squirtle(String species,String name, int num, double ht, double wt, int baseAttackPwr, int baseDefensePwr, int baseStaminaPwr){
super(species, name, num, WATER_COLOR, ht, wt, WATER_TYPE, "", baseAttackPwr, baseDefensePwr, baseStaminaPwr);
//pick Attacks
//can happen here because all subclasses are the same type as Squirtle
chooseFastAttack();
chooseSpecialAttack();
}
/*
* Water type specific fast attack chooser
* Randomly picks an attack from the water type attack arrays
*/
protected void chooseFastAttack(){
//Random to pick fast attack
Random randGen = new Random();
int index;
index = randGen.nextInt(WATER_FAST_ATTACKS.length);
fastAttack = WATER_FAST_ATTACKS[index];
fastAttackPower = WATER_FAST_ATK_POWER[index];
}
/*
* Water-type specific special attack chooser
* Randomly picks an attack from the water type interface attack arrays
*/
protected void chooseSpecialAttack(){
//Random to pick special attack
Random randGen = new Random();
int index;
index = randGen.nextInt(WATER_SPECIAL_ATTACKS.length);
specialAttack = WATER_SPECIAL_ATTACKS[index];
specialAttackPower = WATER_SPECIAL_ATK_POWER[index];
}
/*
* Game-play fast attack simulation
* Creates an output String stating attack details
* checks for weakness/strength adjustment based on
* victim Pokemon's type and attack type(only need to check latter for dual-type)
* Calls beAttacked method on attacked victim.
* @param Pokemon the Pokemon being attacked
* @return String explaining attack and effectiveness
*/
public String performFastAttack(Pokemon victim){
Random rand = new Random();
double damage = 0.0;
double modifier = 1.0;
double damageDivisor = 250.0;
String s = "";
String vType = victim.getType1();
modifier = (double)(rand.nextInt(16) + 85)/100.0; //random modifier .85 - 1.00
s = name+ " performed " + fastAttack + " on " + victim.getSpecies();
//check effectiveness of Water-Type Attack
if(vType.equals("Fire") || vType.equals("Ground") || vType.equals("Rock")){
s = s + "\n It was super effective!";
modifier = modifier * 2.0;
}else if(vType.equals("Water") || vType.equals("Grass") || vType.equals("Dragon")){
s = s + "\n It was not very effective.";
modifier = modifier * 0.5;
}
//check for same types for bonus
if(type1.equals(vType) && type2.equals(victim.getType2())){
modifier = modifier * 1.5;
}
//bulbapedia damage formula:
damage = (((2*level)+10)/damageDivisor)* attackPower * (specialAttackPower + 2) * modifier;
//perform hit on victim pokemon
victim.beAttacked((int)damage);
return s;
}
/*
* Game-play special attack simulation
* Creates an output String stating attack details
* checks for weakness/strength adjustment based on
* victim Pokemon's type and attack type(only need to check latter for dual-type)
* uses Damage formula from here: http://bulbapedia.bulbagarden.net/wiki/Damage
* Calls beAttacked method on attacked victim.
* @param Pokemon the Pokemon being attacked
* @return String explaining attack and effectiveness
*/
public String performSpecialAttack(Pokemon victim){
Random rand = new Random();
double damage = 0.0;
double modifier = 1.0;
double damageDivisor = 250.0;
String s = "";
String vType = victim.getType1();
modifier = (double)(rand.nextInt(16) + 85)/100.0; //random modifier .85 - 1.00
s = name+ " performed " + specialAttack + " on " + victim.getSpecies();
//check effectiveness of attack
if(vType.equals("Fire") || vType.equals("Ground") || vType.equals("Rock")){
s = s + "\n It was super effective!";
modifier = modifier * 2.0;
}else if(vType.equals("Water") || vType.equals("Grass") || vType.equals("Dragon")){
s = s + "\n It was not very effective.";
modifier = modifier * 0.5;
}
//check for same types for bonus
if(type1.equals(vType) && type2.equals(victim.getType2())){
modifier = modifier * 1.5;
}
//bulbapedia damage formula:
damage = (((2*level)+10)/damageDivisor)* attackPower * (specialAttackPower + 2) * modifier;
//perform hit on victim pokemon
victim.beAttacked((int)damage);
return s;
}
/*
* Reduces Pokemon's HP by damage/defensePower
* Doesn't allow HP to go less than 0
* Implementation of "fainting" not done yet
* @param int hit points to take off HP
*/
protected void beAttacked(int damage){
//part of bulbapedia damage formula
damage = damage/defensePower;
if(hP > damage){
hP = hP - damage;
}else{
hP = 0;//"Pokemon fainted"
}
}
}//Class