import java.io.*; import java.util.*; public class GenericRPG { private String[] villages = {"(1)Town Hall","(2)Hospital","(3)Blacksmith","(4)Magic Store","(5)Inventory","(6)Quit"}; private String[] blacksmithOptions = {"(1)Weapons","(2)Armor"}; private String[] magicStoreOptions= {"(1)Spell Tomes","(2)Potions"}; private String[] hospitalOptions = {"(1)Cure-$1","(2)Leave"}; private String[][] magicStoreSpells = {{"(1)Magic Bolt-$20","Deals 20 damage","Costs 4 mana"},{"(2)Minor Heal-$30","Heals a little based on intell","Costs 10 mana"},{"(3)Stone Skin-$50","Increases resistance towards attacks","Lasts 3 turns","Costs 8 mana"},{"(4)Fireball-$80","Deals damage based on intell","Costs 15 mana"},{"(5)Temper-$100","Increases damage and crit chance","Costs 19 mana"},{"(6)Heal-$150","Heals based on intell","Costs 24 mana"},{"(7)Blizzard-$200","Deals damage based on intell","20% Freeze","Costs 30 mana"},{"(8)Poison-$300","Deals damage per turn based on enemy max HP","Lasts 5 turns","Costs 35 mana"},{"(9)Full Heal-$500","Full heals","Costs 77 mana"},{"(10)Unholy-$666","Oh my...","Costs 100 mana"}}; private String[][] magicStorePotions = {{"(1)Minor Healing Potion-$3","Heals 20 hit points"},{"(2)Healing Potion-$15","Heals 50 hit points"},{"(3)Major Healing Potion-$40","Heals 200 hit points"},{"(4)Minor Mana Potion-$2","Heals 10 mana"},{"(5)Mana Potion-$10","Heals 40 mana"},{"(6)Major Mana Potion-$25","Heals 100 mana"},{"(7)Stamina Potion-$20","Recovers 40 ability power"},{"(8)Elixir-$100","Heals 300 HP, 200 MP, 100 AP"}}; private String[][] swordList = {{"(1)Short Sword-$15","3-6 Damage","2% Crit","85% Accuracy"},{"(2)Sabre-$50","4-9 Damage","%15 Crit","95% Accuracy"},{"(3)Long Sword-$60","11-18 Damage","10% Crit","75% Accuracy"},{"(4)Scimitar-$100","13-20 Damage","20% Crit","85% Accuracy"}}; private String[][] armorList = {{"(1)Leather Armor-$15","5 Armor","10% Evasion"},{"(2)Copper Cuirass-$40","12 Armor","2% Evasion"},{"(3)Iron Suit-$80","20 Armor","20% Evasion"},{"(4)Chainmail-$110","15 Armor","25% Evasion"}}; private String[] fightOptions = {"(1)Attack","(2)Abilties","(3)Spells","(4)Items"}; private Enemy bounty; private int bountyNumber; private int bountyKilled; private boolean quest = false; private Random r = new Random(); private Weapons Dict = new Weapons("Short Sword"); private Scanner sc = new Scanner(System.in); private Fence f = new Fence(); private Hero h; private ArrayList<String> en = new ArrayList<String>(); private String noGold = "You do not have enough gold"; private String purchase = "You have purchased %s!"; public GenericRPG(Hero hero){ h=hero; loadWords("enemynames.txt"); } private void loadWords(String filename) { en = new ArrayList<String>(); try { File f = new File(filename); Scanner sc1 = new Scanner(f); while (sc1.hasNext()) { String s =sc1.nextLine(); en.add(s); } } catch (FileNotFoundException e) { System.out.println(e); System.exit(0); } } public void village(){ System.out.println(" ~ ~~ __\n _T .,,. ~--~ ^^\n ^^ // \\ ~\n ][O] ^^ ,-~ ~\n /''-I_I _II____\n__/_ / \\ ______/ '' /'\\_,__\n | II--'''' \\,--:--..,_/,.-{ },\n; '/__\\,.--';| |[] .-.| O{ _ }\n:' | | [] -| ''--:.;[,.'\\,/\n' |[]|,.--'' '', ''-,. |\n .. ..-'' ; ''. '"); System.out.println("Where do you want to go "+h.getName() +"?"); System.out.println(f.multiFence(2,3,20,4,villages)); Scanner sc = new Scanner(System.in); String whereTo = sc.nextLine(); if (whereTo.equals("1")) townHall(); else if (whereTo.equals("2")) hospital(); else if (whereTo.equals("3")) blacksmith(); else if (whereTo.equals("4")) magicStore(); else if (whereTo.equals("5")) checkInventory(); else if (whereTo.equals("6")) System.exit(0); else{ System.out.println("Please try again"); village(); } } public void townHall(){ System.out.println(" +\n /_\\\n ,%%%______|O|\n %%%/_________\\\n `%%| /\\[][][]|%\n ___||_||______|%\n / \\\n"); if (!quest){ int ene = r.nextInt(14);//(int)(Math.random()*en.size()); quest = true; bounty = new Enemy(en.get(ene),h); bountyNumber = (r.nextInt(4)+2); bountyKilled=0; } System.out.println("I have a quest for you! Slay "+bountyNumber+" "+plural(bounty.getName())); System.out.println(f.singleFence(50,3,"(1)Let's Go! (2)Train (3)Leave")); String townHallInput=sc.nextLine(); if (townHallInput.equals("1")) toQuest(); else if(townHallInput.equals("2")) train(); else if (townHallInput.equals("3")) village(); else townHall(); } public void magicStore(){ System.out.println(" , _\n /| | |\n _/_\\_ >_<\n .-\\-/. |\n / | | \\_ |\n \\ \\| |\\__(/\n /(`---') |\n / / \\ |\n _.' \\'-' / |\n `----'`=-=' '\n"); System.out.println("Gold: " + h.getGold()); System.out.println("Come have a look"); System.out.println(f.multiFence(2,1,30,2,magicStoreOptions)); System.out.println("(3)Leave"); String magicStoreInput1 = sc.nextLine(); if (magicStoreInput1.equals("1")){ magicStoreSpells(); } else if (magicStoreInput1.equals("2")){ magicStorePotions(); } else if (magicStoreInput1.equals("3")) village(); else magicStore(); } public void magicStoreSpells(){ System.out.println(f.listFence(50,magicStoreSpells)); System.out.println("(11)Back (12)Leave"); System.out.println("Gold: " + h.getGold()); String magicStoreInput2 = sc.nextLine(); if (magicStoreInput2.equals("11")) magicStore(); else if (magicStoreInput2.equals("12")) village(); else magicStoreSpells(); } public void magicStorePotions(){ System.out.println(f.listFence(50,magicStorePotions)); System.out.println("(9)Back (10)Leave"); System.out.println("Gold: " + h.getGold()); String magicStoreInput2 = sc.nextLine(); String[] ops = {"1","2","3","4","5","6","7","8"}; Store(ops,magicStoreInput2,magicStorePotions,5); if (magicStoreInput2.equals("9")) magicStore(); else if (magicStoreInput2.equals("10")) village(); else magicStorePotions(); } public void blacksmith(){ System.out.println(" '\n , \n ' \n ' :=<]\n ' *__ /\n ( (__/ e\n ' ) ('J) /\n ')(' )))____/\n ( ) )') | |\n ( /(( ) \\____m=====\\\n )')(( ) ) +()+ (')\n|E -_-_-_-_-|| ++vv++ ======\n|J-_-_-_-_-_|| +++++++ \\/\n|M-_-_-_---_|| ++++++++ /\\\n|9-_-_-_-_-_|| // || / \\\n|6-_-_-_---_|| (__D(__D / \\\n============== "); System.out.println("Gold: " + h.getGold()); System.out.println("Let's me see what I have"); System.out.println(f.multiFence(2,1,20,2,blacksmithOptions)); System.out.println("(3)Leave"); String blacksmithInput = sc.nextLine(); if (blacksmithInput.equals("1")) blacksmithWeapons(); else if (blacksmithInput.equals("2")) blacksmithArmor(); else if (blacksmithInput.equals("3")) village(); else blacksmith(); } public void blacksmithWeapons(){ System.out.println(f.listFence(50,swordList)); System.out.println("(5)Back (6)Leave"); System.out.println("Gold: " + h.getGold()); String blacksmithInput1 = sc.nextLine(); String[] ops = {"1","2","3","4"}; Store(ops,blacksmithInput1,swordList,0); if (blacksmithInput1.equals("5")) blacksmith(); else if (blacksmithInput1.equals("6")) village(); else blacksmithWeapons(); } public void blacksmithArmor(){ System.out.println(f.listFence(50,armorList)); System.out.println("(5)Back (6)Leave"); System.out.println("Gold: " + h.getGold()); String blacksmithInput1 = sc.nextLine(); String[] ops = {"1","2","3","4"}; Store(ops,blacksmithInput1,armorList,1); if (blacksmithInput1.equals("5")) blacksmith(); else if (blacksmithInput1.equals("6")) village(); else blacksmithArmor(); } public void hospital(){ System.out.println(" _____ \n ,\\_+_/,\n ,((''')),\n ,(|*_*|),\n �; = ;�\n __) (__\n / \\_/ \\\n /_(_ : _)_\\\n | |)___( \\ \\\n | / \\/ /\n"); System.out.println("Gold: " + h.getGold()); System.out.println("How can I help you?"); System.out.println(f.multiFence(2,1,20,2,hospitalOptions)); String hospitalInput = sc.nextLine(); if (hospitalInput.equals("1")){ if (h.loseGold(1)) System.out.println("I'm sorry. Cash is required"); else{ h.fullHeal(); System.out.println("Feel Better!"); } village(); } else if (hospitalInput.equals("2")) village(); else hospital(); } public void checkInventory(){ int hammerspace = h.getEquipment().size(); int hammerspaceItems = h.getInventory().size(); int hammerspace2 = 3; int hammerspace3 = 2; String[][] EquipmentA = new String[hammerspace][hammerspace2]; String[][] InventoryA = new String[hammerspaceItems][hammerspace3]; String[] EquipmentB = new String[hammerspace]; String[] InventoryB = new String[hammerspaceItems]; for (int i = 0; i <hammerspace;i++){ EquipmentA[i] = h.getEquipment().get(i).getDescription(); EquipmentB[i]=h.getEquipment().get(i).getEquipName(); } for (int i = 0; i <hammerspaceItems;i++){ InventoryA[i] = h.getInventory().get(i).getDescription(); InventoryB[i] = h.getInventory().get(i).getName(); } System.out.println(f.singleFence(75,3,"Name:"+h.getName()+" "+h.getHP()+"/"+h.getMaxHP()+"HP "+ h.getMP()+"/"+h.getMaxMP()+"MP "+ h.getAP()+"/"+h.getMaxAP()+"AP "+ "Level:" + h.getLevel()+" Gold:"+h.getGold()+" Exp:"+h.getXP())); System.out.println(f.singleFence(70,3,"Equipped Weapon: "+h.getEW()+" Equipped Armor: "+h.getEA())); System.out.println(f.listFence(40,EquipmentA)); System.out.println(f.listFence(40,InventoryA)); System.out.println("Type in 'Close' to close your magical bag"); System.out.print("Type in the name of a weapon or armor to equip it: "); String inventoryInput = sc.nextLine(); if (Arrays.asList(EquipmentB).contains(inventoryInput)){ if (Arrays.asList(Dict.getAll()).contains(inventoryInput)){ h.toEquipW(inventoryInput); }else{ h.toEquipA(inventoryInput); } checkInventory(); } else if (inventoryInput.equals("Close") || inventoryInput.equals("close")) village(); else checkInventory(); } public String plural(String s){ if (s.substring(s.length()-1).equals("s")) return s.substring(0,s.length())+"es"; else if (s.substring(s.length()-1).equals("y")) return s.substring(0,s.length()-1)+"ies"; else return s+"s"; } public void Store(String[] i,String j,String[][]k,int l){ if (Arrays.asList(i).contains(j)){ int inputTrue= Integer.parseInt(j); String thingName = k[inputTrue - 1][0]; int dollarSign = thingName.indexOf("$"); int start = thingName.indexOf(")"); int end = thingName.indexOf("-"); String priceS= thingName.substring(dollarSign + 1); int price = Integer.parseInt(priceS); String thingTrueName= thingName.substring(start + 1,end); if (h.loseGold(price)) System.out.println(noGold); if (l == 0){ h.toBuyW(thingTrueName); System.out.println("You have bought a " + thingTrueName); } else if (l == 1){ h.toBuyA(thingTrueName); System.out.println("You have bought a " + thingTrueName + "!"); } else { h.toItem(thingTrueName); System.out.println("You have bought a " + thingTrueName + "!"); } } } public void toQuest(){ } public void train(){ Enemy v = new Enemy(bounty.getName(),h); while (h.getHP()>0 && v.getHP()>0){ System.out.println(f.singleFence(50,3,"Name:"+v.getName()+" "+v.getHP()+"/"+v.getMaxHP()+"HP "+ v.getMP()+"/"+v.getMaxMP()+"MP")); System.out.println(bounty.getPortrait()); System.out.println(f.singleFence(75,3,"Name:"+h.getName()+" "+h.getHP()+"/"+h.getMaxHP()+"HP "+ h.getMP()+"/"+h.getMaxMP()+"MP "+ h.getAP()+"/"+h.getMaxAP()+"AP "+ "Level:" + h.getLevel()+" Gold:"+h.getGold()+" Exp:"+h.getXP())); System.out.println(f.multiFence(2,2,20,2,fightOptions)); String fightInput = sc.nextLine(); if (fightInput.equals("1")){ if (h.getDex()>=v.getDex()){ h.attack(v); v.attack(h); } else{ v.attack(h); h.attack(v); } } } } }