Order Now  +1 678 648 4277 

Implementing a console role game in Java homework help

The assignment required to create a Java console role game. The console game must implement logic, based on a given flowchart. Our Java homework helpers have created a program that allows the user to insert a character, which can move in different directions and make different actions. While moving, the character can face enemies, which can be fought are bribed by character, and chests, which can be opened by character to obtain items. User can exit the game by printing ‘q’

Developing a Java Console Game

Actor.java package actors; import java.util.Random; import location.Direction; import location.Location; import stats.AttackStats; import stats.DefenseStats; import stats.GoldStats; import stats.HealthStats; public class Actor extends LocationObject{ protected AttackStats attackStats; protected DefenseStats defenseStats; protected HealthStats healthStats; protected GoldStats goldStats; public Actor(Location location) { super(location); this.attackStats = new AttackStats(); this.defenseStats = new DefenseStats(); this.healthStats = new HealthStats(); this.goldStats = new GoldStats(); } public int getAttack() { return attackStats.getValue(); } public int getDefense() { return defenseStats.getValue(); } public int getGold() { return goldStats.getValue(); } public int getHealth() { return healthStats.getValue(); } public void addGold(int value) { goldStats.modify(value); } public boolean reduceHealth(int value) { if (value >= getHealth()) { healthStats.modify(-getHealth()); return false; } healthStats.modify(-value); return true; } public boolean reduceGold(int value) { goldStats.modify(-value); return true; } public void move(Direction dir) { location = location.move(dir); } public static LocationObject generateActor(Location location) { Random random = new Random(); int r = random.nextInt(3); switch (r) { case 0: return new Nothing(location); case 1: return new Chest(location); case 2: return new Enemy(location); } return null; } } Character.java package actors; import items.Armor; import items.Gold; import items.Health; import items.Item; import items.Weapon; import location.Direction; import location.Location; public class Character extends Actor{ private String name; private Origin origin; public Character(String name, Origin origin) { super(new Location()); this.name = name; this.origin = origin; } public void move(Direction dir) { super.move(dir); System.out.println(name + " " + origin.toString() + " moves " + dir.toString() + ", now at " + location.toString()); } public void applyItem(Item item) { if (item instanceof Armor) { defenseStats.modify(item.getImproveValue()); } else if (item instanceof Weapon) { attackStats.modify(item.getImproveValue()); } else if (item instanceof Health) { healthStats.modify(item.getImproveValue()); } else if (item instanceof Gold) { goldStats.modify(item.getImproveValue()); } } public String getFullName() { return name + " " + origin.toString(); } @Override public String toString() { String result = getFullName() + "\n"; result += "Your " + attackStats.toString() + "\n"; result += "Your " + defenseStats.toString() + "\n"; result += "Your " + healthStats.toString() + "\n"; result += "Your " + goldStats.toString() + "\n"; return result; } } Chest.java package actors; import java.util.Random; import items.Armor; import items.Empty; import items.Gold; import items.Health; import items.Item; import items.Weapon; import location.Location; public class Chest extends LocationObject{ private Item item; public Chest(Location location) { super(location); Random random = new Random(); int r = random.nextInt(5); switch (r) { case 0: item = new Armor(); break; case 1: item = new Weapon(); break; case 2: item = new Health(); break; case 3: item = new Gold(); break; case 4: item = new Empty(); break; } } public Item takeItem() { Item taken = item; item = new Empty(); return taken; } @Override public String toString() { String result = "At that location is a chest. You open it to find:\n"; result += item.toString() + "\n"; return result; } } Elf.java package actors; public class Elf extends Origin { @Override public String toString() { return "the Elf"; } } Enemy.java package actors; import location.Location; import stats.AttackStats; import stats.DefenseStats; import stats.GoldStats; import stats.HealthStats; public class Enemy extends Actor{ public Enemy(Location location) { super(location); this.attackStats = new AttackStats(); this.defenseStats = new DefenseStats(); this.healthStats = new HealthStats(); this.goldStats = new GoldStats(); } @Override public String toString() { String result = "At that location is an enemy.\n"; result += "Its " + attackStats.toString() + "\n"; result += "Its " + defenseStats.toString() + "\n"; result += "Its " + healthStats.toString() + "\n"; result += "Its " + goldStats.toString() + "\n"; return result; } } LocationObject.java package actors; import location.Location; public class LocationObject { protected Location location; public LocationObject(Location location) { this.location = location; } public Location getLocation() { return location; } } Nord.java package actors; public class Nord extends Origin { @Override public String toString() { return "the Nord"; } } Nothing.java package actors; import location.Location; public class Nothing extends LocationObject{ public Nothing(Location location) { super(location); } @Override public String toString() { return "At that location is nothing"; } } Origin.java package actors; public class Origin { } Source (behavior) Behavior.java package behavior; public enum Behavior { run, bribe, fight; } BribeBehavior.java package behavior; import java.util.Map; import java.util.Random; import actors.Enemy; import actors.LocationObject; import actors.Nothing; import location.Direction; import location.Location; public class BribeBehavior { private Enemy enemy; private int enemyAmount; private Map map; public BribeBehavior(Enemy enemy, Map map) { this.enemy = enemy; this.map = map; Random random = new Random(); this.enemyAmount = random.nextInt(100) + 1; } public boolean bribing(int amount) { if (amount >= enemyAmount) { Direction dir = Direction.getRandom(); Location old = enemy.getLocation(); enemy.move(dir); System.out.println("Bribe successful! Enemy moves " + dir.toString() + " away from you"); Location next = enemy.getLocation(); map.put(old, new Nothing(old)); map.put(next, enemy); return true; } System.out.println("Bribe failed"); return false; } } FightBehavior.java package behavior; import java.util.Map; import java.util.Random; import actors.Actor; import actors.Character; import actors.Enemy; import actors.LocationObject; import location.Location; public class FightBehavior { private Character character; private Enemy enemy; private Map map; public FightBehavior(Character character, Enemy enemy, Map map) { this.character = character; this.enemy = enemy; this.map = map; } public boolean fighting() { Random random = new Random(); int r = random.nextInt(2); Actor[] order = new Actor[2]; order[r] = character; order[1-r] = enemy; boolean start = true; while (true) { for (int i = 0; i<2; i++) { System.out.println(); if (order[i] instanceof Character) { Character c = (Character)order[i]; Enemy e = (Enemy)order[1-i]; if (start) { start = false; System.out.println(c.getFullName() + " gets to attack first."); } else { System.out.println(c.getFullName() + " gets to attack."); } double rAtt = 0.1 * random.nextInt(11); double rDef = 0.1 * random.nextInt(11); int att = c.getAttack(); int def = e.getDefense(); int damage = (int)((Math.floor(rAtt * att - rDef*def) >0) ? Math.floor(rAtt * att - rDef*def) : 0); System.out.println("Attack: " + att + "*" + String.format("%.1f",rAtt) + " Defense: " + def + "*" + String.format("%.1f",rDef) + " -> attack of " + damage); boolean alive = e.reduceHealth(damage); System.out.println("Enemy health: " + damage + " attack success -> health " + e.getHealth()); if (!alive) { System.out.println("Enemy defeated! " + e.getGold() + " gold collected"); c.addGold(e.getGold()); return true; } } else { Character c = (Character)order[1-i]; Enemy e = (Enemy)order[i]; if (start) { start = false; System.out.println("Enemy gets to attack first."); } else { System.out.println("Enemy gets to attack."); } double rAtt = 0.1 * random.nextInt(11); double rDef = 0.1 * random.nextInt(11); int att = e.getAttack(); int def = c.getDefense(); int damage = (int)((Math.floor(rAtt * att - rDef*def) >0) ? Math.floor(rAtt * att - rDef*def) : 0); System.out.println("Attack: " + att + "*" + String.format("%.1f",rAtt) + " Defense: " + def + "*" + String.format("%.1f",rDef) + " -> attack of " + damage); boolean alive = c.reduceHealth(damage); System.out.println(c.getFullName() + " health: " + damage + " attack success -> health " + c.getHealth()); if (!alive) { System.out.println("You were defeated! Game Over!!!"); return false; } } } } } } RunBehavior.java package behavior; import java.util.Map; import actors.Actor; import actors.Character; import actors.Enemy; import actors.LocationObject; import location.Direction; import location.Location; public class RunBehavior { private Map map; public RunBehavior(Map map) { this.map = map; } public Location running(Character character) { Direction dir = Direction.getRandom(); Location next = character.getLocation().move(dir); if (!map.containsKey(next)) { map.put(next, Actor.generateActor(next)); } if (map.get(next) instanceof Enemy) { System.out.println("Failed to run"); return null; } character.move(dir); return next; } }