In: Computer Science
Please use java language in an easy way with comments!
Expand your below program, so it can include cursed items (weapons that break, armor that causes more damage when worn). In order to do that, write an interface called "CursedItem". Then create subclasses of the armor, and weapon class that implement the CursedItem interface :
CursedWeapon: using a random number generator, there is a 4 in 10 chance that the weapon breaks during combat.
CursedArmor: this item amplifies the damage taken in battle instead of reducing it.
The interface only needs to have one method. In your driver class, create an example object for each of the new classes.
-----------------------------------------------------------------------------------------------------------
//Java code
public class GameItem { protected String itemName; //Name of the item //constructor public GameItem(String itemName) { this.itemName = itemName; } //use() public void use(); }
//======================================
/** * Weapon class that extends the GameItem class */ public class Weapon extends GameItem { private int damage; //constructor public Weapon(String itemName, int damage) { super(itemName); this.damage = damage; } public void use() { System.out.println("You now wield "+itemName+". This weapon does "+damage+" points of damage with each hit."); } }
//==========================================
/** * Armor class that extends the GameItem class */ public class Armor extends GameItem{ private double protection; public Armor(String itemName, double protection) { super(itemName); this.protection = protection; } @Override public void use() { System.out.println("You have equipped "+itemName+". This item reduces the damage you take in combat by "+protection+" percent."); } }
//=====================================
import java.util.ArrayList; public class GameItemTest { public static void main(String[] args) { ArrayList<GameItem> inventory = new ArrayList<>(); inventory.add(new Weapon("Sword",50)); inventory.add(new Armor("Shield",85.9)); for (GameItem g:inventory ) { g.use(); } } }
/********************************GameItem.java******************************/
public abstract class GameItem implements CursedItem {
protected String itemName; // Name of the item
// constructor
public GameItem(String itemName) {
this.itemName = itemName;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
// use()
public abstract void use();
}
/*****************************************Weapon.java******************************/
/**
* Weapon class that extends the GameItem class
*/
public class Weapon extends GameItem {
private int damage;
//constructor
public Weapon(String itemName, int damage) {
super(itemName);
this.damage = damage;
}
public void use() {
System.out.println("You now wield "+itemName+". This weapon does
"+damage+" points of damage with each hit.");
}
@Override
public void cursed() {
}
}
/*******************************Armor.java********************************/
'
/**
* Armor class that extends the GameItem class
*/
public class Armor extends GameItem {
private double protection;
public Armor(String itemName, double protection)
{
super(itemName);
this.protection = protection;
}
public double getProtection() {
return protection;
}
public void setProtection(double protection)
{
this.protection = protection;
}
@Override
public void use() {
System.out.println("You have
equipped " + itemName + ". This item reduces the damage you take in
combat by "
+ protection + " percent.");
}
@Override
public void cursed() {
}
}
/*********************************CursedItem.java*****************************/
public interface CursedItem {
public void cursed();
}
/***********************************CursedWeapon.java*************************************/
import java.util.Random;
public class CursedWeapon extends Weapon implements CursedItem {
public CursedWeapon(String itemName, int damage)
{
super(itemName, damage);
}
@Override
public void cursed() {
Random random = new Random();
int chances =
random.nextInt(10)+1;
//chances of weapon break when it
equals to 2,4,6,8
if ((chances - 1) % 2 == 0) {
System.out.println("Weapon has been broken!");
}
}
}
/************************************CursedArmor.java********************************/
public class CursedArmor extends Armor implements CursedItem {
public CursedArmor(String itemName, double
protection) {
super(itemName, protection);
}
@Override
public void cursed() {
setProtection(10);
}
@Override
public void use() {
System.out.println("You have
equipped " + getItemName() + ". This item amplify the damage you
take in combat by "
+ getProtection() + " percent.");
}
}
/**********************************************GameItemTest.java****************************/
import java.util.ArrayList;
public class GameItemTest {
public static void main(String[] args) {
ArrayList<GameItem> inventory
= new ArrayList<>();
inventory.add(new Weapon("Sword",
50));
inventory.add(new Armor("Shield",
85.9));
inventory.add(new
CursedWeapon("Cursed Sword", 60));
inventory.add(new
CursedArmor("Cursed Shield", 85.9));
for (GameItem g : inventory)
{
g.cursed();
g.use();
}
}
}
/***********************output*************************/
You now wield Sword. This weapon does 50 points of damage with
each hit.
You have equipped Shield. This item reduces the damage you take in
combat by 85.9 percent.
Weapon has been broken!
You now wield Cursed Sword. This weapon does 60 points of damage
with each hit.
You have equipped Cursed Shield. This item amplify the damage you
take in combat by 10.0 percent.
You now wield Sword. This weapon does 50 points of damage with
each hit.
You have equipped Shield. This item reduces the damage you take in
combat by 85.9 percent.
You now wield Cursed Sword. This weapon does 60 points of damage
with each hit.
You have equipped Cursed Shield. This item amplify the damage you
take in combat by 10.0 percent.
Please let me know if you have any doubt or modify the answer, Thanks :)