In this programming question, you have the following classes: Hero.java and Hero
ID: 3875969 • Letter: I
Question
In this programming question, you have the following classes: Hero.java and HeroTester.java.
Hero.java is as follows:
package question2;
import java.util.ArrayList;
import java.util.Scanner;
public class Hero {
private String name;
private int health;
private int max_items;
private ArrayList<String> items;
/**
* Constructor used to set values.
*
* @param name for the hero's name.
* @param max_items for the maximum number of items that the hero can carry.
*/
public Hero (String name, int max_items) {
// set the hero's name to provided name
this.name = name;
try {
// If the max_items is less than zero or more than 10, throw IllegalArgumentException
if(max_items < 0 || max_items > 10)
throw new IllegalArgumentException("The maximum number of items that you can carry is from 1 to 10");
// set the max_items to the the second argument provided.
this.max_items = max_items;
} catch(IllegalArgumentException e) {
System.out.println("You cannot carry that many items! " + e.getMessage());
}
// set hero's health to 100
this.health = 100;
// initialize the items list as empty
this.items = new ArrayList<>();
}
/**
* Default constructor
*/
public Hero () {
// set the hero's name to "Anonymous"
this.name = "Anonymous";
// set the max_items to 2
this.max_items = 2;
// set hero's health to 100
this.health = 100;
// initialize the items list as empty
this.items = new ArrayList<>();
}
/**
* Inventory method which stores the items the hero's items.
*
* @return a string using the .toString method
*/
public String inventory() {
String sb = "";
// If the hero is not carrying anything, print a suitable message
if (items.size() == 0) {
sb += ("Your hero is unburdened by wordly possessions.");
}
// prints the list of items carried by hero
else {
sb += ("Displaying Inventory : ");
sb += ("[");
// Loop1: To print all the items
for (int i = 0; i < items.size(); i++) {
sb += (items.get(i) + ", ");
}
sb += (" ]");
}
return sb.toString();
}
/**
* Take method for adding items to hero's inventory/.
*
* @param item is used for the hero to take/ carry an item
*/
public void take(String item) {
System.out.println("Handling Sir " + getName() + " " + item);
// If the inventory is full, print an appropriate message
if(items.size() == max_items) {
System.out.println("Your hero is overburdened and cannot carry more...");
} else {
//add the item to the inventory
items.add(item);
}
}
/**
* Drop method used for hero to drop items from the hero's inventory
*
* @param item which the hero may/may not drop. Depends on either hard-coded hero
* or the final user input.
*/
public void drop(String item) {
// If the hero is not carrying the item, print an appropriate message
if(!items.contains(item)) {
System.out.println("Your hero is not carrying that item - " + item);
} else {
//drop the item from the inventory
System.out.println("Brave sir " + getName() + " drops his " + item);
items.remove(item);
}
}
/**
* Take damage method for the hero to take damage and lose health
*
* @param amount is used to keep track of how much damage the hero can take.
*/
public void takeDamage(int amount) {
health -= amount;
//if hero's health is less than 0, make it 0
if(health < 0) {
health = 0;
System.out.println("Remember, a hero can't have negative health nor health > 100");
}
}
/**
* Heal method is used to heal the hero
*
* @param amount is used to heal the hero.
*/
public void heal(int amount) {
health += amount;
//if hero's health is more than 100, make it 100
if(health > 100) {
health = 100;
System.out.println("Remember, a hero can't have negative health nor health > 100");
}
}
@Override
/**
* toString method used for printing necessary information.
*/
public String toString() {
return "Displaying hero: Hero: Brave Sir " +this.name+ ", "+
"health: " + this.health + ", " + "can carry: " + this.max_items+ ", "
+ "current inventory: " + inventory();
}
/**
* getName method to get the hero's name.
*
* @return hero's name
*/
public String getName() {
return this.name;
}
/**
* setName method to set the hero's name.
*
* @param name is hero's name.
*/
public void setName(String name) {
this.name = name;
}
}
HeroTester is as follows:
package question2;
import java.util.Scanner;
public class HeroTester {
public static void main(String[] args) {
//Option 1 will decide if user chooses hard coded heroes
// or to create a user inputted hero
int opt1;
Scanner sc = new Scanner(System.in);
do {
System.out.print("1. Hard code heroes 2. Enter Hero values Enter your option: ");
opt1 = sc.nextInt();
System.out.println(" ");
if(opt1 != 1 && opt1 != 2) {System.out.println("Please enter a valid choice!");}
}while(opt1!=1 && opt1 !=2);
if(opt1 == 1) {
//Hard code the hero values
System.out.println(" ----------Creating Heroes----------");
System.out.println("Creating Hero with no name.");
//create a new hero using default constructor
Hero hero1 = new Hero();
//print hero1 state
System.out.println(hero1.toString());
System.out.println("Creating Hero with a name.");
//create a new hero using argumented constructor
Hero hero2 = new Hero("Robin", 3);
//print hero2 state
System.out.println(hero2.toString());
//Add an item to inventory
hero2.take("sword");
System.out.println(hero2.inventory());
//Add an item to inventory
hero2.take("spoon");
System.out.println(hero2.inventory());
//Add an item to inventory
hero2.take("cape of good fortune");
System.out.println(hero2.inventory());
//Add an item to inventory
hero2.take("tomato");
System.out.println(hero2.inventory());
//Drop an item from inventory
hero2.drop("spoon");
System.out.println(hero2.inventory());
//Drop an item from inventory
hero2.drop("watch");
System.out.println(hero2.inventory());
//Drop an item from inventory
hero2.drop("sword");
System.out.println(hero2.inventory());
//Drop an item from inventory
hero2.drop("cape of good fortune");
System.out.println(hero2.inventory());
//Drop an item from inventory
hero2.take("pointy hat of success");
System.out.println(hero2.inventory());
//Reduce health
System.out.println("Brave sir " + hero2.getName() + " is so busy worrying about his inventory"
+ "he doesn't notice the danger and takes 50"
+ " damage from a shrubery!");
hero2.takeDamage(50);
System.out.println(hero2.toString());
//Increase health
System.out.println("Brave sir " + hero2.getName() + " takes a deep breath"
+ " and recovers 5 health");
hero2.heal(5);
System.out.println(hero2.toString());
//Reduce health
System.out.println("Brave sir " + hero2.getName() + " is so busy worrying about his inventory"
+ " he doesn't notice the danger and takes 119"
+ " damage from a shrubery!");
hero2.takeDamage(119);
System.out.println(hero2.toString());
//Increase health
System.out.println("Brave sir " + hero2.getName() + " enters the Avatar state"
+ " and heals for 128 points.");
hero2.heal(128);
System.out.println(hero2.toString());
//print the heros' final state
System.out.println(" ----------Final State----------");
System.out.println(hero1.toString());
System.out.println(hero2.toString());
} else if(opt1==2){
//User wants to enter values
Hero hero;
int opt2;
do {
System.out.print("1. Create an Anonymous Hero. 2. Create a hero with a name.");
System.out.print(" Enter your choice: ");
opt2 = sc.nextInt();
if(opt2!=1 && opt2 != 2) {System.out.println("Please enter a valid choice! ");}
}while(opt2!=1 && opt2 != 2);
System.out.println(" ");
if(opt2 == 1) {
System.out.println("Creating Hero with no name.");
//create a new hero using default constructor
hero = new Hero();
//print hero state
System.out.println(hero.toString());
} else {
System.out.println("Creating Hero with a name.");
System.out.print("Enter hero's name: ");
String name = sc.next();
System.out.print(" Enter max items that the hero can carry: ");
int max = sc.nextInt();
//create a new hero using argumented constructor
hero = new Hero(name, max);
//print hero state
System.out.println(hero.toString());
}
while(true) {
//Menu options
System.out.print(" 1. Add item to inventory 2. Drop item from inventory"
+ " 3. Cause damage to the hero 4. Heal the hero"
+ " 5. Display State of the hero 6. Exit ");
System.out.print(" Enter your choice: ");
int opt3;
opt3 = sc.nextInt();
System.out.println(" ");
switch(opt3) {
case 1:
//add item to hero's inventory
System.out.print("Enter item's name to be added: ");
String take = sc.next();
hero.take(take);
System.out.println(hero.toString());
break;
case 2:
//drop item from hero's inventory
System.out.print("Enter item's name to be dropped: ");
String drop = sc.next();
hero.drop(drop);
System.out.println(hero.toString());
break;
case 3:
//Cause damage to the hero
System.out.print("Enter the health damage amount: ");
int damage = sc.nextInt();
hero.takeDamage(damage);
System.out.println(hero.toString());
break;
case 4:
//Heal the hero
System.out.print("Enter the healing amount: ");
int heal = sc.nextInt();
hero.heal(heal);
System.out.println(hero.toString());
break;
case 5:
//Display the hero's state
System.out.println(hero.toString());
break;
case 6:
System.out.println("Exiting!!");
return;
default:
//In case user enters an invalid option.
System.out.println(" Enter a valid option!!");
}
}
}
}
}
Using the following classes, find a way to load and save to a file instead of forcing the user to create a new character every time. Using the following is not allowed:
- String Builder
- Buffered Readers
- Apache commons or any others of the type.
Remeber, the key here is to allow the user to load a character from a file in your desktop (or a location of your preference) and use it to run through the code. Then allow the user to save the progress on the same file, again. Be simple, but precise. It shouldn't be too hard! Good luck!
Explanation / Answer
package question2;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
public class HeroTesterUsingFiles {
public static void main(String[] args) {
FileWriter writer = null;
// Option 1 will decide if user chooses hard coded heroes
// or to create a user inputted hero
int opt1;
RandomAccessFile randomAccessFile=null;
// getting the Path of the File ,
// You can specify the path of your choice .
try {
writer = new FileWriter("C:\Users\XYZ\Desktop\test.txt", true);
randomAccessFile = new RandomAccessFile("C:\Users\XYZ\Desktop\test.txt", "r");
do {
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
//Get the input
opt1 = Integer.parseInt(randomAccessFile.readLine());
writer.write(" ");
if (opt1 != 1 && opt1 != 2) {
writer.write("Please enter a valid choice!");
}
} while (opt1 != 1 && opt1 != 2);
if (opt1 == 1) {
// Hard code the hero values
writer.write(" ----------Creating Heroes----------");
writer.write("Creating Hero with no name.");
// create a new hero using default constructor
Hero hero1 = new Hero();
// print hero1 state
writer.write(hero1.toString());
writer.write("Creating Hero with a name.");
// create a new hero using argumented constructor
Hero hero2 = new Hero("Robin", 3);
// print hero2 state
writer.write(hero2.toString());
// Add an item to inventory
hero2.take("sword");
writer.write(hero2.inventory());
// Add an item to inventory
hero2.take("spoon");
writer.write(hero2.inventory());
// Add an item to inventory
hero2.take("cape of good fortune");
writer.write(hero2.inventory());
// Add an item to inventory
hero2.take("tomato");
writer.write(hero2.inventory());
// Drop an item from inventory
hero2.drop("spoon");
writer.write(hero2.inventory());
// Drop an item from inventory
hero2.drop("watch");
writer.write(hero2.inventory());
// Drop an item from inventory
hero2.drop("sword");
writer.write(hero2.inventory());
// Drop an item from inventory
hero2.drop("cape of good fortune");
writer.write(hero2.inventory());
// Drop an item from inventory
hero2.take("pointy hat of success");
writer.write(hero2.inventory());
// Reduce health
writer.write("Brave sir " + hero2.getName() + " is so busy worrying about his inventory"
+ "he doesn't notice the danger and takes 50" + " damage from a shrubery!");
hero2.takeDamage(50);
writer.write(hero2.toString());
// Increase health
writer.write("Brave sir " + hero2.getName() + " takes a deep breath" + " and recovers 5 health");
hero2.heal(5);
writer.write(hero2.toString());
// Reduce health
writer.write("Brave sir " + hero2.getName() + " is so busy worrying about his inventory"
+ " he doesn't notice the danger and takes 119" + " damage from a shrubery!");
hero2.takeDamage(119);
writer.write(hero2.toString());
// Increase health
writer.write(
"Brave sir " + hero2.getName() + " enters the Avatar state" + " and heals for 128 points.");
hero2.heal(128);
writer.write(hero2.toString());
// print the heros' final state
writer.write(" ----------Final State----------");
writer.write(hero1.toString());
writer.write(hero2.toString());
} else if (opt1 == 2) {
// User wants to enter values
Hero hero;
int opt2;
do {
writer.write("1. Create an Anonymous Hero. 2. Create a hero with a name.");
writer.write(" Enter your choice: ");
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
//Get the input
opt2 = Integer.parseInt(randomAccessFile.readLine());
if (opt2 != 1 && opt2 != 2) {
writer.write("Please enter a valid choice! ");
}
} while (opt2 != 1 && opt2 != 2);
writer.write(" ");
if (opt2 == 1) {
writer.write("Creating Hero with no name.");
// create a new hero using default constructor
hero = new Hero();
// print hero state
writer.write(hero.toString());
} else {
writer.write("Creating Hero with a name.");
writer.write("Enter hero's name: ");
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
String name =randomAccessFile.readLine();
writer.write(" Enter max items that the hero can carry: ");
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
int max =Integer.parseInt(randomAccessFile.readLine());
// create a new hero using argumented constructor
hero = new Hero(name, max);
// print hero state
writer.write(hero.toString());
}
while (true) {
// Menu options
writer.write(" 1. Add item to inventory 2. Drop item from inventory"
+ " 3. Cause damage to the hero 4. Heal the hero"
+ " 5. Display State of the hero 6. Exit ");
writer.write(" Enter your choice: ");
int opt3;
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
//Get the input
opt3 = Integer.parseInt(randomAccessFile.readLine());
writer.write(" ");
switch (opt3) {
case 1:
// add item to hero's inventory
writer.write("Enter item's name to be added: ");
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
String take =randomAccessFile.readLine();
hero.take(take);
writer.write(hero.toString());
break;
case 2:
// drop item from hero's inventory
writer.write("Enter item's name to be dropped: ");
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
String drop =randomAccessFile.readLine();
hero.drop(drop);
writer.write(hero.toString());
break;
case 3:
// Cause damage to the hero
writer.write("Enter the health damage amount: ");
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
int damage =Integer.parseInt(randomAccessFile.readLine());
hero.takeDamage(damage);
writer.write(hero.toString());
break;
case 4:
// Heal the hero
writer.write("Enter the healing amount: ");
//Go to last line of the file
randomAccessFile.seek(randomAccessFile.length()-1L);
int heal =Integer.parseInt(randomAccessFile.readLine());
hero.heal(heal);
writer.write(hero.toString());
break;
case 5:
// Display the hero's state
writer.write(hero.toString());
break;
case 6:
writer.write("Exiting!!");
return;
default:
// In case user enters an invalid option.
writer.write(" Enter a valid option!!");
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(writer!=null)
{
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.