From fc8ece4b152e5b345d2de576233e1e28179fc556 Mon Sep 17 00:00:00 2001 From: "MIMIRSWELL\\Elliot" Date: Sat, 27 Apr 2019 16:05:02 -0700 Subject: [PATCH 1/2] Added enums for materials and constructables. This allows constructables to contain costs and quantity themselves for easier adding and maintaining. --- .../com/samgauck/CityManagement/Economy.java | 42 ++++++++-- .../CityManagement/Enums/Constructable.java | 84 +++++++++++++++++++ .../CityManagement/Enums/Material.java | 39 +++++++++ .../com/samgauck/CityManagement/Main.java | 4 +- 4 files changed, 160 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/samgauck/CityManagement/Enums/Constructable.java create mode 100644 src/main/java/com/samgauck/CityManagement/Enums/Material.java diff --git a/src/main/java/com/samgauck/CityManagement/Economy.java b/src/main/java/com/samgauck/CityManagement/Economy.java index 788b786..2c74bee 100644 --- a/src/main/java/com/samgauck/CityManagement/Economy.java +++ b/src/main/java/com/samgauck/CityManagement/Economy.java @@ -2,6 +2,7 @@ import java.util.*; import com.gauck.sam.Utilities.*; +import com.samgauck.CityManagement.Enums.*; /** * A singleton class that represents the global economy in the game. @@ -12,7 +13,7 @@ public class Economy { */ private Economy() { items.putAll(Utilities.generateMap(itemsList, pricesList)); - constructables.putAll(Utilities.generateMap(constructablesList, requirementsList)); + //constructables.putAll(Utilities.generateMap(constructablesList, requirementsList)); //No Longer needed??? } /** @@ -49,23 +50,31 @@ public void addCity(City c) { */ private Map items = new HashMap<>(); - private Map constructables = new HashMap<>(); + //private Map constructables = new HashMap<>(); /** * The list of items. */ private static ArrayList itemsList = new ArrayList<>(Arrays.asList("food", "wood", "stone", "iron", "steel", "oil", "coal", "uranium", "water", "carbon")); - private static ArrayList constructablesList = new ArrayList<>(Arrays.asList("steel", "city")); //TODO: Fill (& requirementsList [64]) + //private static ArrayList constructablesList = new ArrayList<>(Arrays.asList("steel", "city")); //TODO: Fill (& requirementsList [64]) /** * The list of prices. */ private static ArrayList pricesList = new ArrayList<>(Arrays.asList(5, 1, 2, 5, 10, 10, 10, 10, 5, 5)); - private static ArrayList requirementsList = new ArrayList<>(Arrays.asList( +/* private static ArrayList requirementsList = new ArrayList<>(Arrays.asList( new Resources(0,0,0,1,0,0,1,0,0,0),//Steel new Resources(0,0,0,0,0,0,0,0,0,0)//City - )); + ));*/ + + /*private static Map requirementsList = new HashMap() {{ + put("steel", + new Resources(0, 0, 0, 1, 0, 0, 1, 0, 0, 0));//Steel + put("city", + new Resources(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));//City + }}; +*/ /** * Get the list of items. @@ -77,7 +86,12 @@ public static ArrayList getItems() { } public static ArrayList getConstructables() { - return constructablesList; + ArrayList constructables = new ArrayList<>(); + for (Constructable constructable : Constructable.values()) + { + constructables.add(constructable.getName()); + } + return constructables; //constructablesList; } /** @@ -91,7 +105,21 @@ public int getPrice(String item) { } public Resources getRequirements(String constructable) { - return constructables.get(constructable); + + Resources constructionResource = new Resources(); + + Constructable mat = Constructable.fromString(constructable); + + for (int i = 0; i < mat.getAmountNeeded().size() && i < mat.getMaterialsNeeded().size(); i++) + { + constructionResource.setItem(mat.getMaterialsNeeded().get(i).valueOf(), mat.getAmountNeeded().get(i)); + } + return constructionResource; + } + + public int getPerSet(String constructable) + { + return Constructable.fromString(constructable).getQtyPerOrder(); } /** * Sets all prices. Should only be used for loading saves. diff --git a/src/main/java/com/samgauck/CityManagement/Enums/Constructable.java b/src/main/java/com/samgauck/CityManagement/Enums/Constructable.java new file mode 100644 index 0000000..7911cb2 --- /dev/null +++ b/src/main/java/com/samgauck/CityManagement/Enums/Constructable.java @@ -0,0 +1,84 @@ +package com.samgauck.CityManagement.Enums; + +import java.util.ArrayList; +import java.util.Arrays; + +public enum Constructable +{ + //Format: NAME(String name, + // ArrayList of Material Types need per order using Arrays.asList, + // ArrayList of Integers for qty needed per order using Arrays.asList, + // cost per order + // total amount produced per order + STEEL("steel", + new ArrayList(Arrays.asList(Material.IRON, Material.CARBON)), + new ArrayList(Arrays.asList(19, 1)), + 1, + 19); + + private ArrayList needed = new ArrayList<>(); + private int qtyPerOrder = 0; + private int price = 0; + private ArrayList mats = new ArrayList<>(); + String materialName = ""; + + private Constructable(String name, ArrayList matsList, ArrayList needed, int price, int qtyPerOrder) + { + //TODO change to add a Resource rather than 2 arrays + for (int i = 0; i < matsList.size() && i < needed.size(); i++) + { + mats.add(matsList.get(i)); + this.needed.add(needed.get(i)); + } + this.materialName = name; + this.price = price; + this.qtyPerOrder = qtyPerOrder; + } + + public String getName() + { + return materialName; + } + + public static Constructable fromString(String name) + { + for (Constructable mat : Constructable.values()) + { + if (mat.materialName.equalsIgnoreCase(name)) { + return mat; + } + } + + return null; + } + + public static ArrayList getMaterialsNeeded(Constructable name) + { + return name.mats; + } + + public ArrayList getMaterialsNeeded() + { + return mats; + } + + public static ArrayList getAmountNeeded(Constructable name) + { + return name.needed; + } + + public ArrayList getAmountNeeded() + { + return needed; + } + + public int getPrice() + { + return price; + } + + public int getQtyPerOrder() + { + return qtyPerOrder; + } +}; \ No newline at end of file diff --git a/src/main/java/com/samgauck/CityManagement/Enums/Material.java b/src/main/java/com/samgauck/CityManagement/Enums/Material.java new file mode 100644 index 0000000..52757aa --- /dev/null +++ b/src/main/java/com/samgauck/CityManagement/Enums/Material.java @@ -0,0 +1,39 @@ +package com.samgauck.CityManagement.Enums; + +public enum Material { + MONEY("money"), + FOOD("food"), + WOOD("wood"), + STONE("stone"), + IRON("iron"), + OIL("oil"), + COAL("coal"), + URANIUM("uranium"), + WATER("water"), + CARBON("carbon"); + + private String name = ""; + + private Material(String name) + { + this.name = name; + } + + public String valueOf() + { + return name; + } + + public static Material fromString(String name) + { + for (Material mat : Material.values()) + { + if (mat.name == name) + { + return mat; + } + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/samgauck/CityManagement/Main.java b/src/main/java/com/samgauck/CityManagement/Main.java index 9543505..95f177d 100644 --- a/src/main/java/com/samgauck/CityManagement/Main.java +++ b/src/main/java/com/samgauck/CityManagement/Main.java @@ -190,8 +190,8 @@ private static void start() { for (int i = 0; i < 50; i++) { System.out.println(); } - System.out.print("Would you like to load a save? (Y/N)"); - input = s.next(); + System.out.print("Would you like to load a save? (Y/N)"); + input = s.nextLine(); if (input.equalsIgnoreCase("y")) { System.out.println("Enter a save code:"); s.nextLine(); From 17b43c467dfd3b59198ead0bf58de04756658f92 Mon Sep 17 00:00:00 2001 From: "MIMIRSWELL\\Elliot" Date: Sun, 28 Apr 2019 10:48:56 -0700 Subject: [PATCH 2/2] Added enums for materials and constructables, and changed set items to pull quantity per oder times amount ordered. This allows constructables to contain costs and quantity themselves for easier adding and maintaining. --- src/main/java/com/samgauck/CityManagement/Command.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/samgauck/CityManagement/Command.java b/src/main/java/com/samgauck/CityManagement/Command.java index ea8dd01..29586dd 100644 --- a/src/main/java/com/samgauck/CityManagement/Command.java +++ b/src/main/java/com/samgauck/CityManagement/Command.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import com.gauck.sam.Utilities.*; +import com.samgauck.CityManagement.Enums.Constructable; /** * A singleton class that manages all commands. @@ -269,7 +270,7 @@ private void construct(ArrayList followingWords) { if (constructable.equalsIgnoreCase("city")) { //TODO: Add city } else if (items.contains(constructable)) { - Main.getCity(0).resources.setItem(constructable, Main.getCity(0).resources.getItem(constructable) + amount); + Main.getCity(0).resources.setItem(constructable, Main.getCity(0).resources.getItem(constructable) + (Constructable.fromString(constructable).getQtyPerOrder() * amount)); } System.out.println("Construction completed"); System.out.println(Main.getCity(0).resources.toString());