Please Keep the existing code the same as it relies on other code. I\'m having t
ID: 3748442 • Letter: P
Question
Please Keep the existing code the same as it relies on other code. I'm having trouble fixing the code here so thanks in advance for the help!!
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
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();
}
}
}
----------------------------------------------------------------------------------------------------------------------------------------
Player.java
----------------------------------------------------------------------------------------------------------------------------------------
import java.util.ArrayList;
public class Player {
/*FIXME(1) Add three fields: name, level, pokemons*/
/*FIXME(2) Add a constructor, which takes one parameter: String n.
Initialize name to n, level to 0, and create an ArrayList for pokemons*/
/*FIXME (3) Define the accessor for name*/
/*FIXME (4) Define the accessor for level*/
/*FIXME (5) Define the accessor for pokemons*/
/*FIXME (6) Define the mutator for level*/
/*FIXME(7) Complete this method by adding p into the Pokemon ArrayList*/
public void addPokemon(Pokemon p){
if (num deck[num]=p;
num++;}
}
/*FIXME(8) Complete this method by removing p from the Pokemon ArrayList*/
public void removePokemon(Pokemon p){
}
public void printStat(){
System.out.println(" Player: " + name + " at level " + level + ", has " + pokemons.size() + " pokemons");
/*FIXME(9) Complete this method by printing the stat of each pokemon in the Pokemon ArrayList.
Each pokemon's stat is printed in an individual line. Hint: You can call the printStat method in Pokemon class*/
}
}
----------------------------------------------------------------------------------------------------------------------------------------
Pokemon.java
----------------------------------------------------------------------------------------------------------------------------------------
public class Pokemon {
private String name;
private int maxHp;
private int hitPoints;
private int attackPoints;
public Pokemon(String name, int maxHp, int ap) {
this.name = name;
this.maxHp = maxHp;
hitPoints = maxHp;
attackPoints = ap;
}
public String getName(){
return name;
}
public int getHitPoints() {
return hitPoints;
}
public int getAttackPoints() {
return attackPoints;
}
public void setHitPoints(int hp) {
hitPoints = hp;
}
public void setAttackPoints(int ap) {
attackPoints = ap;
}
public void reset() {
hitPoints = maxHp;
}
public void printStat() {
System.out.println(name + " has " + hitPoints + " hit points and " + attackPoints + " attack points");
}
}
Explanation / Answer
Solution:
###Player.java########
import java.util.ArrayList;
public class Player {
/*FIXME(1) Add three fields: name, level, pokemons*/
private String name;
private int level;
private ArrayList<Pokemon> pokemons;
/*FIXME(2) Add a constructor, which takes one parameter: String n.
Initialize name to n, level to 0, and create an ArrayList for pokemons*/
public Player(String name) {
this.name = name;
this.level = 0;
this.pokemons = new ArrayList<Pokemon>();
}
/*FIXME (3) Define the accessor for name*/
public String getName() {
return name;
}
/*FIXME (4) Define the accessor for level*/
public int getLevel() {
return level;
}
/*FIXME (5) Define the accessor for pokemons*/
public ArrayList<Pokemon> getPokemons() {
return pokemons;
}
/*FIXME (6) Define the mutator for level*/
public void setLevel(int level) {
this.level = level;
}
/*FIXME(7) Complete this method by adding p into the Pokemon ArrayList*/
public void addPokemon(Pokemon p){
this.pokemons.add(p);
}
/*FIXME(8) Complete this method by removing p from the Pokemon ArrayList*/
public void removePokemon(Pokemon p){
pokemons.remove(p);
}
public void printStat(){
System.out.println(" Player: " + name + " at level " + level + ", has " + pokemons.size() + " pokemons");
/*FIXME(9) Complete this method by printing the stat of each pokemon in the Pokemon ArrayList.
Each pokemon's stat is printed in an individual line. Hint: You can call the printStat method in Pokemon class*/
}
}
####PokemonField.java####
import java.util.Random;
import java.util.Scanner;
public class PokemonField {
static Player player1 = new Player("dragonslayer");
static Player player2 = new Player("voldemort");
public static void main(String[] args) {
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*/
player1.addPokemon(new Pokemon(pokemonNames1[i], pokemonMaxHps1[i], pokemonAps1[i]));
}
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*/
player2.addPokemon(new Pokemon(pokemonNames2[i], pokemonMaxHps2[i], pokemonAps2[i]));
}
}
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*/
System.out.println("Player1 won");
p2.reset(); //resetting p2
player2.removePokemon(p2); //Removing p2 from player2
player1.addPokemon(p2); //Adding p2 to player1's pokemon list
player1.setLevel(player1.getLevel() + 1); //Incrementing level of player1 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("Player2 won");
p1.reset(); //resetting p2
player1.removePokemon(p1); //Removing p2 from player2
player2.addPokemon(p1); //Adding p2 to player1's pokemon list
player2.setLevel(player2.getLevel() + 1); //Incrementing level of player1 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();
}
}
}
###Pokemon.java####
public class Pokemon {
private String name;
private int maxHp;
private int hitPoints;
private int attackPoints;
public Pokemon(String name, int maxHp, int ap) {
this.name = name;
this.maxHp = maxHp;
hitPoints = maxHp;
attackPoints = ap;
}
public String getName(){
return name;
}
public int getHitPoints() {
return hitPoints;
}
public int getAttackPoints() {
return attackPoints;
}
public void setHitPoints(int hp) {
hitPoints = hp;
}
public void setAttackPoints(int ap) {
attackPoints = ap;
}
public void reset() {
hitPoints = maxHp;
}
public void printStat() {
System.out.println(name + " has " + hitPoints + " hit points and " + attackPoints + " attack points");
}
}
Sample Run:
Player: dragonslayer at level 0, has 4 pokemons
Player: voldemort at level 0, has 5 pokemons
Let's play!
dragonslayer choose a pokemon to fight
enter 1 to 4 or -1 to stop
1
voldemort choose a pokemon to fight
enter 1 to 5 or -1 to stop
1
Jigglypuff won!
Player2 won
dragonslayer choose a pokemon to fight
enter 1 to 3 or -1 to stop
1
voldemort choose a pokemon to fight
enter 1 to 6 or -1 to stop
2
Ivysaur won!
Player1 won
dragonslayer choose a pokemon to fight
enter 1 to 4 or -1 to stop
3
voldemort choose a pokemon to fight
enter 1 to 5 or -1 to stop
2
Squirtle won!
Player1 won
Note: If you have any doubt please do comment below before giving any negative feedback. I hope this is all you wanted.