Please solve in java, the part that says fix me is the only ne that needs to be
ID: 3748224 • Letter: P
Question
Please solve in java, the part that says fix me is the only ne that needs to be fix
4.6 zyLab4: Player class
You will extend zyLab3, by adding a Player class and extending the PokemonField class.
You will be working with three.java files in this lab.
Pokemon.java - Class definition (completed)
Player.java - Class definition
PokemonField.java - Contains main() method
Complete the Player class with the following specifications:
(1) add the following three private fields
String name
int level
ArrayList<Pokemon> pokemons
(2) add a constructor, which takes one parameter to initialize the name field. The level is initialized as 0. The constructor also creates the ArrayList.
(3) add each of the following public member methods
getName()
getLevel()
getPokemons()
setLevel(int level)
addPokemon(Pokemon p)
removePokemon(Pokemon p)
printStat()
Complete the PokemonField.java
import java.util.Random;
import java.util.Scanner;
public class PokemonField {
public static void main(String[] args) {
Player player1 = new Player("dragonslayer");
Player player2 = new Player("voldemort");
Random random = new Random();
initialize(player1, player2);
player1.printStat();
player2.printStat();
play(random, player1, player2);
System.out.println("Game over");
player1.printStat();
player2.printStat();
}
public static boolean fight(Random random, Pokemon p1, Pokemon p2){
double prob = (double)p1.getAttackPoints() / (p1.getAttackPoints() + p2.getAttackPoints());
while(p1.getHitPoints() > 0 && p2.getHitPoints() > 0) {
if(random.nextDouble() < prob) {
p2.setHitPoints(Math.max(p2.getHitPoints()- p1.getAttackPoints(), 0));
}
else{
p1.setHitPoints(Math.max(p1.getHitPoints() - p2.getAttackPoints(), 0));
}
}
if(p1.getHitPoints() > 0){
System.out.println(p1.getName() + " won!");
return true;
}
else {
System.out.println(p2.getName() + " won!");
return false;
}
}
public static void initialize(Player player1, Player player2) {
String[] pokemonNames1 = {"Butterfree", "Ivysaur", "Pikachu", "Squirtle"};
int[] pokemonMaxHps1 = {10, 15, 20, 30};
int[] pokemonAps1 = {1, 2, 2, 3};
String[] pokemonNames2= {"Jigglypuff","Oddish","Gloom","Psyduck","Machop"};
int[] pokemonMaxHps2 = {12, 18, 25, 27, 32};
int[] pokemonAps2 = {1, 1, 2, 2, 3};
for(int i = 0; i < pokemonNames1.length; i++) {
/*FIX(1) create a Pokemon object with the following three arguments:pokemonNames1[i], pokemonMaxHps1[i], pokemonAps1[i]
Add the Pokemon object to the Pokemon array list in player1
Increment player1's level by 1*/
}
for(int i = 0; i < pokemonNames2.length; i++) {
/*FIX(2) create a Pokemon object with the following three arguments:pokemonNames2[i], pokemonMaxHps2[i], pokemonAps2[i]
Add the Pokemon object to the Pokemon array list in player2
Increment player2's level by 1*/
}
}
public static void play(Random random, Player player1, Player player2) {
Pokemon p1, p2;
int index1, index2;
Scanner scnr = new Scanner(System.in);
boolean result;
System.out.println("Let's play!");
System.out.println(player1.getName() + " choose a pokemon to fight enter 1 to " + player1.getPokemons().size() + " or -1 to stop");
index1 = scnr.nextInt();
System.out.println(player2.getName() + " choose a pokemon to fight enter 1 to " + player2.getPokemons().size() + " or -1 to stop");
index2 = scnr.nextInt();
while(index1 != -1 && index2 != -1) {
p1 = player1.getPokemons().get(index1-1);
p2 = player2.getPokemons().get(index2-1);
result = fight(random, p1, p2);
if(result) {
/*FIXME(3) p1 won, reset p2, remove p2 from player2, and add p2 to player 1, increment player1's level by 1*/
}
else {
/*FIXME(4) p2 won, reset p1, remove p1 from player1, and add p1 to player 2, increment player2's level by 1*/
}
System.out.println(player1.getName() + " choose a pokemon to fight enter 1 to " + player1.getPokemons().size() + " or -1 to stop");
index1 = scnr.nextInt();
System.out.println(player2.getName() + " choose a pokemon to fight enter 1 to " + player2.getPokemons().size() + " or -1 to stop");
index2 = scnr.nextInt();
}
}
}
Explanation / Answer
class Player{
private String name;
private int level;
private ArrayList<Pokemon> pokemons;
Player(String name){
this.name = name;
level=0;
pokemons = new ArrayList<Pokemon>();
}
public String getName(){ return name;}
public int getLevel() {return level; }
public ArrayList<Pokemon> getPokemons(){ return pokemons; }
public void setLevel(int level) { this.level = level; }
public void addPokemon(Pokemon p) { pokemons.add(p); }
public void removePokemon(Pokemon p) {pokemons.remove(p);}
public String printStat(){
StringBuilder builder = new StringBuilder();
builder.append("name " + this.getName());
builder.append("level :: " + this.getLevel());
builder.append(" pokemons list is :: " + Arrays.toString(this.getPokemons().toArray()));
return builder.toString();
}
}
/*FIX(1) create a Pokemon object with the following three arguments:pokemonNames1[i], pokemonMaxHps1[i], pokemonAps1[i] Add the Pokemon object to the Pokemon array list in player1 Increment player1's level by 1*/
Pokemon pokemonobj = new Pokemon(pokemonNames1[i],pokemonMaxHps1[i], pokemonAps1[i]);
player1.addPokemon(pokemonobj );
player1.setLevel(++player1.getLevel());
/*FIX(2) create a Pokemon object with the following three arguments:pokemonNames2[i], pokemonMaxHps2[i], pokemonAps2[i] Add the Pokemon object to the Pokemon array list in player2 Increment player2's level by 1*/
Pokemon pokemonobj2 = new Pokemon(pokemonNames2[i],pokemonMaxHps2[i], pokemonAps2[i]);
player2.addPokemon(pokemonobj2);
player2.setLevel(++player2.getLevel());
/*FIXME(3) p1 won, reset p2, remove p2 from player2, and add p2 to player 1, increment player1's level by 1*/
p1.won();
p2.reset();
player2.removePokemon(p2);
player1.addPokemon(p2);
player1.setLevel(++player1.getLevel());
/*FIXME(4) p2 won, reset p1, remove p1 from player1, and add p1 to player 2, increment player2's level by 1*/
p2.won();
p1.reset();
player1.removePokemon(p1);
player2.addPokemon(p1);
player2.setLevel(++player2.getLevel());