From 700053dd9893ebbe321f788afc3e5b505c81a8a3 Mon Sep 17 00:00:00 2001 From: LindAndersen Date: Tue, 10 Oct 2023 16:24:21 +0200 Subject: [PATCH 01/14] New Makefile For furture use we would be able to use "make all" to compile all files and store them under "class_files" and "make run" to compile all files and run "java Game" --- Makefile | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4daba56 --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +# Define variables +SRC_DIR = woz +OUT_DIR = class_files +SRCS := $(wildcard $(SRC_DIR)/*.java) +CLASSES := $(patsubst $(SRC_DIR)/%.java,$(OUT_DIR)/%.class,$(SRCS)) +JAVAC = javac +MKDIR_P = mkdir -p +MAIN_CLASS = woz.Game + +# Default target to compile all .java files +all: $(OUT_DIR) $(CLASSES) + +# Create the output directory if it doesn't exist +$(OUT_DIR): + $(MKDIR_P) $(OUT_DIR) + +# Compile .java files into .class files +$(OUT_DIR)/%.class: $(SRC_DIR)/%.java + $(JAVAC) -d $(OUT_DIR) $< + +# Run the Java program +run: all + java -cp $(OUT_DIR) $(MAIN_CLASS) + +# Clean target to remove compiled .class files +clean: + rm -rf $(OUT_DIR) + +.PHONY: all run clean From 31d0a2d948d75105c324fd9ecbcb121b8f6bca53 Mon Sep 17 00:00:00 2001 From: Asta Knudsen Date: Sun, 15 Oct 2023 17:50:24 +0200 Subject: [PATCH 02/14] =?UTF-8?q?Spiller=20og=20bev=C3=A6gelse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Player-class oprettet med point, level og penge med mulighed for at tilføje point og penge og at fjerne penge (ved køb) Locations-class oprettet til handlingerne i de forskellige rum - ikke færdigt, men jeg har ikke rum-interaktion:) ting er koblet på / redigeret i hhv Game, Space, Context og World-klasserne for at det hænger sammen. dog er point ikke koblet på handlinger, da der mangler noget kontekst. Der er også oprettet en metode til at tjekke om "dagen er omme" - så der kommer en slags tidslinje/tidsfornemmelse og sådan at man måske skal prioritere valg. det kan bare slettes hvis ikke det viser sig at være smart. mine ændringer i eksisterende klasser fra WoZ er markeret med enten kommentarer eller er indenfor -------------, og Locations og Player er nye. --- Context.java | 50 +++++++++++++++++++++++++++++++++++++ Game.java | 50 +++++++++++++++++++++++++++++++++++++ Locations.java | 46 ++++++++++++++++++++++++++++++++++ Player.java | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ Space.java | 57 ++++++++++++++++++++++++++++++++++++++++++ World.java | 40 ++++++++++++++++++++++++++++++ 6 files changed, 310 insertions(+) create mode 100644 Context.java create mode 100644 Game.java create mode 100644 Locations.java create mode 100644 Player.java create mode 100644 Space.java create mode 100644 World.java diff --git a/Context.java b/Context.java new file mode 100644 index 0000000..defc23c --- /dev/null +++ b/Context.java @@ -0,0 +1,50 @@ +/* Context class to hold all context relevant to a session. + */ + +class Context { + Space current; + boolean done = false; + + //tilføjet--------------------------------------------------------------------------------- + int day = 1; + + + public boolean isDayDone(){ + if(Locations.shopVisited && Locations.recyclingVisited && Locations.trashParkCollected && Locations.trashBymidteCollected && Locations.trashHospitalCollected){ + System.out.println("all done for today"); + return true; + + }else{ + return false; + } + } + //------------------------------------------------------------------------------------------ + + Context (Space node) { + current = node; + } + + public Space getCurrent() { + return current; + } + + public void transition (String direction) { + Space next = current.followEdge(direction); + if (next==null) { + System.out.println("You are confused, and walk in a circle looking for '"+direction+"'. In the end you give up 😩"); + } else { + current.goodbye(); + current = next; + current.welcome(); + } + } + + public void makeDone () { + done = true; + } + + public boolean isDone () { + return done; + } +} + diff --git a/Game.java b/Game.java new file mode 100644 index 0000000..22e81bf --- /dev/null +++ b/Game.java @@ -0,0 +1,50 @@ +/* Main class for launching the game + */ + +import java.util.Scanner; + +class Game { + static World world = new World(); + static Context context = new Context(world.getEntry()); + static Command fallback = new CommandUnknown(); + static Registry registry = new Registry(context, fallback); + static Scanner scanner = new Scanner(System.in); + //tilføjet - ----------------------------------------------------------------------------------------------------------- + static Player player = new Player(); + //---------------------------------------------------------------------------------------------------------------------- + + private static void initRegistry () { + Command cmdExit = new CommandExit(); + registry.register("exit", cmdExit); + registry.register("quit", cmdExit); + registry.register("bye", cmdExit); + registry.register("go", new CommandGo()); + registry.register("help", new CommandHelp(registry)); + } + + public static void main (String args[]) { + int day = 1; + System.out.println("Welcome to the World of Zuul!"); + + initRegistry(); + context.getCurrent().welcome(); + + //tilføjet start for tests ------------------------------------------------------------------------------------------------------ + player.addPoints(28); + player.levelUp(player.getPoints()); + System.out.println("level: " + player.getLevel() + ", points: " + player.getPoints() + ", money: " + player.getMoney()); + // tilføjet slut ------------------------------------------------------------------------------------------------------ + + while (context.isDone() == false) { + + System.out.print("> "); + String line = scanner.nextLine(); + registry.dispatch(line); + //---------------------------------------------------- test, men dette skal afgøre om dagen skal skifte, nyt skrald skal + //---------------------------------------------------- placeres og nulstille de bolske værdier der afgør om dagen er done + System.out.println("day is done: " + context.isDayDone()); + //---------------------------------------------------- + } + System.out.println("Game Over."); + } +} diff --git a/Locations.java b/Locations.java new file mode 100644 index 0000000..1df5019 --- /dev/null +++ b/Locations.java @@ -0,0 +1,46 @@ +class Locations{ + + static boolean trashParkCollected; + static boolean trashBymidteCollected; + static boolean trashHospitalCollected; + static boolean shopVisited; + static boolean recyclingVisited; + + static void shopNow(){ + System.out.println("du er i butikken nu"); + //her skal der være et udvalg af upgrades til byen, som man kan vælge at købe + /*måske en dictionary med navn på hver upgrade og pris? + og et if/else eller switch-statement, der ved køb af en ting tjekker om spilleren + har råd til det, printer en besked hvis ikke, og ellers opdaterer spilleres penge + efter køb og opdaterer byen afhængigt af køb*/ + + shopVisited = true; + } + + static void collectTrashPark(){ + System.out.println("collecting trash at this park"); //placeholder + trashParkCollected = true; + } + + + static void collectTrashBymidte(){ + System.out.println("collecting trash at bymidte"); //placeholder + trashBymidteCollected = true; + } + + static void collectTrashHospital(){ + System.out.println("collecting trash at this hospital"); //placeholder + trashHospitalCollected = true; + } + + + static void recycle(int amountOfTrash){ + System.out.println("du har afleveret " + amountOfTrash + " stykker affald i dag"); //placeholder + + recyclingVisited = true; + } + + + + +} \ No newline at end of file diff --git a/Player.java b/Player.java new file mode 100644 index 0000000..4b972fe --- /dev/null +++ b/Player.java @@ -0,0 +1,67 @@ +class Player{ + private int level; + private int points; + private int money; + + private final int LEVEL1 = 10; //level 1 når point er mellem 0 og 9 + private final int LEVEL2 = 20; //level 2 når point er mellem 10 og 19 + private final int LEVEL3 = 30; //level 3 når point er mellem 20 og 29 + private final int LEVEL4 = 40; //level 4 når point er mellem 30 og 39 + private final int LEVEL5 = 50; //level 5 når point er mellem 40 og 49 + + public Player(){ + level = 1; + points = 0; + money = 100; + + } + + void addPoints(int amount){ + points += amount; + } + + void addMoney(int amount){ + money += amount; + } + + + void subtractMoney(int amount){ + if((money-amount) < 0){ + System.out.println("Beklager, men du har ikke råd til dette."); + }else{ + money -= amount; + + } + } + + public int getPoints(){ + return points; + } + + public int getMoney(){ + return money; + } + + public int getLevel(){ + return level; + } + + + void levelUp(int points){ + if(points > 0 && points < LEVEL1){ + level = 1; + }else if (points > LEVEL1 && points < LEVEL2){ + level = 2; + }else if (points > LEVEL2 && points < LEVEL3){ + level = 3; + }else if (points > LEVEL3 && points < LEVEL4){ + level = 4; + }else if (points > LEVEL4 && points < LEVEL5){ + level = 5; + } + } + + + + +} \ No newline at end of file diff --git a/Space.java b/Space.java new file mode 100644 index 0000000..a85d26a --- /dev/null +++ b/Space.java @@ -0,0 +1,57 @@ +/* Space class for modeling spaces (rooms, caves, ...) + */ + +import java.util.Set; + +class Space extends Node { + Space (String name) { + super(name); + } + + public void welcome () { + System.out.println("You are now at " + name); + Set exits = edges.keySet(); + System.out.println("Current locations are:"); //ændret "exits" til "locations" - dette skal ændres til dansk tho + for (String exit : exits) { + System.out.println(" - " + exit); + } + //---------------------------------------------------------------------------------------------------------------- + //gør det muligt at interagere med lokationerne - kalder funktioner i Locations-class + switch(name){ + case "Butik": + Locations.shopNow(); + break; + + case "Genbrugsstation": + Locations.recycle(4); + break; + + case "Park": + Locations.collectTrashPark(); + break; + + case "Hospital": + Locations.collectTrashHospital(); + break; + + case "Bymidte": + Locations.collectTrashBymidte(); + break; + + default: System.out.println("cant do anything here buddy"); + + + } + + + //---------------------------------------------------------------------------------------------------------------- + } + + public void goodbye () {//tom metode + } + + @Override + public Space followEdge (String direction) { + return (Space) (super.followEdge(direction)); + } +} diff --git a/World.java b/World.java new file mode 100644 index 0000000..697a2e3 --- /dev/null +++ b/World.java @@ -0,0 +1,40 @@ +/* World class for modeling the entire in-game world + */ + +class World { + Space overview; + + World () { + + //redigeret til at passe til vores lokationer----------------------------------------------------------------- + + Space overview = new Space("Overblik"); + Space park = new Space("Park"); + Space bymidte = new Space("Bymidte"); //bymidte? rådhusplads? + Space hospital = new Space("Hospital"); + Space butik = new Space("Butik"); + Space genbrugsstation = new Space("Genbrugsstation"); + + //sørger for at alle lokationer kan nås fra overview + overview.addEdge("park", park); + overview.addEdge("bymidte", bymidte); + overview.addEdge("hospital", hospital); + overview.addEdge("butik", butik); + overview.addEdge("genbrugsstation", genbrugsstation); + + + //alle lokationer har kun adgang til overblik + park.addEdge("overblik", overview); + bymidte.addEdge("overblik", overview); + hospital.addEdge("overblik", overview); + butik.addEdge("overblik", overview); + genbrugsstation.addEdge("overblik", overview); + + this.overview = overview; + } + + Space getEntry () { + return overview;//redigeret fra "entry" til "overview", da overview fungerer som vores entry + } +} + From 0ed7067715f3f0643c94553116dd49736f1d86d0 Mon Sep 17 00:00:00 2001 From: LindAndersen Date: Mon, 16 Oct 2023 14:42:20 +0200 Subject: [PATCH 03/14] gantt/updated --- "Gantt-projektplanl\303\246gger.xlsx" | Bin 14734 -> 15065 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git "a/Gantt-projektplanl\303\246gger.xlsx" "b/Gantt-projektplanl\303\246gger.xlsx" index 6816c979b8db7cf4c4ac2e83786b6d3fb7aa9c2c..74ddd2d34f62f806060db1c51792506d2d3fb4ad 100644 GIT binary patch delta 7357 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 C_NP$* delta 7133 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 Date: Mon, 16 Oct 2023 23:58:37 +0200 Subject: [PATCH 04/14] City rooms, rooms connected 2 way To do add interaction for each room, somehow expand on main Game loop to allow for a second "wave" of commands after transition to another room --- woz/Game.java | 2 +- woz/Registry.java | 2 +- woz/Space.java | 10 ++++++++-- woz/World.java | 26 +++++++++++++++----------- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/woz/Game.java b/woz/Game.java index 7f58349..68a41c9 100644 --- a/woz/Game.java +++ b/woz/Game.java @@ -20,7 +20,7 @@ private static void initRegistry () { } public static void main (String args[]) { - System.out.println("Welcome to the World of Zuul!"); + System.out.println("Velkommen til din by, her er du borgmester! Gør dit bedste for at tage bæredygtige beslutninger!"); initRegistry(); context.getCurrent().welcome(); diff --git a/woz/Registry.java b/woz/Registry.java index 7118217..b9ae609 100644 --- a/woz/Registry.java +++ b/woz/Registry.java @@ -19,7 +19,7 @@ public void register (String name, Command command) { } public void dispatch (String line) { - String[] elements = line.split(" "); + String[] elements = line.toLowerCase().split(" "); String command = elements[0]; String[] parameters = getParameters(elements); Command handler = getCommand(command); diff --git a/woz/Space.java b/woz/Space.java index fd851dd..eafdc56 100644 --- a/woz/Space.java +++ b/woz/Space.java @@ -7,11 +7,17 @@ class Space extends Node { Space (String name) { super(name); } + + private void roomHandler() { + switch(name) { + + } + } public void welcome () { - System.out.println("You are now at "+name); + System.out.println("Du er nu ved "+name); Set exits = edges.keySet(); - System.out.println("Current exits are:"); + System.out.println("Du kan gå mod:"); for (String exit: exits) { System.out.println(" - "+exit); } diff --git a/woz/World.java b/woz/World.java index 7231668..f9a913d 100644 --- a/woz/World.java +++ b/woz/World.java @@ -5,18 +5,22 @@ class World { Space entry; World () { - Space entry = new Space("Entry"); - Space corridor = new Space("Corridor"); - Space cave = new Space("Cave"); - Space pit = new Space("Darkest Pit"); - Space outside = new Space("Outside"); + Space entry = new Space("borgmesterenshus"); + Space city = new Space("midtbyen"); + Space trash = new Space("losseplads"); + Space park = new Space("park"); + Space pond = new Space("soe"); - entry.addEdge("door", corridor); - corridor.addEdge("door", cave); - cave.addEdge("north", pit); - cave.addEdge("south", outside); - pit.addEdge("door", cave); - outside.addEdge("door", cave); + entry.addEdge(city.name, city); + entry.addEdge(pond.name, pond); + pond.addEdge(entry.name, entry); + pond.addEdge(park.name, park); + park.addEdge(pond.name, pond); + park.addEdge(trash.name, trash); + trash.addEdge(park.name, park); + trash.addEdge(city.name, city); + city.addEdge(trash.name, trash); + city.addEdge(entry.name, entry); this.entry = entry; } From b619caf4e17b1f3ed5ff4e8a467875a335116766 Mon Sep 17 00:00:00 2001 From: LindAndersen Date: Tue, 17 Oct 2023 21:06:48 +0200 Subject: [PATCH 05/14] Added pickup feature --- woz/CommandPickUp.java | 17 +++++++++++++++++ woz/Context.java | 20 ++++++++++++++++++-- woz/Game.java | 10 ++++++++++ woz/Space.java | 12 +++++------- 4 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 woz/CommandPickUp.java diff --git a/woz/CommandPickUp.java b/woz/CommandPickUp.java new file mode 100644 index 0000000..4d2e2b3 --- /dev/null +++ b/woz/CommandPickUp.java @@ -0,0 +1,17 @@ +/* Command for handlign actions in a room + */ + +class CommandPickUp extends BaseCommand implements Command { + CommandPickUp () { + description = "Pick up an item"; + } + + @Override + public void execute (Context context, String command, String[] parameters) { + if (guardEq(parameters, 0)) { + System.out.println("Currently no specific pickup option, just use \"pickup\""); + return; + } + context.roomHandler(); + } +} diff --git a/woz/Context.java b/woz/Context.java index 919cab9..d593159 100644 --- a/woz/Context.java +++ b/woz/Context.java @@ -2,8 +2,10 @@ */ class Context { - Space current; - boolean done = false; + private Space current; + private boolean done = false; + private boolean roomHandled = false; + Context (Space node) { current = node; @@ -12,6 +14,11 @@ class Context { public Space getCurrent() { return current; } + + public void roomHandler() { + System.out.println("item picked up wuhu"); + makeRoomHandled(); + } public void transition (String direction) { Space next = current.followEdge(direction); @@ -21,6 +28,7 @@ public void transition (String direction) { current.goodbye(); current = next; current.welcome(); + current.roomActions(); } } @@ -31,5 +39,13 @@ public void makeDone () { public boolean isDone () { return done; } + + public boolean isRoomHandled() { + return roomHandled; + } + + public void makeRoomHandled() { + roomHandled = true; + } } diff --git a/woz/Game.java b/woz/Game.java index 68a41c9..4ae0c22 100644 --- a/woz/Game.java +++ b/woz/Game.java @@ -15,6 +15,7 @@ private static void initRegistry () { registry.register("exit", cmdExit); registry.register("quit", cmdExit); registry.register("bye", cmdExit); + registry.register("pickup", new CommandPickUp()); registry.register("go", new CommandGo()); registry.register("help", new CommandHelp(registry)); } @@ -24,11 +25,20 @@ public static void main (String args[]) { initRegistry(); context.getCurrent().welcome(); + context.getCurrent().roomActions(); while (context.isDone()==false) { + while (context.isRoomHandled() == false) { + System.out.print("> "); + String line = scanner.nextLine(); + registry.dispatch(line); + } + System.out.print("> "); String line = scanner.nextLine(); registry.dispatch(line); + + } System.out.println("Game Over 😥"); } diff --git a/woz/Space.java b/woz/Space.java index eafdc56..5c9d6c7 100644 --- a/woz/Space.java +++ b/woz/Space.java @@ -8,12 +8,6 @@ class Space extends Node { super(name); } - private void roomHandler() { - switch(name) { - - } - } - public void welcome () { System.out.println("Du er nu ved "+name); Set exits = edges.keySet(); @@ -22,10 +16,14 @@ public void welcome () { System.out.println(" - "+exit); } } + + public void roomActions() { + System.out.println("Rumhandlinger\n - pickup"); + } public void goodbye () { } - + @Override public Space followEdge (String direction) { return (Space) (super.followEdge(direction)); From c26c28307f280b589639cf614142f832cb34ede1 Mon Sep 17 00:00:00 2001 From: LindAndersen Date: Wed, 18 Oct 2023 20:54:25 +0200 Subject: [PATCH 06/14] Added multiple room features w guardEq() status (not implemented) help (now returns description of roomActions) sell buy pickup hint (not implemented) --- "Gantt-projektplanl\303\246gger.xlsx" | Bin 15065 -> 14764 bytes woz/BaseCommand.java | 10 ++++- woz/CommandExit.java | 4 ++ woz/CommandPickUp.java | 17 -------- woz/CommandRoomAction.java | 55 ++++++++++++++++++++++++++ woz/Context.java | 18 ++------- woz/Game.java | 13 +++--- woz/Node.java | 3 +- woz/Space.java | 16 ++++++-- woz/World.java | 52 +++++++++++++++++------- woz/class_files/BaseCommand.class | Bin 473 -> 557 bytes 11 files changed, 127 insertions(+), 61 deletions(-) delete mode 100644 woz/CommandPickUp.java create mode 100644 woz/CommandRoomAction.java diff --git "a/Gantt-projektplanl\303\246gger.xlsx" "b/Gantt-projektplanl\303\246gger.xlsx" index 74ddd2d34f62f806060db1c51792506d2d3fb4ad..06a495b9e29a9c08c62abfe006129d296f71c393 100644 GIT binary patch delta 8843 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 z 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 delta 9099 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 "); - String line = scanner.nextLine(); - registry.dispatch(line); - } - System.out.print("> "); String line = scanner.nextLine(); registry.dispatch(line); diff --git a/woz/Node.java b/woz/Node.java index 27a03c3..864d889 100644 --- a/woz/Node.java +++ b/woz/Node.java @@ -1,8 +1,7 @@ /* Node class for modeling graphs */ -import java.util.HashMap; -import java.util.Map; +import java.util.*; class Node { String name; diff --git a/woz/Space.java b/woz/Space.java index 5c9d6c7..6a64e8e 100644 --- a/woz/Space.java +++ b/woz/Space.java @@ -1,9 +1,11 @@ /* Space class for modeling spaces (rooms, caves, ...) */ -import java.util.Set; +import java.util.*; class Space extends Node { + List commands = new ArrayList(); + Space (String name) { super(name); } @@ -15,13 +17,19 @@ public void welcome () { for (String exit: exits) { System.out.println(" - "+exit); } - } - public void roomActions() { - System.out.println("Rumhandlinger\n - pickup"); + System.out.println("Rumhandlinger"); + for (String command : commands) { + System.out.printf(" - %s%n", command); + } } public void goodbye () { + System.out.println("Here will be some information about the room you just left"); + } + + public void addCommand(String cmdName) { + commands.add(cmdName); } @Override diff --git a/woz/World.java b/woz/World.java index f9a913d..1d0db62 100644 --- a/woz/World.java +++ b/woz/World.java @@ -1,29 +1,51 @@ /* World class for modeling the entire in-game world */ +import java.util.*; class World { Space entry; + List locations = new ArrayList(); World () { - Space entry = new Space("borgmesterenshus"); - Space city = new Space("midtbyen"); - Space trash = new Space("losseplads"); - Space park = new Space("park"); - Space pond = new Space("soe"); + entry = new Space("kontor"); + Space rp = new Space("raedhusplads"); + Space trash = new Space("genbrugsstation"); + Space park = new Space("park"); + Space shop = new Space("butik"); + Space homes = new Space("roekkehuse"); + + Space[] spaces = new Space[] {entry, rp, trash, park, shop, homes}; + locations.addAll(Arrays.asList(spaces)); - entry.addEdge(city.name, city); - entry.addEdge(pond.name, pond); - pond.addEdge(entry.name, entry); - pond.addEdge(park.name, park); - park.addEdge(pond.name, pond); - park.addEdge(trash.name, trash); - trash.addEdge(park.name, park); - trash.addEdge(city.name, city); - city.addEdge(trash.name, trash); - city.addEdge(entry.name, entry); + entry.addEdge(rp.name, rp); + entry.addEdge(shop.name, shop); + shop.addEdge(entry.name, entry); + shop.addEdge(rp.name, rp); + shop.addEdge(park.name, park); + shop.addEdge(trash.name, trash); + trash.addEdge(shop.name, shop); + rp.addEdge(entry.name, entry); + rp.addEdge(shop.name, shop); + rp.addEdge(park.name, park); + park.addEdge(rp.name, rp); + park.addEdge(shop.name, shop); + park.addEdge(homes.name, homes); + homes.addEdge(park.name, park); this.entry = entry; + + for (Space location : locations) { + if (location.name.equals(entry.name)) { + location.addCommand("status"); + } else if (location.name.equals(shop.name)) { + location.addCommand("sell"); + location.addCommand("buy"); + } else { + location.addCommand("pickup"); + location.addCommand("hint"); + } } +} Space getEntry () { return entry; diff --git a/woz/class_files/BaseCommand.class b/woz/class_files/BaseCommand.class index 2fa8e949e18d00f878a69b06aa4c6a78b45df931..63a74b17c74739e107ad64b1172e14c65d63ab3e 100644 GIT binary patch delta 303 zcmcb~yq1OQ)W2Q(7#J8F7$hfh>GN_ja4>MPGjQ=Ra5L~sj4;&VVBlk9;0eu3$xklL zP0cGwO<`mZ)$qwmEKAhSNz6;v4=yRn%uBb{44c?Fqn?9-31}805CgRXNfsbxW#9*j z2mo1HKv|GHm)3R$MlJ2F4D1_$JVpjVAj!wT3?$isI)DxULXbW-s6K6=F0h$keL}og zG;#wq@-XmnG4KKzLJYznos$b0WxYXWgUn$7xJMCXQSvlx=8@3aZI$k{tIt1%rrS zF{7F+3neBsb|X%+S=oO=_@4cMd!rSoQ*%^85|C)XE1-Z-c1DlW{sFc;L7HcJ<4 Date: Wed, 18 Oct 2023 21:36:04 +0200 Subject: [PATCH 07/14] Only access commands in room and fixes to room actions Added more logic to what commands you can execute where (might wanna redo it) --- woz/CommandRoomAction.java | 25 +++++++++++++++++++++++++ woz/Registry.java | 9 ++++++++- woz/Space.java | 9 ++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/woz/CommandRoomAction.java b/woz/CommandRoomAction.java index 1e9f53d..1539005 100644 --- a/woz/CommandRoomAction.java +++ b/woz/CommandRoomAction.java @@ -27,6 +27,23 @@ public void hint(Context context, String[] parameters) { System.out.println("Congratulations, you have recieved a hint"); } + public void buy(Context context, String[] parameters) { + if (guardEq(parameters, 2)) { + context.youStupid(); + return; + } + System.out.printf("%nDu har købt %s x %s%n", parameters[1], parameters[0]); + + } + + public void sell(Context context, String[] parameters) { + if (guardEq(parameters, 1)) { + context.youStupid(); + } + System.out.printf("%nDu har solgt %s bunker skrald%n", parameters[0]); + } + + public void default_(Context context, String command, String[] parameters) { if (guardEq(parameters, 0)) { context.youStupid(); @@ -46,6 +63,14 @@ public void execute (Context context, String command, String[] parameters) { case "hint" : hint(context, parameters); break; + + case "sell" : + sell(context, parameters); + break; + + case "buy" : + buy(context, parameters); + break; default : default_(context, command, parameters); diff --git a/woz/Registry.java b/woz/Registry.java index b9ae609..7496ea5 100644 --- a/woz/Registry.java +++ b/woz/Registry.java @@ -8,6 +8,7 @@ class Registry { Context context; Command fallback; Map commands = new HashMap(); + String[] baseCommands = {"exit", "bye", "quit", "help", "go"}; Registry (Context context, Command fallback) { this.context = context; @@ -23,7 +24,7 @@ public void dispatch (String line) { String command = elements[0]; String[] parameters = getParameters(elements); Command handler = getCommand(command); - (handler==null ? fallback : handler).execute(context, command, parameters); + ((context.getCurrent().isCommandPossible(command) && handler != null) || isInBaseCommands(command) ? handler : fallback).execute(context, command, parameters); } public Command getCommand (String commandName) { @@ -33,6 +34,12 @@ public Command getCommand (String commandName) { public String[] getCommandNames () { return commands.keySet().toArray(new String[0]); } + + public boolean isInBaseCommands(String cmd) { + for (String command : baseCommands) { + if (cmd.equals(command)) {return true;} + } return false; + } // helpers diff --git a/woz/Space.java b/woz/Space.java index 6a64e8e..2065ddd 100644 --- a/woz/Space.java +++ b/woz/Space.java @@ -28,10 +28,17 @@ public void goodbye () { System.out.println("Here will be some information about the room you just left"); } - public void addCommand(String cmdName) { + public void addCommand(String cmdName) { commands.add(cmdName); } + public boolean isCommandPossible(String cmdName) { + for (String command : commands) { + if (command.equals(cmdName)) {return true;} + } + return false; + } + @Override public Space followEdge (String direction) { return (Space) (super.followEdge(direction)); From 5c6396aff1984f0566a66b06c59a1c57c241fd9c Mon Sep 17 00:00:00 2001 From: LindAndersen Date: Thu, 19 Oct 2023 21:29:57 +0200 Subject: [PATCH 08/14] Small dump --- woz/CommandRoomAction.java | 6 ++++-- woz/InteractableSpace.java | 5 +++++ woz/Space.java | 12 ++++++++++-- woz/World.java | 5 +++-- 4 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 woz/InteractableSpace.java diff --git a/woz/CommandRoomAction.java b/woz/CommandRoomAction.java index 1539005..c3d13d4 100644 --- a/woz/CommandRoomAction.java +++ b/woz/CommandRoomAction.java @@ -9,8 +9,7 @@ class CommandRoomAction extends BaseCommand implements Command { public void pickup(Context context, String[] parameters) { if (!guardEq(parameters, 1)) { String amount = parameters[0]; - System.out.printf("%nDu har samlet %s bunker skrald op", amount); - return; + System.out.printf("%nDu har samlet %s bunker skrald op%n", amount); } else if (!guardEq(parameters, 0)) { System.out.println("Du har samlet alt skrald op"); } else { @@ -39,6 +38,7 @@ public void buy(Context context, String[] parameters) { public void sell(Context context, String[] parameters) { if (guardEq(parameters, 1)) { context.youStupid(); + return; } System.out.printf("%nDu har solgt %s bunker skrald%n", parameters[0]); } @@ -76,5 +76,7 @@ public void execute (Context context, String command, String[] parameters) { default_(context, command, parameters); } + + context.getCurrent().update(); } } diff --git a/woz/InteractableSpace.java b/woz/InteractableSpace.java new file mode 100644 index 0000000..3c25616 --- /dev/null +++ b/woz/InteractableSpace.java @@ -0,0 +1,5 @@ +public class InteractableSpace { + InteractableSpace(String name) { + String this.name = name; + } +} \ No newline at end of file diff --git a/woz/Space.java b/woz/Space.java index 2065ddd..6512218 100644 --- a/woz/Space.java +++ b/woz/Space.java @@ -8,10 +8,18 @@ class Space extends Node { Space (String name) { super(name); + SpaceBuilder sp = new SpaceBuilder(name); + } + public void welcome () { - System.out.println("Du er nu ved "+name); + System.out.println("\nDu er nu ved "+name); + update(); + } + + public void update() { + System.out.println("-------------------------------------------"); Set exits = edges.keySet(); System.out.println("Du kan gå mod:"); for (String exit: exits) { @@ -25,7 +33,7 @@ public void welcome () { } public void goodbye () { - System.out.println("Here will be some information about the room you just left"); + System.out.printf("%nHere will be some information about %s (the room you just left)", name); } public void addCommand(String cmdName) { diff --git a/woz/World.java b/woz/World.java index 1d0db62..4725a83 100644 --- a/woz/World.java +++ b/woz/World.java @@ -40,11 +40,12 @@ class World { } else if (location.name.equals(shop.name)) { location.addCommand("sell"); location.addCommand("buy"); - } else { + } location.addCommand("pickup"); location.addCommand("hint"); - } } + + //Build spaces with SpaceBuilder() } Space getEntry () { From caa0acb789d9200cea6f10d8c4ff78ec0efd1ba9 Mon Sep 17 00:00:00 2001 From: Asta Knudsen Date: Thu, 19 Oct 2023 21:58:21 +0200 Subject: [PATCH 09/14] =?UTF-8?q?=C3=A6ndringer=20og=20tilf=C3=B8jelser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit har flyttet det fra Locations til Space, lavet små ændringer og tilføjelser samt kommentarer på forskellige ting. har gjort det muligt at resette dagen/gå til næste dag, som nulstiller mængden af affald samt tæller op på antal dage. --- woz/CommandResetDay.java | 11 +++ woz/CommandRoomActions.java | 35 ++++++++ woz/Context.java | 45 ++++++++++- woz/Game.java | 20 ++++- woz/Player.java | 71 +++++++++++++++++ woz/Space.java | 154 ++++++++++++++++++++++++++++++++++-- woz/World.java | 52 ++++++++---- 7 files changed, 363 insertions(+), 25 deletions(-) create mode 100644 woz/CommandResetDay.java create mode 100644 woz/CommandRoomActions.java create mode 100644 woz/Player.java diff --git a/woz/CommandResetDay.java b/woz/CommandResetDay.java new file mode 100644 index 0000000..c3322c8 --- /dev/null +++ b/woz/CommandResetDay.java @@ -0,0 +1,11 @@ +class CommandResetDay extends BaseCommand implements Command { + + public CommandResetDay(){ + description = "Reset the day"; + } + @Override + public void execute (Context context, String command, String parameters[]) { + System.out.println("Resetting the day"); + Game.context.resetDay(); + } +} \ No newline at end of file diff --git a/woz/CommandRoomActions.java b/woz/CommandRoomActions.java new file mode 100644 index 0000000..796d9ac --- /dev/null +++ b/woz/CommandRoomActions.java @@ -0,0 +1,35 @@ +class CommandRoomActions extends BaseCommand implements Command { + + public CommandRoomActions(){ + description = "Acts accordingly dependent on type of room"; + } + + + + @Override + public void execute (Context context, String command, String parameters[]) { + + //her afgøres hvor man befinder sig, og hvad den enkelt kommando gør i de forskellige sammenhænge + //den skal måske kalde på forskellige handlinger? + switch(context.current.getName()){ + + case "Park": + System.out.println("hey you are in da park B)"); + break; + case "Bymidte": + System.out.println("hey you are in da bymidte B)"); + break; + case "Hospital": + System.out.println("hey you are in da hospital B)"); + break; + case "Genbrugsstation": + System.out.println("hey you are in da genbrugsstation B)"); + break; + case "Butik": + System.out.println("hey you are in da butik B)"); + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/woz/Context.java b/woz/Context.java index 919cab9..2af5784 100644 --- a/woz/Context.java +++ b/woz/Context.java @@ -4,10 +4,51 @@ class Context { Space current; boolean done = false; - + + //tilføjet--------------------------------------------------------------------------------- + private int day = 1; + //----------------------------------------------------------------------------------------- + Context (Space node) { current = node; } + + //--------------------------------------------------------------------------------------------- + //resetter generated trash, markeringen på om rummet er håndteret og sætter lokation til kontor + + void resetDay(){ + World.park.setGeneratedTrash((int)(Math.random()*(15 - 1) + 1)); + World.bymidte.setGeneratedTrash((int)(Math.random()*(15 - 1) + 1)); + World.hospital.setGeneratedTrash((int)(Math.random()*(15 - 1) + 1)); + + World.park.isHandled = false; + World.bymidte.isHandled = false; + World.hospital.isHandled = false; + World.genbrugsstation.isHandled = false; + World.butik.isHandled = false; + + transition("kontor");//man "vågner op" i kontoret igen + + day++; + } + + public int getDay(){ + return day; + } + + + + public boolean isDayDone(Space s1, Space s2, Space s3, Space s4, Space s5){ + if((s1.isHandled && s2.isHandled && s3.isHandled && s4.isHandled && s5.isHandled)){ + return true; + }else{ + return false; + } + } + + //------------------------------------------------------------------------------------------ + + public Space getCurrent() { return current; @@ -15,7 +56,7 @@ public Space getCurrent() { public void transition (String direction) { Space next = current.followEdge(direction); - if (next==null) { + if (next == null) { System.out.println("You are confused, and walk in a circle looking for '"+direction+"'. In the end you give up 😩"); } else { current.goodbye(); diff --git a/woz/Game.java b/woz/Game.java index 7f58349..33c53d5 100644 --- a/woz/Game.java +++ b/woz/Game.java @@ -9,6 +9,9 @@ class Game { static Command fallback = new CommandUnknown(); static Registry registry = new Registry(context, fallback); static Scanner scanner = new Scanner(System.in); + //---------------------------------------------------------------------------------------------------------------------- + static Player player = new Player(); + //---------------------------------------------------------------------------------------------------------------------- private static void initRegistry () { Command cmdExit = new CommandExit(); @@ -17,19 +20,30 @@ private static void initRegistry () { registry.register("bye", cmdExit); registry.register("go", new CommandGo()); registry.register("help", new CommandHelp(registry)); + registry.register("reset", new CommandResetDay()); + registry.register("test", new CommandRoomActions()); + } public static void main (String args[]) { + int day = 1; System.out.println("Welcome to the World of Zuul!"); initRegistry(); context.getCurrent().welcome(); - - while (context.isDone()==false) { + + while (context.isDone() == false) { + System.out.print("> "); String line = scanner.nextLine(); registry.dispatch(line); + + // ------------------------------------------------------------------------------------------------------------ + if(context.isDayDone(world.park, world.hospital, world.bymidte, world.butik, world.genbrugsstation)){ + System.out.println("Der er ikke mere, du kan gøre i dag. Du kan gå til næste dag ved at skrive 'reset'."); + } + //------------------------------------------------------------------------------------------------------------ } - System.out.println("Game Over 😥"); + System.out.println("Game Over."); } } diff --git a/woz/Player.java b/woz/Player.java new file mode 100644 index 0000000..6ed07c5 --- /dev/null +++ b/woz/Player.java @@ -0,0 +1,71 @@ +class Player{ + private int level; + private int points; + private int money; + + private final int LEVEL1 = 10; //level 1 når point er mellem 0 og 9 + private final int LEVEL2 = 20; //level 2 når point er mellem 10 og 19 + private final int LEVEL3 = 30; //level 3 når point er mellem 20 og 29 + private final int LEVEL4 = 40; //level 4 når point er mellem 30 og 39 + private final int LEVEL5 = 50; //level 5 når point er mellem 40 og 49 + + public Player(){ + level = 1; + points = 0; + money = 100; + + } + + void addPoints(int amount){//efter køb af udvidelse + points += amount; + } + + void addMoney(int amount){//skal bruges på genbrugsstationen i Space-class + money += amount; + } + + + void subtractMoney(int amount){//bruges i butik ved køb + if((money-amount) < 0){ + System.out.println("Beklager, men du har ikke råd til dette."); + }else{ + money -= amount; + + } + } + + public int getPoints(){ + return points; + } + + public int getMoney(){ + return money; + } + + public int getLevel(){ + return level; + } + + public void getStatus(){ + System.out.println("Level: " + level + ", XP: " + points + ", money: " + money + " on day " + Game.context.getDay()); + } + + + void levelUp(int points){ + if(points > 0 && points < LEVEL1){ + level = 1; + }else if (points > LEVEL1 && points < LEVEL2){ + level = 2; + }else if (points > LEVEL2 && points < LEVEL3){ + level = 3; + }else if (points > LEVEL3 && points < LEVEL4){ + level = 4; + }else if (points > LEVEL4 && points < LEVEL5){ + level = 5; + } + } + + + + +} \ No newline at end of file diff --git a/woz/Space.java b/woz/Space.java index fd851dd..93a0561 100644 --- a/woz/Space.java +++ b/woz/Space.java @@ -3,21 +3,163 @@ import java.util.Set; -class Space extends Node { +//---------------------------------------------------------------------------- +/*math importeret for genereret skrald. +hashmap og map importeret til butikken - pris hører til vare*/ +import java.lang.Math; +import java.util.HashMap; +import java.util.Map; +//-------------------------------------------------------------------------- + + +class Space extends Node{ + //----------------------------------------------------------------------------------------- + boolean isHandled; + private int generatedTrash; + + + //getter og setter som vi bl.a. skal bruge i resetDay() i Context + public int getGeneratedTrash(){ + return generatedTrash; + } + + public void setGeneratedTrash(int newAmount){ + generatedTrash = newAmount; + } + //----------------------------------------------------------------------------------------- + + + + Space (String name) { super(name); + isHandled = false; + generatedTrash = (int)(Math.random()*(15 - 1) + 1); } + //---------------------------------------------------------------------------------- + @Override + public String toString(){ + return name; + } + //----------------------------------------------------------------------------------- + public void welcome () { - System.out.println("You are now at "+name); + System.out.println("You are now at " + name); Set exits = edges.keySet(); - System.out.println("Current exits are:"); - for (String exit: exits) { - System.out.println(" - "+exit); + System.out.println("Current locations are:"); //ændret "exits" til "locations" - dette skal ændres til dansk tho + for (String exit : exits) { + System.out.println(" - " + exit); + } + + //---------------------------------------------------------------------------------------------------------------- + + // handleRoom(name, ) + switch(name){ + case "Butik": + shopNow(); + World.butik.isHandled = true; + // System.out.println("you handled the butik. ");//placeholder/tjekker bare at det går igennem + + break; + + case "Genbrugsstation": + recycle(); + World.genbrugsstation.isHandled = true; + // System.out.println("you handled the genbrugsstation. ");//placeholder/tjekker bare at det går igennem + + break; + + case "Park": + collectTrashPark(); + World.park.isHandled = true; + // System.out.println("you handled the park. ");//placeholder/tjekker bare at det går igennem + break; + + case "Hospital": + collectTrashHospital(); + World.hospital.isHandled = true; + // System.out.println("you handled the hospital. ");//placeholder/tjekker bare at det går igennem + break; + + case "Bymidte": + collectTrashBymidte(); + World.bymidte.isHandled = true; + // System.out.println("you handled the bymidte. ");//placeholder/tjekker bare at det går igennem + break; + + case "Kontor": + Game.player.getStatus(); + + default: + break; + } + } + + + + private void shopNow(){ + System.out.println("du er i butikken nu"); + int lvl = Game.player.getLevel(); + + //laver et key-value map, så hhv pris og navn på udvidelse hænger sammen. + Map extensions = new HashMap<>(); + + //afhængigt af level, har man adgang til forskellige varer. + switch(lvl){ + case 1: + extensions.put("Billboards på Rådhuspladsen ", 20); + extensions.put("Solceller ", 150); + extensions.put("Cykelsti ", 10); + break; + case 2: + extensions.put("Billboards på Rådhuspladsen ", 20); + extensions.put("Solceller ", 150); + break; + case 3: + extensions.put("Billboards på Rådhuspladsen ", 20); + extensions.put("Solceller ", 150); + extensions.put("Isolerende vinduer ", 30); + break; + case 4: + extensions.put("Supermotorvej ", 20); + extensions.put("Parkeringshus ", 150); + extensions.put("Isolerende vinduer ", 70); + break; + case 5: + extensions.put("Varmeanlæg med oliefyr ", 50); + default: + break; } + System.out.println("Du er trådt ind i butikken. Du har følgende udvalg: \n" + extensions.toString()); + + //kommando til at købe + + } + + private void collectTrashPark(){ + System.out.println("collecting trash at this park; " + generatedTrash); //placeholder } + + + private void collectTrashBymidte(){ + System.out.println("collecting trash at bymidte; " + generatedTrash); //placeholder + } + + private void collectTrashHospital(){ + System.out.println("collecting trash at this hospital; " + generatedTrash); //placeholder + } + + + private void recycle(){ + System.out.println("du har afleveret dit affald for i dag"); //placeholder + + + } + + - public void goodbye () { + public void goodbye () {//tom metode } @Override diff --git a/woz/World.java b/woz/World.java index 7231668..a553655 100644 --- a/woz/World.java +++ b/woz/World.java @@ -2,27 +2,51 @@ */ class World { - Space entry; + static Space kontor; + static Space park; + static Space bymidte; + static Space hospital; + static Space butik; + static Space genbrugsstation; + //statiske instanser så Space kan finde dem World () { - Space entry = new Space("Entry"); - Space corridor = new Space("Corridor"); - Space cave = new Space("Cave"); - Space pit = new Space("Darkest Pit"); - Space outside = new Space("Outside"); + + //redigeret til at passe til vores lokationer - mangler ændring ---------------------------------------------------------- + + kontor = new Space("Kontor"); + park = new Space("Park"); + bymidte = new Space("Bymidte"); //bymidte? rådhusplads? + hospital = new Space("Hospital"); + butik = new Space("Butik"); + genbrugsstation = new Space("Genbrugsstation"); - entry.addEdge("door", corridor); - corridor.addEdge("door", cave); - cave.addEdge("north", pit); - cave.addEdge("south", outside); - pit.addEdge("door", cave); - outside.addEdge("door", cave); + //arrays af hhv navne og steder, som kan sættes ind i et for-loop, der laver edges til alle steder + String[] locationArr = {"kontor", "park", "bymidte", "hospital", "butik", "genbrugsstation"}; + Space[] spaceArr = {kontor, park, bymidte, hospital, butik, genbrugsstation}; + + //uddelegerer edges til hver lokation/rum. sørger også for, at et rum ikke har adgang til sig selv. + for(int i = 0; i < spaceArr.length; i++){ + for(int j = 0; j < locationArr.length; j++){ + if(locationArr[j].toLowerCase().equals(spaceArr[i].toString().toLowerCase())){ + continue; + }else{ + spaceArr[i].addEdge(locationArr[j], spaceArr[j]); + } + } + } + + //kontor skal have sig selv som edge, for at resetDay() virker inde fra kontoret af. + //hvis ikke kontor har adgang til sig selv, vil transition() ikke du, da den "næste" + //edge er null. + kontor.addEdge("kontor", kontor); + //------------------------------------------------------------------------------------------------------------------------- - this.entry = entry; + this.kontor = kontor; } Space getEntry () { - return entry; + return kontor;//redigeret fra "entry" til "kontor", da kontor fungerer som vores entry } } From fe3fddf13de86607f7ac3104a706d4734557fbb5 Mon Sep 17 00:00:00 2001 From: LindAndersen Date: Fri, 20 Oct 2023 18:46:30 +0200 Subject: [PATCH 10/14] Fixed buy feature --- Context.java | 50 -------------------- Game.java | 50 -------------------- Locations.java | 46 ------------------- Player.java | 67 --------------------------- Space.java | 57 ----------------------- World.java | 40 ---------------- woz.zip | Bin 6074 -> 0 bytes woz/CommandResetDay.java | 2 +- woz/CommandRoomAction.java | 33 ++++++++++---- woz/CommandRoomActions.java | 2 +- woz/Context.java | 59 ++++++++++++++++++++---- woz/Game.java | 8 ++-- woz/InteractableSpace.java | 4 +- woz/Player.java | 18 +++++++- woz/Registry.java | 4 +- woz/Space.java | 88 +++++++++++++++++++++--------------- woz/World.java | 14 ++++-- 17 files changed, 163 insertions(+), 379 deletions(-) delete mode 100644 Context.java delete mode 100644 Game.java delete mode 100644 Locations.java delete mode 100644 Player.java delete mode 100644 Space.java delete mode 100644 World.java delete mode 100644 woz.zip diff --git a/Context.java b/Context.java deleted file mode 100644 index defc23c..0000000 --- a/Context.java +++ /dev/null @@ -1,50 +0,0 @@ -/* Context class to hold all context relevant to a session. - */ - -class Context { - Space current; - boolean done = false; - - //tilføjet--------------------------------------------------------------------------------- - int day = 1; - - - public boolean isDayDone(){ - if(Locations.shopVisited && Locations.recyclingVisited && Locations.trashParkCollected && Locations.trashBymidteCollected && Locations.trashHospitalCollected){ - System.out.println("all done for today"); - return true; - - }else{ - return false; - } - } - //------------------------------------------------------------------------------------------ - - Context (Space node) { - current = node; - } - - public Space getCurrent() { - return current; - } - - public void transition (String direction) { - Space next = current.followEdge(direction); - if (next==null) { - System.out.println("You are confused, and walk in a circle looking for '"+direction+"'. In the end you give up 😩"); - } else { - current.goodbye(); - current = next; - current.welcome(); - } - } - - public void makeDone () { - done = true; - } - - public boolean isDone () { - return done; - } -} - diff --git a/Game.java b/Game.java deleted file mode 100644 index 22e81bf..0000000 --- a/Game.java +++ /dev/null @@ -1,50 +0,0 @@ -/* Main class for launching the game - */ - -import java.util.Scanner; - -class Game { - static World world = new World(); - static Context context = new Context(world.getEntry()); - static Command fallback = new CommandUnknown(); - static Registry registry = new Registry(context, fallback); - static Scanner scanner = new Scanner(System.in); - //tilføjet - ----------------------------------------------------------------------------------------------------------- - static Player player = new Player(); - //---------------------------------------------------------------------------------------------------------------------- - - private static void initRegistry () { - Command cmdExit = new CommandExit(); - registry.register("exit", cmdExit); - registry.register("quit", cmdExit); - registry.register("bye", cmdExit); - registry.register("go", new CommandGo()); - registry.register("help", new CommandHelp(registry)); - } - - public static void main (String args[]) { - int day = 1; - System.out.println("Welcome to the World of Zuul!"); - - initRegistry(); - context.getCurrent().welcome(); - - //tilføjet start for tests ------------------------------------------------------------------------------------------------------ - player.addPoints(28); - player.levelUp(player.getPoints()); - System.out.println("level: " + player.getLevel() + ", points: " + player.getPoints() + ", money: " + player.getMoney()); - // tilføjet slut ------------------------------------------------------------------------------------------------------ - - while (context.isDone() == false) { - - System.out.print("> "); - String line = scanner.nextLine(); - registry.dispatch(line); - //---------------------------------------------------- test, men dette skal afgøre om dagen skal skifte, nyt skrald skal - //---------------------------------------------------- placeres og nulstille de bolske værdier der afgør om dagen er done - System.out.println("day is done: " + context.isDayDone()); - //---------------------------------------------------- - } - System.out.println("Game Over."); - } -} diff --git a/Locations.java b/Locations.java deleted file mode 100644 index 1df5019..0000000 --- a/Locations.java +++ /dev/null @@ -1,46 +0,0 @@ -class Locations{ - - static boolean trashParkCollected; - static boolean trashBymidteCollected; - static boolean trashHospitalCollected; - static boolean shopVisited; - static boolean recyclingVisited; - - static void shopNow(){ - System.out.println("du er i butikken nu"); - //her skal der være et udvalg af upgrades til byen, som man kan vælge at købe - /*måske en dictionary med navn på hver upgrade og pris? - og et if/else eller switch-statement, der ved køb af en ting tjekker om spilleren - har råd til det, printer en besked hvis ikke, og ellers opdaterer spilleres penge - efter køb og opdaterer byen afhængigt af køb*/ - - shopVisited = true; - } - - static void collectTrashPark(){ - System.out.println("collecting trash at this park"); //placeholder - trashParkCollected = true; - } - - - static void collectTrashBymidte(){ - System.out.println("collecting trash at bymidte"); //placeholder - trashBymidteCollected = true; - } - - static void collectTrashHospital(){ - System.out.println("collecting trash at this hospital"); //placeholder - trashHospitalCollected = true; - } - - - static void recycle(int amountOfTrash){ - System.out.println("du har afleveret " + amountOfTrash + " stykker affald i dag"); //placeholder - - recyclingVisited = true; - } - - - - -} \ No newline at end of file diff --git a/Player.java b/Player.java deleted file mode 100644 index 4b972fe..0000000 --- a/Player.java +++ /dev/null @@ -1,67 +0,0 @@ -class Player{ - private int level; - private int points; - private int money; - - private final int LEVEL1 = 10; //level 1 når point er mellem 0 og 9 - private final int LEVEL2 = 20; //level 2 når point er mellem 10 og 19 - private final int LEVEL3 = 30; //level 3 når point er mellem 20 og 29 - private final int LEVEL4 = 40; //level 4 når point er mellem 30 og 39 - private final int LEVEL5 = 50; //level 5 når point er mellem 40 og 49 - - public Player(){ - level = 1; - points = 0; - money = 100; - - } - - void addPoints(int amount){ - points += amount; - } - - void addMoney(int amount){ - money += amount; - } - - - void subtractMoney(int amount){ - if((money-amount) < 0){ - System.out.println("Beklager, men du har ikke råd til dette."); - }else{ - money -= amount; - - } - } - - public int getPoints(){ - return points; - } - - public int getMoney(){ - return money; - } - - public int getLevel(){ - return level; - } - - - void levelUp(int points){ - if(points > 0 && points < LEVEL1){ - level = 1; - }else if (points > LEVEL1 && points < LEVEL2){ - level = 2; - }else if (points > LEVEL2 && points < LEVEL3){ - level = 3; - }else if (points > LEVEL3 && points < LEVEL4){ - level = 4; - }else if (points > LEVEL4 && points < LEVEL5){ - level = 5; - } - } - - - - -} \ No newline at end of file diff --git a/Space.java b/Space.java deleted file mode 100644 index a85d26a..0000000 --- a/Space.java +++ /dev/null @@ -1,57 +0,0 @@ -/* Space class for modeling spaces (rooms, caves, ...) - */ - -import java.util.Set; - -class Space extends Node { - Space (String name) { - super(name); - } - - public void welcome () { - System.out.println("You are now at " + name); - Set exits = edges.keySet(); - System.out.println("Current locations are:"); //ændret "exits" til "locations" - dette skal ændres til dansk tho - for (String exit : exits) { - System.out.println(" - " + exit); - } - //---------------------------------------------------------------------------------------------------------------- - //gør det muligt at interagere med lokationerne - kalder funktioner i Locations-class - switch(name){ - case "Butik": - Locations.shopNow(); - break; - - case "Genbrugsstation": - Locations.recycle(4); - break; - - case "Park": - Locations.collectTrashPark(); - break; - - case "Hospital": - Locations.collectTrashHospital(); - break; - - case "Bymidte": - Locations.collectTrashBymidte(); - break; - - default: System.out.println("cant do anything here buddy"); - - - } - - - //---------------------------------------------------------------------------------------------------------------- - } - - public void goodbye () {//tom metode - } - - @Override - public Space followEdge (String direction) { - return (Space) (super.followEdge(direction)); - } -} diff --git a/World.java b/World.java deleted file mode 100644 index 697a2e3..0000000 --- a/World.java +++ /dev/null @@ -1,40 +0,0 @@ -/* World class for modeling the entire in-game world - */ - -class World { - Space overview; - - World () { - - //redigeret til at passe til vores lokationer----------------------------------------------------------------- - - Space overview = new Space("Overblik"); - Space park = new Space("Park"); - Space bymidte = new Space("Bymidte"); //bymidte? rådhusplads? - Space hospital = new Space("Hospital"); - Space butik = new Space("Butik"); - Space genbrugsstation = new Space("Genbrugsstation"); - - //sørger for at alle lokationer kan nås fra overview - overview.addEdge("park", park); - overview.addEdge("bymidte", bymidte); - overview.addEdge("hospital", hospital); - overview.addEdge("butik", butik); - overview.addEdge("genbrugsstation", genbrugsstation); - - - //alle lokationer har kun adgang til overblik - park.addEdge("overblik", overview); - bymidte.addEdge("overblik", overview); - hospital.addEdge("overblik", overview); - butik.addEdge("overblik", overview); - genbrugsstation.addEdge("overblik", overview); - - this.overview = overview; - } - - Space getEntry () { - return overview;//redigeret fra "entry" til "overview", da overview fungerer som vores entry - } -} - diff --git a/woz.zip b/woz.zip deleted file mode 100644 index 4ec076b5129974b41539f666b40a57a32be83a78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6074 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 H0sQtq3XkBu diff --git a/woz/CommandResetDay.java b/woz/CommandResetDay.java index c3322c8..6486b17 100644 --- a/woz/CommandResetDay.java +++ b/woz/CommandResetDay.java @@ -6,6 +6,6 @@ public CommandResetDay(){ @Override public void execute (Context context, String command, String parameters[]) { System.out.println("Resetting the day"); - Game.context.resetDay(); + context.resetDay(); } } \ No newline at end of file diff --git a/woz/CommandRoomAction.java b/woz/CommandRoomAction.java index c3d13d4..93ee7f1 100644 --- a/woz/CommandRoomAction.java +++ b/woz/CommandRoomAction.java @@ -7,17 +7,31 @@ class CommandRoomAction extends BaseCommand implements Command { } public void pickup(Context context, String[] parameters) { + Player player = context.getPlayer(); + Space cspace = context.getCurrent(); + int amountPresent = cspace.getGeneratedTrash(); + if (!guardEq(parameters, 1)) { - String amount = parameters[0]; - System.out.printf("%nDu har samlet %s bunker skrald op%n", amount); - } else if (!guardEq(parameters, 0)) { - System.out.println("Du har samlet alt skrald op"); + int amount = Integer.parseInt(parameters[0]); + if (amount > amountPresent) { + System.out.printf("%nSå meget skrald er der ikke! Der er %d", amountPresent); + } else { + player.addTrash(amount); + cspace.setGeneratedTrash(amountPresent - amount); + + System.out.printf("%nDu har samlet %d skrald op - nu har du %d i din taske!", amount, player.getTrash()); + } + } + else if (!guardEq(parameters, 0)) { + player.addTrash(amountPresent); + cspace.setGeneratedTrash(0); + System.out.printf("%nDu har samlet alt skrald op - nu har du %d i din taske!", player.getTrash()); } else { context.youStupid(); } - } + // Hint can be called from everywhere public void hint(Context context, String[] parameters) { if (guardEq(parameters, 0)) { context.youStupid(); @@ -26,12 +40,13 @@ public void hint(Context context, String[] parameters) { System.out.println("Congratulations, you have recieved a hint"); } + //Buy command can be executed from shop (butik) this is checked in registry w baseCommands and roomCommands public void buy(Context context, String[] parameters) { - if (guardEq(parameters, 2)) { + if (guardEq(parameters, 1)) { context.youStupid(); return; } - System.out.printf("%nDu har købt %s x %s%n", parameters[1], parameters[0]); + context.buyExecuter(parameters); } @@ -49,7 +64,7 @@ public void default_(Context context, String command, String[] parameters) { context.youStupid(); return; } - System.out.println("Have not implemented that command yet :))"); + System.out.println("From default: Have not implemented that command yet :))"); } @Override @@ -77,6 +92,6 @@ public void execute (Context context, String command, String[] parameters) { } - context.getCurrent().update(); + context.getCurrent().updateExits(); } } diff --git a/woz/CommandRoomActions.java b/woz/CommandRoomActions.java index 796d9ac..49fe36e 100644 --- a/woz/CommandRoomActions.java +++ b/woz/CommandRoomActions.java @@ -11,7 +11,7 @@ public void execute (Context context, String command, String parameters[]) { //her afgøres hvor man befinder sig, og hvad den enkelt kommando gør i de forskellige sammenhænge //den skal måske kalde på forskellige handlinger? - switch(context.current.getName()){ + switch(context.getCurrent().getName()){ case "Park": System.out.println("hey you are in da park B)"); diff --git a/woz/Context.java b/woz/Context.java index da0d590..1db202c 100644 --- a/woz/Context.java +++ b/woz/Context.java @@ -1,16 +1,19 @@ /* Context class to hold all context relevant to a session. */ +import java.util.*; + class Context { private Space current; + private Player player; private boolean done = false; + private int day; - - private int day = 1; - - Context (Space node) { + Context (Space node, Player player) { current = node; + this.player = player; + day = 1; } //--------------------------------------------------------------------------------------------- @@ -27,9 +30,11 @@ void resetDay(){ World.genbrugsstation.isHandled = false; World.butik.isHandled = false; + day++; + transition("kontor");//man "vågner op" i kontoret igen - day++; + } public int getDay(){ @@ -45,14 +50,35 @@ public boolean isDayDone(Space s1, Space s2, Space s3, Space s4, Space s5){ return false; } } - - //------------------------------------------------------------------------------------------ - - public Space getCurrent() { return current; } + + public Player getPlayer() { + return player; + } + + public void buyExecuter(String[] parameters) { + String item = parameters[0]; + Map lowerExtensions = current.getExtensions(); + + if (containsKey(lowerExtensions.keySet().toArray(new String[0]), item)) { + int[] priceXP = lowerExtensions.get(item); + if (player.canAfford(priceXP[0])) { + //Add to inventory + player.subtractMoney(priceXP[0]); + player.addPoints(priceXP[1]); + + System.out.printf("%nDu har købt %s. Godt gået!", item); + + } else { + System.out.println("Du har ikke råd til denne udvidelse"); + } + } else { + System.out.println("Denne udvidelse eksisterer ikke i shoppen"); + } + } public void transition (String direction) { Space next = current.followEdge(direction); @@ -77,5 +103,18 @@ public boolean isDone () { return done; } -} +//Helpers + + private boolean containsKey(String[] hm, String itemName) { + for (String name : hm) { + if (itemName.equals(name.toLowerCase().trim())) { + return true; + } + } + return false; + } + + + +} diff --git a/woz/Game.java b/woz/Game.java index fa5d124..0c28439 100644 --- a/woz/Game.java +++ b/woz/Game.java @@ -5,13 +5,12 @@ class Game { static World world = new World(); - static Context context = new Context(world.getEntry()); + static Player player = new Player(); + static Context context = new Context(world.getEntry(), player); static Command fallback = new CommandUnknown(); static Registry registry = new Registry(context, fallback); static Scanner scanner = new Scanner(System.in); - //---------------------------------------------------------------------------------------------------------------------- - static Player player = new Player(); - //---------------------------------------------------------------------------------------------------------------------- + private static void initRegistry () { Command cmdExit = new CommandExit(); @@ -26,7 +25,6 @@ private static void initRegistry () { registry.register("go", new CommandGo()); registry.register("help", new CommandHelp(registry)); registry.register("reset", new CommandResetDay()); - registry.register("test", new CommandRoomActions()); } diff --git a/woz/InteractableSpace.java b/woz/InteractableSpace.java index 3c25616..9eeccd0 100644 --- a/woz/InteractableSpace.java +++ b/woz/InteractableSpace.java @@ -1,5 +1,7 @@ public class InteractableSpace { + String name; + InteractableSpace(String name) { - String this.name = name; + this.name = name; } } \ No newline at end of file diff --git a/woz/Player.java b/woz/Player.java index 6ed07c5..bafa745 100644 --- a/woz/Player.java +++ b/woz/Player.java @@ -1,7 +1,10 @@ +import java.util.*; + class Player{ private int level; private int points; private int money; + private int trash; private final int LEVEL1 = 10; //level 1 når point er mellem 0 og 9 private final int LEVEL2 = 20; //level 2 når point er mellem 10 og 19 @@ -12,8 +15,17 @@ class Player{ public Player(){ level = 1; points = 0; - money = 100; + money = 200; + trash = 0; + + } + public void addTrash(int amount) { + trash += amount; + } + + public int getTrash() { + return trash; } void addPoints(int amount){//efter køb af udvidelse @@ -34,6 +46,10 @@ void subtractMoney(int amount){//bruges i butik ved køb } } + boolean canAfford(int price) { + return (price <= getMoney() ? true : false); + } + public int getPoints(){ return points; } diff --git a/woz/Registry.java b/woz/Registry.java index 7496ea5..9af9f1f 100644 --- a/woz/Registry.java +++ b/woz/Registry.java @@ -8,7 +8,9 @@ class Registry { Context context; Command fallback; Map commands = new HashMap(); - String[] baseCommands = {"exit", "bye", "quit", "help", "go"}; + + //Get basecommands from commands + String[] baseCommands = {"exit", "bye", "quit", "help", "go", "reset"}; Registry (Context context, Command fallback) { this.context = context; diff --git a/woz/Space.java b/woz/Space.java index 17cbdae..609a862 100644 --- a/woz/Space.java +++ b/woz/Space.java @@ -6,123 +6,139 @@ import java.util.HashMap; import java.util.Map; import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.*; //----- class Space extends Node { List commands = new ArrayList(); boolean isHandled; + Map extensions; private int generatedTrash; Space (String name) { super(name); isHandled = false; + //laver et key-value map, så hhv pris og navn på udvidelse hænger sammen. + extensions = new HashMap<>(); generatedTrash = (int)(Math.random()*(15 - 1) + 1); - SpaceBuilder sp = new SpaceBuilder(name); } + public void makeHandled() { + isHandled = true; + } + //getter og setter som vi bl.a. skal bruge i resetDay() i Context public int getGeneratedTrash(){ return generatedTrash; } + public Map getExtensions() { + Map lowerExtensions = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + lowerExtensions.putAll(extensions); + + return lowerExtensions; + } + public void setGeneratedTrash(int newAmount){ generatedTrash = newAmount; } - public void welcome () { + public void welcome() { + System.out.printf("%n%s%n", name); System.out.println("\nDu er nu ved "+name); - update(); - hasBeen(); - } - - public void hasBeen() { + + updateExits(); + switch(name){ case "Butik": - shopNow(); - World.butik.isHandled = true; + showShop(); + makeHandled(); // System.out.println("you handled the butik. ");//placeholder/tjekker bare at det går igennem break; case "Genbrugsstation": recycle(); - World.genbrugsstation.isHandled = true; + makeHandled(); // System.out.println("you handled the genbrugsstation. ");//placeholder/tjekker bare at det går igennem break; case "Park": collectTrashPark(); - World.park.isHandled = true; + makeHandled(); // System.out.println("you handled the park. ");//placeholder/tjekker bare at det går igennem break; case "Hospital": collectTrashHospital(); - World.hospital.isHandled = true; + makeHandled(); // System.out.println("you handled the hospital. ");//placeholder/tjekker bare at det går igennem break; case "Bymidte": collectTrashBymidte(); - World.bymidte.isHandled = true; + makeHandled(); // System.out.println("you handled the bymidte. ");//placeholder/tjekker bare at det går igennem break; case "Kontor": - Game.player.getStatus(); + //player.getStatus(); default: break; } } - private void shopNow(){ - System.out.println("du er i butikken nu"); + void updateShop(){ int lvl = Game.player.getLevel(); - //laver et key-value map, så hhv pris og navn på udvidelse hænger sammen. - Map extensions = new HashMap<>(); - //afhængigt af level, har man adgang til forskellige varer. switch(lvl){ case 1: - extensions.put("Billboards på Rådhuspladsen ", 20); - extensions.put("Solceller ", 150); - extensions.put("Cykelsti ", 10); + extensions.put("Billboards på Rådhuspladsen", new int[]{20, 10}); + extensions.put("Solceller", new int[]{150, 10}); + extensions.put("Cykelsti", new int[]{10, 10}); break; case 2: - extensions.put("Billboards på Rådhuspladsen ", 20); - extensions.put("Solceller ", 150); + extensions.put("Billboards på Rådhuspladsen", new int[]{20,10}); + extensions.put("Solceller", new int[]{150, 10}); break; case 3: - extensions.put("Billboards på Rådhuspladsen ", 20); - extensions.put("Solceller ", 150); - extensions.put("Isolerende vinduer ", 30); + extensions.put("Billboards på Rådhuspladsen", new int[]{20, 10}); + extensions.put("Solceller", new int[]{150, 10}); + extensions.put("Isolerende vinduer", new int[]{30, 10}); break; case 4: - extensions.put("Supermotorvej ", 20); - extensions.put("Parkeringshus ", 150); - extensions.put("Isolerende vinduer ", 70); + extensions.put("Supermotorvej", new int[]{20, 10}); + extensions.put("Parkeringshus", new int[]{150, 10}); + extensions.put("Isolerende vinduer", new int[]{70, 10}); break; case 5: - extensions.put("Varmeanlæg med oliefyr ", 50); + extensions.put("Varmeanlæg med oliefyr", new int[]{50, 10}); default: break; } - System.out.println("Du er trådt ind i butikken. Du har følgende udvalg: \n" + extensions.toString()); + } - //kommando til at købe - + public void showShop() { + updateShop(); + System.out.println("Du er trådt ind i butikken. Du har følgende udvalg: \n"); + for (String key : extensions.keySet()){ + int[] priceXP = extensions.get(key); + System.out.printf(" - Navn: %s, pris: %d, XP: %d%n", key, priceXP[0], priceXP[1]); + } } private void collectTrashPark(){ System.out.println("collecting trash at this park; " + generatedTrash); //placeholder } - public void update() { - System.out.println("-------------------------------------------"); + public void updateExits() { + System.out.println("\n-------------------------------------------"); Set exits = edges.keySet(); System.out.println("Du kan gå mod:"); for (String exit: exits) { diff --git a/woz/World.java b/woz/World.java index 45fba01..476f673 100644 --- a/woz/World.java +++ b/woz/World.java @@ -26,7 +26,7 @@ class World { List locations = new ArrayList(); String[] locationArr = {"kontor", "park", "bymidte", "hospital", "butik", "genbrugsstation"}; Space[] spaceArr = {kontor, park, bymidte, hospital, butik, genbrugsstation}; - Space[] spaces = new Space[] {entry, rp, trash, park, shop, homes}; + Space[] spaces = {kontor, bymidte, genbrugsstation, park, butik, hospital}; locations.addAll(Arrays.asList(spaces)); //uddelegerer edges til hver lokation/rum. sørger også for, at et rum ikke har adgang til sig selv. @@ -41,14 +41,16 @@ class World { } for (Space location : locations) { - if (location.name.equals(entry.name)) { + if (location.name.equals(getEntry().name)) { location.addCommand("status"); - } else if (location.name.equals(shop.name)) { + } else if (location.name.equals(getShop().name)) { location.addCommand("sell"); location.addCommand("buy"); + } else { + location.addCommand("pickup"); } - location.addCommand("pickup"); location.addCommand("hint"); + location.addCommand("reset"); //kontor skal have sig selv som edge, for at resetDay() virker inde fra kontoret af. //hvis ikke kontor har adgang til sig selv, vil transition() ikke du, da den "næste" @@ -65,5 +67,9 @@ class World { Space getEntry () { return kontor;//redigeret fra "entry" til "kontor", da kontor fungerer som vores entry } + + private Space getShop() { + return butik; + } } From f3b89411f5b6cdfc193a720049e456d8e234baa9 Mon Sep 17 00:00:00 2001 From: Asta Knudsen Date: Sun, 22 Oct 2023 12:49:27 +0200 Subject: [PATCH 11/14] edits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tilføjet kommentarer og et inventory til player (virker med add/remove ved køb/pickup/sell) --- woz/BaseCommand.class | Bin 0 -> 557 bytes woz/Command.class | Bin 0 -> 213 bytes woz/CommandExit.class | Bin 0 -> 426 bytes woz/CommandGo.class | Bin 0 -> 708 bytes woz/CommandHelp.class | Bin 0 -> 1738 bytes woz/CommandResetDay.class | Bin 0 -> 601 bytes woz/CommandResetDay.java | 2 +- woz/CommandRoomAction.class | Bin 0 -> 3383 bytes woz/CommandRoomAction.java | 39 ++++++++++++++++-------- woz/CommandRoomActions.java | 35 --------------------- woz/CommandUnknown.class | Bin 0 -> 944 bytes woz/Context.class | Bin 0 -> 3729 bytes woz/Context.java | 30 ++++++++++-------- woz/Game.class | Bin 0 -> 2556 bytes woz/Game.java | 12 ++++---- woz/Node.class | Bin 0 -> 832 bytes woz/Player.class | Bin 0 -> 3233 bytes woz/Player.java | 46 ++++++++++++++++++++-------- woz/Registry.class | Bin 0 -> 2133 bytes woz/Registry.java | 25 ++++++++++----- woz/Space.class | Bin 0 -> 5653 bytes woz/Space.java | 46 +++++++++++++++++----------- woz/World.class | Bin 0 -> 1847 bytes woz/World.java | 59 +++++++++++++++++++----------------- 24 files changed, 163 insertions(+), 131 deletions(-) create mode 100644 woz/BaseCommand.class create mode 100644 woz/Command.class create mode 100644 woz/CommandExit.class create mode 100644 woz/CommandGo.class create mode 100644 woz/CommandHelp.class create mode 100644 woz/CommandResetDay.class create mode 100644 woz/CommandRoomAction.class delete mode 100644 woz/CommandRoomActions.java create mode 100644 woz/CommandUnknown.class create mode 100644 woz/Context.class create mode 100644 woz/Game.class create mode 100644 woz/Node.class create mode 100644 woz/Player.class create mode 100644 woz/Registry.class create mode 100644 woz/Space.class create mode 100644 woz/World.class diff --git a/woz/BaseCommand.class b/woz/BaseCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..63a74b17c74739e107ad64b1172e14c65d63ab3e GIT binary patch literal 557 zcmZvY%SyvQ6o&sv)22<+i?y{13NDir>;ouLtO`QaMYRiEO_L#{Hc3qrU&o~z7Yd5t zq7UFhi6=2&p)$<5&3xzf_5Ha3(8HDr2{{F_hCB)k^$CCA-6{8-?&WwQtcam-;QDTK z$dJ>GQ3*wq6sQ`?&=|@`d@lNd=W*XA&lYnlbZ3zp_zaD~U#?*ky1uhtM3q6i_U*um zJ>f@!pq9S+&loYt{lFFswSnu4i`W~B@QRP86j7X*hxW-mLtDRHWzUQohRQJF*4;Uu zWlYr((eZL~P2E^U8Ps7Ahn6^XlS1{S;r5bQuuIcRv^PeV<|irB&7($yQEASUYgGOL%LHmrQ6b&HdIok0Owwwd#r7i< w`3Z9FnS3cNnWP6b)=Y~@YL8K%g^di}A)S24n{QBF$oOsamuiyNrkI4yA1F0sivR!s literal 0 HcmV?d00001 diff --git a/woz/Command.class b/woz/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..709022938a9a47c0fa8b71a2c0e3d57c26f0c620 GIT binary patch literal 213 zcmX^0Z`VEs1_lQPZgvJHMh150{M_8cycBi@7Dfhvti-ZJ{hY+SbbbG%tkmQZpnPgY zYI12wDkFoThL3Z8UP)?2iM0hNC zk|vt4m^=5Ld(M4*|9pM{xWb7C2PFkl-iw11r>&1 zY)#slrz(!6t-^!P5d_#ojkJaCcBw2yk(`H_O06=Qp*eaIFQOj{J?oEcru1y!p@A)q zW`OOyGanjl<&u<@L_EtIqb0}g3NNN{hbEE?^^wx@evwRN_8_J)AzUtHxUl4%w?{>p z!Ft2Tb*M98@Wy75h4N12r5gWsILk*yinjArn= zZ^e7j8VfyY^=zc{sO=KB;^91e20ogKX!ztE!+Pz_a_V0FbsiT`JV^}3)LgZ;Tynkd;s$PV-12Zc5#b%9t(;Mbu8o9_ zRWcZktu(TjceZ1OlA+vHTE3Wu`!aeZ_Q!;9Ig^8_rPIAycOleXHvP}&>V1Y{&x*m} zb1_+{xji$D269&=(xpFdwv)7pfSx4-hC8$$8Tx1~=vJfCc8UXq#&@uW&%YsmOfU_W z{v|kRa+cCva6%hII3qrzSeBxjjb?U^@+Wv-uD-^=dZLp_b=Js`ERaXC W8b$ahV*?f3CDZ})NwS$H@B9YSJD@WF literal 0 HcmV?d00001 diff --git a/woz/CommandHelp.class b/woz/CommandHelp.class new file mode 100644 index 0000000000000000000000000000000000000000..839637dbfd0de4dfabab7776273f510678de083a GIT binary patch literal 1738 zcmaJ?-BTM?6#rfFaW~5XA+Xfgmc~jn3DQ`sQ4?BQf(RODZ4kuzbqUw7WwV>f-gL^l z|A0^S*>T2a9gEr-`{JAbga1dLTF-8lAxtvPWN*%%IbXluIp^*_&!0R6a1(nvMiAkM z8i*mzFuE)}S#?`2;p{WSmn_FpHy9$h{B{Bw5*)gLQ5a+yTCGXD&7gH;)ACg3h(WL2 z4dsf4afX={%WK=>C?hflWSeP8&l64Qhf5lmM2ceVORv$f+RAbrhE(mocp!?laGJ%s z>R3**qGK8+$Bcn*7u){((09G4Bein$a2z7mNnTRKg35RkQ=z-xG&BWECw z!ddepPstWpxn0U;_A0g9;vE922(A<@;_VHFL$rj<$D0POVv%7gsQs)918@5Q zY~s(%4Z`;UOyin?w^5=Nos!0IahQ26OkNqqyLgYIY@mWA$`a}s#wo^1f7_;W`N6y? znz9=P-p5Ubb1iX5v*k2|+OgCDNuCmp3R<>4#Fu0F40F9+_++dY_yDU!d4Ty_hNU4G zhP81h+YDp5)0xe0(kh`K*@ zIKh6{vAPnC!wu06qH$~nd!>Ysh48kY3%10|Ne?>YW^4t zgPu#Fr=P_4e(O)X!%)`A!;C$_b;9%)ZtX_WiTZ9dt=ErH-3em;?IRfpkd!b+a*|L? zVw^6NNtl?&3>N8LzD{x#=LyvXNV;Xan8o)b|3Dnp$ZG+y7o?_7h{mzOk>R*aKjuHg p?WJdkJ;zk=_Kc=Bf=`09cTuN*ji}n9=W~2PZ#qd|;%f+`{{s+dvs?fG literal 0 HcmV?d00001 diff --git a/woz/CommandResetDay.class b/woz/CommandResetDay.class new file mode 100644 index 0000000000000000000000000000000000000000..13c76d8ecf3d4ea762a12cf5588bb727e99fc912 GIT binary patch literal 601 zcmZXS+fKqj5QhH&bfFYEiRS~JDMpFc7-PhEMT}9yjaLh7u!gpzEJhwn6E*R|2k@bc z(~5~onoM_R=lf@NWUZ*9R=U#dRIapd zyPawR8Ds@=Ci0jjWPSw<`&v1i+8by>;TyHR$^~Or*znpX#<`befap7LhgWi<%Kl{fHP>dX$LrvG(#Ke!r- zJcbAe>parn&y!@k$-CWf4pMA=3WF-F?CGf0SPY5-=GilsGs7>kACIgxCN8 literal 0 HcmV?d00001 diff --git a/woz/CommandResetDay.java b/woz/CommandResetDay.java index 6486b17..890ee52 100644 --- a/woz/CommandResetDay.java +++ b/woz/CommandResetDay.java @@ -6,6 +6,6 @@ public CommandResetDay(){ @Override public void execute (Context context, String command, String parameters[]) { System.out.println("Resetting the day"); - context.resetDay(); + context.resetDay(); } } \ No newline at end of file diff --git a/woz/CommandRoomAction.class b/woz/CommandRoomAction.class new file mode 100644 index 0000000000000000000000000000000000000000..73697537946034b4c2713a301c1ee5c4d32f0579 GIT binary patch literal 3383 zcmaJ@Yj+#f72RV=9$B8mi5)o@5@!OjYsq$O0&!w1p~Q|It2mEZZqg(LI+kv%iAOWa zXvV~CfR@q#ZE5KPN`SthrqDuRQ8kOM_Cs0y(l7l7{U7aGWp&>fIg(-rFVD=qSNHC7 z&OZB`nSXxz@!tSEj6cTFqG0>HUn&}Q!7}Y7;ZEp%6%|nh+b$a`#)xIuOCzTjFN?gF zKr2)gaSd%qH2t3QT%J|XddYE1hNobBV6J{T{55m2VJQU6q#BlLyAsf_Ma5PP9oVLz zebT6iDW_DTf5bmx+NSrAg5)Onsk3e9M3;&k8j|Q%5Itd(gaS41*q*pbuiECO!eJ(X zyU?TJZVmTf7q`^bxn)UsXDnk?xC#;jskv~RX+tmesL(a+#l2*#=Fz<4l#b;+)3NDW zxppkRen=YGr=bu1#3JsL@4CX4eh@fUHu8dg3?QWkKq{M{8~ZhkV3a;D`G#AVzM^2~KqIv^9gCos3U#)neM86zgo(?lY$qm+q*xk~lfxli8G zOSI_em1Wnk3c7Ih0xxrUS?tx1bHx9?f^_&{4aYFa@Ky}V7pE^N=pM*6>ZIm7sXLBo z6*C%6U{*m_5M8r_L5^%9m`2u`1=$S4FuuUtcrp(O%;BVpQyNa=4Dr{svehUQ z7M!fT!UQ|+s`PrJwzH|TGU4+Ya#&zODjTyLWw6{dhqD^a;mZm%vep2bq;!Hveb2N; zX6eyMqf9PZaX}JyQ9*yB;pVV{TCVA%lMUce4Uge*3aDf(v&ihc;hi(RB1aX^u)WG{ zV6~Ht$+!ik;87{}MGbkdP}^1=Kj-;nlVb|^Y#hu%ioi>hv~L-*WGX{Ccj-lAMd+@` zn_@*2bVDyPVKTQx4W{e>YLG(9mhj6OEKqapi~j2LRgw2SDdO(U^dGY5Xei4(b-AMC ztcV%cDcvGd8gZo&#@W%U@jN@63D#EhjxXu)iFWEbu*KiFlDA+S_ zs}nXB!Fqxzz+QY;!!vk6j$YL8Y&iOXhU?+zhZ=r_AJgSp#8lD!bMlfo-Hg-S;&ewDzl@f#Iy%G!8K!M=LeH0>2< zS&W1%h2=71#l zr`f!+HeX^>mQkq)X7%?9`ZmzH8A~eOQ_%a_TUiYurO>HS4GMnB3-SfcyUL3n5L~&z z(Gk{A3!l5vol5kth@6iM=58YPXSAn3#P%w7{t3H3;O`1v<9#b4yeF_7?fg90!c`Vc zh@|uosg=LJKUl?mr-rNe+*mX{6s=%^ zt77Wh8phKfVRvUX8LQ%v;bb%!D^&4C?v=|`eCa06e~hmHwS%$x!K3M+NMLBRhCs8A z40GxB(_aN5j50K*(o;hQ*AfIbNm76=#IS?m?d1I~?84o+kD+Er{Db^3@FNfaj@lJgaol)gfwB66iO0zhA!VgJn%v? zBC1%byVFfafc^ZU93j)Ao9IE2-?U08Ed6DBqm7VkXEn$ts1)hwL(PyO!C^kDu?WycQgRg8Mkm-m8`z2lY{_g6ug4_~t!%>9DWaby`Wd3nldW7M>Kp5*%DspNQvGCT zBHA(*>!Dh%zDp~Yct!t_OkCqL1?8#he4fYXzn|lC90&h3&u6wL+WGY=p1gsv$XIL* zqnv*;nD7u6%C|UBTe{Ye=LAhq&~Ttgehk0Bm{&j{CopA$qDehYrdocuPp RzfHZ%HlPsn4|pFv{|C9>Muh+X literal 0 HcmV?d00001 diff --git a/woz/CommandRoomAction.java b/woz/CommandRoomAction.java index 93ee7f1..9878765 100644 --- a/woz/CommandRoomAction.java +++ b/woz/CommandRoomAction.java @@ -2,30 +2,40 @@ */ class CommandRoomAction extends BaseCommand implements Command { + + Player player; + + CommandRoomAction (String description) { super(String.format("Rumhandlinger: %s", description)); + player = Game.context.getPlayer(); + } + public void pickup(Context context, String[] parameters) { - Player player = context.getPlayer(); + + //we get the player, our current location and the amount of trash present Space cspace = context.getCurrent(); int amountPresent = cspace.getGeneratedTrash(); + //if the pickup-command has 1 parameter (amount of trash to collect) we do as follows if (!guardEq(parameters, 1)) { - int amount = Integer.parseInt(parameters[0]); - if (amount > amountPresent) { + int amount = Integer.parseInt(parameters[0]); //parameters[] is a string array which we convert to int + + if (amount > amountPresent) {//if you ask to collect more trah than present: System.out.printf("%nSå meget skrald er der ikke! Der er %d", amountPresent); - } else { - player.addTrash(amount); + } + else {//otherwise we add the trash to inventory and set the amount of trash in the location after pickup + player.addToInventory("trash", amount); cspace.setGeneratedTrash(amountPresent - amount); - - System.out.printf("%nDu har samlet %d skrald op - nu har du %d i din taske!", amount, player.getTrash()); + System.out.printf("%nDu har samlet %d skrald op - nu har du " + player.getInventory() + " i din taske!", amount); } } - else if (!guardEq(parameters, 0)) { - player.addTrash(amountPresent); + else if (!guardEq(parameters, 0)) {//if you only type "pickup": + player.addToInventory("trash", amountPresent); cspace.setGeneratedTrash(0); - System.out.printf("%nDu har samlet alt skrald op - nu har du %d i din taske!", player.getTrash()); + System.out.printf("%nDu har samlet alt skrald op - nu har du " + player.getInventory() + " i din taske!"); } else { context.youStupid(); } @@ -40,25 +50,30 @@ public void hint(Context context, String[] parameters) { System.out.println("Congratulations, you have recieved a hint"); } - //Buy command can be executed from shop (butik) this is checked in registry w baseCommands and roomCommands + //Buy command can be executed from shop (butik). this is checked in registry w baseCommands and roomCommands public void buy(Context context, String[] parameters) { if (guardEq(parameters, 1)) { context.youStupid(); return; } - context.buyExecuter(parameters); + context.buyExecuter(parameters);//calls buyExecuter from context who will peform the necessary actions } + //command to sell trash valid in shop (shouldn't it be valid at genbrugsstation only?) public void sell(Context context, String[] parameters) { if (guardEq(parameters, 1)) { context.youStupid(); return; + }else{ + player.removeFromInventory("trash", Integer.parseInt(parameters[0])); + System.out.println(player.getInventory()); } System.out.printf("%nDu har solgt %s bunker skrald%n", parameters[0]); } + //default action for commands public void default_(Context context, String command, String[] parameters) { if (guardEq(parameters, 0)) { context.youStupid(); diff --git a/woz/CommandRoomActions.java b/woz/CommandRoomActions.java deleted file mode 100644 index 49fe36e..0000000 --- a/woz/CommandRoomActions.java +++ /dev/null @@ -1,35 +0,0 @@ -class CommandRoomActions extends BaseCommand implements Command { - - public CommandRoomActions(){ - description = "Acts accordingly dependent on type of room"; - } - - - - @Override - public void execute (Context context, String command, String parameters[]) { - - //her afgøres hvor man befinder sig, og hvad den enkelt kommando gør i de forskellige sammenhænge - //den skal måske kalde på forskellige handlinger? - switch(context.getCurrent().getName()){ - - case "Park": - System.out.println("hey you are in da park B)"); - break; - case "Bymidte": - System.out.println("hey you are in da bymidte B)"); - break; - case "Hospital": - System.out.println("hey you are in da hospital B)"); - break; - case "Genbrugsstation": - System.out.println("hey you are in da genbrugsstation B)"); - break; - case "Butik": - System.out.println("hey you are in da butik B)"); - break; - default: - break; - } - } -} \ No newline at end of file diff --git a/woz/CommandUnknown.class b/woz/CommandUnknown.class new file mode 100644 index 0000000000000000000000000000000000000000..ba1e63d7e616f7a1295d0604b390625a9c55dcb0 GIT binary patch literal 944 zcmaJ=-EI;=6#fQ~q1$b##agSju1X73EP9PGrX-C`P@7Qcg;xVRX}9dokloo@9>l~; zUqLU_G|>m}UHS^fvqCHc;>DafbLRYg=jYe&i=O~q;E9D4(i|BZ*N|nH-xZN;=pYcv zWyn7BlxLnZq|24|9CDcBux!l3W>`8EXQJi{bzEx=A|nIR(y?J!Y5x83bnPJYlxdkz zilDws;TCP=vBa<%h#mz|U15$qb3$BXgfbDsR(WVVbZf}|xL%nSSy)Da>nYHcDDivBBUPP7~4vv_Es zh)s^Iq>Lqo;#CJcb*6i=MzyAj4J*4Rx<-cshL7XuM~XwIFR97CjEYUIdvSk8{$uG+ z7#y%i@ zx%~9w^7{t{dtWITHhd99GUBK*Y);{y1&d>cVdMX*H0i?{z`-gl1j8DQYl;pn1-J`=-mmuT`0WQeX~gJ_~!A=3=q3tzyi7gzwk;`)_IvT^{2O$(LAJ>pXo X_deY@a`1po8Qb)-h>||y;Gn=s9 zsQYvY>j!>Y?NQq?{mSY8%b0yCc4wu#O>7tPn!*aDv!%D28;-YPo zg{Potd@3A;tE)BKgSXI{X_TpNER8i-t74so^-^W(xa-*_?G+8LkilD_tJtXFUTjjZ zYzh2?5zNtoXE>%iA3`5(+|@^y`OBaaT`IaY^q`j-Lu3kCeG%*zj_`~?m`6Orr-EeH znDluK`ZWxM9%ak(mKg{+w@t&_ldxSu%+U+Yj}qYWb?dH5C>@97N!*5uHil@ zygV&UftYuFL`mMsNVp$R*QyuiS^UWVbiU&DK`OF<@}H@+n|DQNE+ zUvhRj@GK`kERl9%kA@MMnzZG|<|VAX8unqof|k4p_MQy{6}gU2r@Oi%MYL=WP8h}E zW{lx|Dh_HG#{@ToW~!?am?%#RX0(1Mr-oG=sv}SYs~PXdVHMLFj^JpWzEF)CxVt@1 zrn;-^WQ|V|`-Z#kGNT)NRU$BjCp3H-pHZNZ2Q|5AuRAgaSSRGM$zT$n)9`sbNt+9XT@r`r@c$!E zoZ2>4rKdD}5nobpk1QN4t2rY$ZUu83u~IOXw<)VKwuXuElsxWV(ePD#jWuJ|wQYBC zubF3UUVE45cgJ=L zPw0lDTc+g(eH@u&$^tXt3npgH@^y;O%jreWb@DPs-`4N~zQgkwxa01k@J0-u&{kDr z8s0p&9GS#<4d0XENtU>Ix&QkbUc?W`De+Lruo;!QN?0Y(jDohV*tP2A(tV6-MqHET zmXBMGm@Lg_g?Gfr+MH?f1k3-ZtV4}VcR1jEHx|}WevO8=8`BwGV{g`V(|F5tVB`wq zMXWwUog>w|FimG8HPp_9YKh2jKE4PUpKPhT_pHd3$WB=gYL7`Z_jD*-c1zPisc5mR zG)d+}KpQPT8qf#A$xOQ?FDLd{(p4?Kvj^l^Wl`AUx`EG1Qk)RMoNM~a8}XYAZs4~n zekVEkd!D+byT)=B+=3X4AVf6X$08I~t*2`V77Ip7qnpUzJnp)MQgQfB($>t>Z9Gyg zio1x{Mx&bZJ5`JrwmoeHf~DgR^qY#K`np3`n((@Uqg4v$TxV8tHlpyNVHb4E(G5Lk zc{y9?Hc|6})mgpuPNj1|A9KiVp$ih5@z?W~*6;j8$I zf-QFh@NRKY@i!LSHy0&8qaZ@(ZI@u-NV4T?i=%{mSA{(vXJOBm6ni;N;fFlpFLAV2 zzWCU8^!yA;Ps3%XJ-wIF($jYttv$)hXn%!^3Vy_P4I0@lqlspuX=EAAtVAo7%8K=4 zu0|@Kqk4rir!J!73O205=ECyalND^eh`!st2XFiCs9=avVLKSM?+n{_vF$l=3GK<# zgw)eET)}&mfDI53_)c6wC^|Z@4QsI->#&oL#68%61AG`xVj~{FCf?;+3GOF&IR?9) zy#$-;p>`RN$XDqL(9QN0Tx2U(4zrgL=bF z$FJbC*YE|R~Cf#8!lj+`6weH&4<^j7fYiN4p+MpV7m@bwVP z1+1296+A5uK}$4#W(nd3sDyZeM_>jmI7yy881kx%zy@K2Fw#i;2kTUH%A54st&_2Z z#wD-PGBDqY9gngs|9Jr>PqCoL&u?wHH{Q}H52L!o`AB|_skJEo3tVR_`Buve^>#kn zRL1vkELz}~bY-x2vj5fX$%gHz_EdZF1?c_lsi7T>eI1PzJYT_gE4XkDB+c P#JLQ=|BS!l@96j+ZVrzr literal 0 HcmV?d00001 diff --git a/woz/Context.java b/woz/Context.java index 1db202c..a1502b8 100644 --- a/woz/Context.java +++ b/woz/Context.java @@ -1,7 +1,8 @@ /* Context class to hold all context relevant to a session. */ -import java.util.*; +import java.util.Map; +import java.util.HashMap; class Context { @@ -16,19 +17,18 @@ class Context { day = 1; } - //--------------------------------------------------------------------------------------------- - //resetter generated trash, markeringen på om rummet er håndteret og sætter lokation til kontor + //resets amount of generated trash, the handleRoom(), increments the day and transitions to "Kontor" void resetDay(){ World.park.setGeneratedTrash((int)(Math.random()*(15 - 1) + 1)); World.bymidte.setGeneratedTrash((int)(Math.random()*(15 - 1) + 1)); World.hospital.setGeneratedTrash((int)(Math.random()*(15 - 1) + 1)); - World.park.isHandled = false; - World.bymidte.isHandled = false; - World.hospital.isHandled = false; - World.genbrugsstation.isHandled = false; - World.butik.isHandled = false; + World.park.makeHandled(); + World.bymidte.makeHandled(); + World.hospital.makeHandled(); + World.genbrugsstation.makeHandled(); + World.butik.makeHandled(); day++; @@ -37,12 +37,12 @@ void resetDay(){ } - public int getDay(){ + public int getDay(){//gets the day-number return day; } - + //checks if all available actions for the day are done public boolean isDayDone(Space s1, Space s2, Space s3, Space s4, Space s5){ if((s1.isHandled && s2.isHandled && s3.isHandled && s4.isHandled && s5.isHandled)){ return true; @@ -60,13 +60,17 @@ public Player getPlayer() { } public void buyExecuter(String[] parameters) { - String item = parameters[0]; + String item = parameters[0]; //gets the parameter from command (what to buy) Map lowerExtensions = current.getExtensions(); if (containsKey(lowerExtensions.keySet().toArray(new String[0]), item)) { - int[] priceXP = lowerExtensions.get(item); + //checks if the item from the terminal is a valid product in the shop + + int[] priceXP = lowerExtensions.get(item); //the value belonging to the item name is a 2D array containg price and xp + if (player.canAfford(priceXP[0])) { //Add to inventory + player.addToInventory(item, 1); player.subtractMoney(priceXP[0]); player.addPoints(priceXP[1]); @@ -78,6 +82,7 @@ public void buyExecuter(String[] parameters) { } else { System.out.println("Denne udvidelse eksisterer ikke i shoppen"); } + System.out.println("inventory: " + player.getInventory()); } public void transition (String direction) { @@ -107,6 +112,7 @@ public boolean isDone () { private boolean containsKey(String[] hm, String itemName) { + //checks if the itemName is in the array for (String name : hm) { if (itemName.equals(name.toLowerCase().trim())) { return true; diff --git a/woz/Game.class b/woz/Game.class new file mode 100644 index 0000000000000000000000000000000000000000..0b6f8db2c5472214dd132d24c870ef58a2fc5fae GIT binary patch literal 2556 zcmaJ@`F9gl6#k|xnGOSmwg|F0$kqb3g1bcoTRo0s>FQ1=plg`X?-z@%38kTe= zn<=HD!13~Z$wvIX?zD~z>Fxfq6X{sU6f+g2V=zdbkBNYZV;Cex0lZKgH&D#?cZqP6-P@#$v7|_r*fv#u< z?23VYA;dP^n7~aYZpQX=Se2@Tktz}=zf5k;tzWL=_wM4&M!a8T7fF#@G-T4sEs$rd zu8G`QYmk*mab+vx2l=9+w_vHYZTyTB99bEaqek$v2xDaDm6aJk5vW`xA35?xg>E_W z$RZvyuoJryxYfjNx%G~iXy@jlAyJadT+blKZ!>Ybbcrb)F+o=${~i-}U@wicz89&3 ztgMwJjm16#`*2qRcbm8e_tK=HXH(==)L#w)<%xY)cQRG7vx@dMG6`f&9M{fd8wh3IiJ^@20BnN@qmQab52;YqwJt$ z@Sur@@Gx^a;0JDwnI!j!(ASE?cr<~>OgxS!xE*WB%aR=w#Hx;pSUqLph?wYuepqrM z+ZE+ACY}{#B2y_kxk!obc@rLa1scbubOxbuk#9s zrd_E6y0WVg_x~2b{7nt%fjTFhLV?Yy0<~7?S+G4TPg*L=v2u34#~PT>9ghj^jh_&v za?2W4IbkbDku$8URdH{v>e2BwIU=Lf+R1+IF<1sC^*g-wU9MeGfq`T7(fhuM5AdN3 zy;x6xl64E-=V5$o;u9gBPP%RJIF6;}wFG_+6F**GC1{uGB}qpNTC3Z8#}FrBQ2 z`ohGQ_=?W<+pe3jv%Dc;di)$PS_i%n$KS>ybfN(!_q)?F7e-8s;yY5+@y;FqH+iM< z!~hT)R>jenhWU+I%)UI^q&rQD^!qu|uua&wqg>3W;5IwsQZuz^i}MS*_MOj9IXE*F zG4)&QQo~-~kaZi6oRRX&K~`;b#80cB-y;-R&;w3w?Vn$=^_PE*kE13zV3J`EW#l*RN<9uw_nH6-?qp>_KRjP}{9 zt7sQt{)Dh#LReJ8lD+NL7%py@tcVq>nu_jNv8JiGBv$k`73*TfWlhBuHC)Bu*EC#S zTf>IE3_pgA4bA2n`f0F*Uz_DziJ44%HZhvRzjiDjGnQd4F6UFf1@n-`d`_?nagaMl zunlGSj;*MVLbwBe&PxKDC+zRyIXkh=gA8_6mtRCS;JvM zc61bnYB)ye-BG+(!#)CgsEUt9@ZK0c9Ywl^lid7l6rb17!A;im`53+)g;7Ju@2AJ` h{V2R9>fgc7=&l-ByJq1Nkc-RrF;|!v4hAJG!-82w4UUDngH<#HN~75{5GV)JFgO)x z3@=qw_=;Y0(84vMi99CS$`PGDPUle)`ZaWL-NL$q8@MS@|Hp$Ron)-=X>UQ8m+fEO zaj$ME_e}@4utlpdpjCH?)e@mVbsU9>OtU%bE&$ySUTtR~sJO;Z^}^rv1v-lX#i_f; z7QE2iY7C=1KuAi C0aJ98+Ub+n~6y!Nf`+CIRDMw+V}M5o@Gfb+w|Q z@8~8IJ_G%G(1e5z8#uBDJuIR7 z3?wDgUJzTNAd#a6hLuvubKIaTA=AM9N~!3%Vp}2)7&xwwz_-gAI!@TYr!aPn z*t}he;{;lz_NW014{GRe+%4e-p1-Z3ckUkjDQWPKfioD>(3$nzz;@j76N1|PsZhO+ zyQ$GzQva-hahxN6c|kf)Hq*P;RL8@+0jnJ|ZXoi)k7EMo4P3xQ4KXIaY!@m*l_n!U zO&Lhz5e@p5#ILVw7)WJC>voT}QF;8pU;|vHajC+%E;Na&&M@qTsrtPlr~}iO(Q(zl zEFRm}L5thvKose~lMedB-5hUh!Dr-)fiLXhR16snJvkAW!Z)4GO<@)*1t%ZG@dV~{ z%o}(T*I5fyiv6}svm|#axDD)cYsbw`jV{Mo*{2LVjYU>AYrB`%*F8U{p^c>6is6Qa z^E33kVf$vT5_IKFSdkcR8~CBBEIVaBY~*M0oQ_okHr5#TV|J0%)@9>~=gDcu+;q64 zc@9Fyx`DjhL62}o$Gv9k?H(R?$G{zIYB*f9Hw6{4c5u@PHn=JWHV=}9BdHAk>Wdtu zL05}T-nD~@&j2RFr0P#nx-QSirViO{yGv6V4(|F>z1zyT;_}faAH(vIl8Vo`JJ?)WVxal?9%@suX_?+i$ zR!UQKop5h&>@!^2E{P`U-+hYegPgVtg+(V2yj0%Pa7^(uX=4IG@i?WX2X*h9D?#)ut@dpjV|65f~MU_8Hp6wPkwH&sbWn8t$38vm0 zTk6eW#W&;_f`)>^iX54ovy@#Wdz3j>YjTM)hiXm!F(ppan(R~NIIYQLbaBl=&u73L zUqdTbz>M`JG%FFWLbnoqRUEVu!&M}#M5>BjD=}WhfYnyTpw(K%kkyTEs~C~%W7a=# zV&zMmsv`9n_t8+{bDSQ5UbNvLGwwoyF%R%Lgl-%|A5JmG(?rhUFbCNYj*mfFZs8|U zRO_^qSHK193#1<0!RZg_NG>D!dtYN>2j3rB{W~UiaOvhfMMcuXop`B` z!x8d&KhEO;JWr$zEtX_uyXLbT`MkR4b7E+}zmJapZlzxGWd^VaK`%8n#1m$1i zSCQ%|5-J<8(^~lgL&;T^aj#yoE6Fx%b&>C1H#ZuQMk9?zX&OC3qu))b>xbth6%E5mL9fgXNozgk9!&xxy})VV}(I64pP!Z8^%L zl+MzPbkvo!c5v%s=xuk=)+%WTYacR~QP%BfF&>rtzR;Asp+@rNsmehdd8#kXNTcdg zRC=+g>R_Yl4XVCWJA0EnhqAWA->Kg?^B9%^;`TNA7Jpmhi1Hp literal 0 HcmV?d00001 diff --git a/woz/Player.java b/woz/Player.java index bafa745..868f4ba 100644 --- a/woz/Player.java +++ b/woz/Player.java @@ -1,10 +1,14 @@ -import java.util.*; + +import java.util.Map; +import java.util.HashMap; class Player{ private int level; private int points; private int money; private int trash; + HashMap inventory; + private final int LEVEL1 = 10; //level 1 når point er mellem 0 og 9 private final int LEVEL2 = 20; //level 2 når point er mellem 10 og 19 @@ -16,33 +20,51 @@ public Player(){ level = 1; points = 0; money = 200; - trash = 0; + inventory = new HashMap(); + } + + public void addToInventory(String itemName, int amount) { //adds trash to player inventory + if(inventory.containsKey(itemName)){ + inventory.put(itemName, inventory.get(itemName) + amount) ; + }else{ + inventory.put(itemName, Integer.valueOf(amount)); + } + } + public void removeFromInventory(String itemName, int amount){ + if(inventory.containsKey(itemName) && amount <= inventory.get(itemName)){//hashmap function, not our containsKey + //checks if we actually can remove the given amount from inventory + + inventory.put(itemName, inventory.get(itemName) - amount); + }else{ + System.out.println("det er ikke muligt"); + } } - public void addTrash(int amount) { - trash += amount; + public HashMap getInventory(){ + return inventory; } + + public int getTrash() { return trash; } - void addPoints(int amount){//efter køb af udvidelse + void addPoints(int amount){//add points /xp after buying from the shop points += amount; } - void addMoney(int amount){//skal bruges på genbrugsstationen i Space-class + void addMoney(int amount){//earn money by selling trash money += amount; } - void subtractMoney(int amount){//bruges i butik ved køb - if((money-amount) < 0){ - System.out.println("Beklager, men du har ikke råd til dette."); - }else{ + void subtractMoney(int amount){//subtract money from player + if(canAfford(amount)){ //checks if the player has enough money money -= amount; - + }else{ + System.out.printf("Det har du ikke råd til. Du har %d penge på din konto", money); } } @@ -62,7 +84,7 @@ public int getLevel(){ return level; } - public void getStatus(){ + public void getPlayerStatus(){ System.out.println("Level: " + level + ", XP: " + points + ", money: " + money + " on day " + Game.context.getDay()); } diff --git a/woz/Registry.class b/woz/Registry.class new file mode 100644 index 0000000000000000000000000000000000000000..ea52130cd8ccda6df4222db737ed1c40c8d9201b GIT binary patch literal 2133 zcmZ`)-%}G;6#j0q$u7wPAqWZ@D%4^~qA0f35=*PJR$D;IT5PmG+=Odb4N2T=6yN

p% za2Mh*b#$BPL9c+ZB+E|2b06|rs;#Zr)s==o@7%624f8ts_Mlpx>r~4I`UNz(?sx_U zh+KRq4IHHCUQ>yNcw3c~x`D$2p>oYYN+9COhV)brZ<#oXQ311PH{|RNbpOp3wx3-K zC$H4sHgOE^2h6H_=N5cg_xwFlCjWl{nM(w*u-HU{1k5J#2O z`zFre16HL`uQ&|hcxMQK`oum3iLoGg6X)?ElPODY(RS@M=}DKpOQ-iS_&+BfnWWbR zff$_xJrGFk7X^#ms$~qb_(aF2CNAMK_9JLQ;G^lfvZ|WH%&odzlKB{};By^cn3%&n zQ}v~!r_%^LF4h_ir&wXR2KEEKp_097Vo_NqoW_;v#SX&6u>?!UH4|T9*^kDLk~g_7 zOHGenPp5Z?($Tx1y8G2?S<&Td69wELH&_{g@y^HsZgjRb5GliNOni&)IFWbdLrdBA zwMpR5B1NR*E!aAWCQ4Y@Lr330_i7hh*XBs>?PVLcGv+|1V^r~}Y+@A-vE{v{T_G9v zRJ3i+thy|xT(!NX%lhP6Rq>ikAf;hQzy z)_4!|c_H%xBJ&IM!V7e5AeKo)e?_7YPA08_mONk;BFRCk5KSJk3VL$bDj3Nl)&@p0 z*$s?kavK=`kxm4vJckkG*~^e(JiBq04bG#F1Dm8q4fOzeg1`#8JM$A_+1wT~VO-yJ zqy9U90hk!1!9BQv*$;HA0OqrsIF)>N6KCgh;i-j8ZWGhfTIR$iW~L)_Ikt(5{Bij) zjG@Tyh^sdX{*R~7`F>pKoEXx!@TCR?8|sLDh_MgzpXM+FIKoegOW+t9)Eb5M3X_QH zi0eq`knMAcrPXG2&b3gxDTsEQZdD#Vev(_b9>Q-}dQM5JSW!NK<2*ey1DlhyP|`tV zvxS=+X7*wW-z!`Bx^0%a+%bXeZQ82pWN14wpWB`ZpVbDm)DsNn2DGW^NOmZ)iQA76 z(Vjih#M4)QhM!TpmHHsL0OocOr^uDl7~?&SGk)4V2)|SrOCbjTrd~)b@c{D%e=GhS z&2DQejC4Lclge#BL0>MFO=-8LtVdxY{gqRZcOp&0ATbj3bcoLp%=kzqLjNMBkp4kG K5$^j|5B>vbmfYh2 literal 0 HcmV?d00001 diff --git a/woz/Registry.java b/woz/Registry.java index 9af9f1f..0df1387 100644 --- a/woz/Registry.java +++ b/woz/Registry.java @@ -5,9 +5,9 @@ import java.util.Map; class Registry { - Context context; + Context context; Command fallback; - Map commands = new HashMap(); + Map commands = new HashMap(); //key-value map of String name of command and the belonging command //Get basecommands from commands String[] baseCommands = {"exit", "bye", "quit", "help", "go", "reset"}; @@ -22,11 +22,17 @@ public void register (String name, Command command) { } public void dispatch (String line) { - String[] elements = line.toLowerCase().split(" "); - String command = elements[0]; - String[] parameters = getParameters(elements); - Command handler = getCommand(command); + String[] elements = line.toLowerCase().split(" "); //splits the terminal command by " " and puts the strings in an array + String command = elements[0]; //command is the first element of the array + String[] parameters = getParameters(elements); //creates a new array for the parameters from the elements-array + Command handler = getCommand(command); //retrieves the command from the list of commands ((context.getCurrent().isCommandPossible(command) && handler != null) || isInBaseCommands(command) ? handler : fallback).execute(context, command, parameters); + /* + ^^ checks if the command is valid (depending on the location), and checks the handler is not empty (there is an actual command) + or + if the command is a base command, call execute on handler, otherwise call execute on fallback + */ + } public Command getCommand (String commandName) { @@ -37,15 +43,18 @@ public String[] getCommandNames () { return commands.keySet().toArray(new String[0]); } - public boolean isInBaseCommands(String cmd) { + public boolean isInBaseCommands(String cmd) { for (String command : baseCommands) { - if (cmd.equals(command)) {return true;} + if (cmd.equals(command)) { + return true; + } } return false; } // helpers private String[] getParameters (String[] input) { + //returns a string array containg only the parameters (no command) String[] output = new String[input.length-1]; for (int i=0 ; i&epyGiNP(lb02?=FmFi?w=>|}Sz>`vU74Mc5g zTW_mvz0X#ykb2N63Id|l(%P2ZH*IaJ)wZ^^RcjALkbdvYhU`LU`*UGt-toWB_pm}{k^_h&>-<)*4Ff@cEsSyH!88h2UQHGHkM(HR=g+Ot%*X$zsP?wWRndz8I z20r~lGIbJfw2m6ncV2$T=;^35qQuAx5KxUQ)s+Sn3p zYHMn5T-Um4apNj(OlxQ;z;EqbZ*_Unkc~Q)U?~GGZKfCzk)y*bj3%6`VY!ZGtQZWpLS9l0 z$+=r#{xE^MHjk*!xo)PvR7j>SLhrWfScwk`j8B<8R)dr7GQHJFFTs)PnQ4zvG<_Hr zIePi&A?1$hXp`xrDe>%dm>Re1SS|BnM7B4^z-io=^xQCmqeI6UtYuOp7)T8&{g^sU zAzZ+OSwzS7NT_u>E`&*it&6gzEfXhSnnCT>gwVxsUuva0GugOH$vtL32()l;rJ3mo zAx=ii9Je>=nRWPDIKJd za#<w)9`T}pTH-n*-{lkCB3%UZ)GTP^GY>hqFjM1HC(0RYH8pSf0+Pr%WJm! zEE?cif#Vh>ZM)MkGcnib-LuJ9wP#Z-k#$Ke=2~f)MxWAgJ#JvsGiLEQ9V;EPjJ{+#mX%PqGI^ufUMrJw z=$bxjeF(R6Nm|m9_1LAbA>7HxZ8tM1%S_vQHph*W6*C+=X?6E2Z{Drr9%;_7AAHiE zA$(q7?&7RrWehJvr9Fczjik{jW3I+jMNllf+{{9FgCH z8FjR0HS829TFV4|O5k{-)@U*N(({Z;x5i+$yBx)8jPqB@ZzU7|X*{FhD>|OVbA#_)I=j@#3{J+=rkBl- zV1B$GJ_OCriOpB)BjZIgrx`aNJ&b24qUWK*41rp@fM$*e5unO!|Z z&CM$qwXF07$B;6vHRhds3R6Bth1k^ zFm2B>h&QTZy>&->Id7!^v8}(?8V3B>#}lP?jzoiL+fmj@o~sTq zLBoE*PG^liR(KH-LcqxNNTwz$IZqLW=^0)k$$rKrQ754Sj4Ng;N5ukDhlB6*j{yo= zqqT;EQ8W{|(*q#|^rkceu)#K6*K#!xW|$vk=HaZT37vBMcTjc~-_$UeoJBmN1^MtI z!Fu>Rj*9Ry-@GHJF;D%6*I(ftkLg?=&4(8o?);vkwH!-2v#Y9~gs6H7TE~+p-3GlX zuniH;$8kPk8zxrmz;R=6V$Z0q8@8eHF`@|kf$vEqC0Q0@Bn27Ef8!|Jc+A2?Lhxvm zW3-fP1R*P`s-8gPPH4da1SJnisz{NNMGBO;9LM30ifB=@hO$E(3Vu<<7q1m~l~ViC zAIGmGT1=Xik4QL0NGbM5^NWt(X^C z7jmx^j7P3%{4W`CR83 zeq*TI7v{G;uwRD; zl$(4ZrWOj(qxNn&mQJ@FQ>PrcC57asC~|lB4LQF>)hLTcm^f;Xq?^~%bv@V! z8<+43b~7BFeS7g3GT2K8yuzE-L1gKb4PqiTic`@qnsKpc#ib&F%aqeAP;!7Ce-|yM z^Wpyq^dfI_zPIrJnaNVx#bCTkCh6y7CaUUiufR?`AkbXB6Aua8fqD)e6?hgkD*^U;8x2r@YcTKb-SR0tN1G}Rg#kD~-khwl^X!nqwQ^^##oQ$u4jw@L*uVR>A zOACz^@-hIfc%UZX7F7es)A>I1>GF*25udi!0pG$ua^U%0eesc?d&}$PH6{l-HAlImiUR-kNZ2wq-G3_C|HV!L7?l2PV!kKe Zw7Ps3sdrGlOGJoJVXl^n5$quo{{ukmbA$i@ literal 0 HcmV?d00001 diff --git a/woz/Space.java b/woz/Space.java index 609a862..32c4599 100644 --- a/woz/Space.java +++ b/woz/Space.java @@ -6,42 +6,46 @@ import java.util.HashMap; import java.util.Map; import java.util.ArrayList; -import java.util.List; +import java.util.TreeMap; import java.util.Set; -import java.util.*; //----- class Space extends Node { - List commands = new ArrayList(); + ArrayList commands = new ArrayList(); boolean isHandled; - Map extensions; + private Map extensions; private int generatedTrash; Space (String name) { super(name); isHandled = false; - //laver et key-value map, så hhv pris og navn på udvidelse hænger sammen. - extensions = new HashMap<>(); - generatedTrash = (int)(Math.random()*(15 - 1) + 1); + extensions = new HashMap<>(); //laver et key-value map, så hhv pris og navn på udvidelse hænger sammen. + generatedTrash = (int)(Math.random()*(15 - 1) + 1); } public void makeHandled() { - isHandled = true; + isHandled = !isHandled; //toggles isHandled to true or false depending on its current value } - //getter og setter som vi bl.a. skal bruge i resetDay() i Context + //getter for generated trash public int getGeneratedTrash(){ return generatedTrash; } public Map getExtensions() { + /* + returns the map of key-value of the extensions you can buy. + case_insensitive_order so that when we compare the parameter with the elements + in the shop, we are not case sensitive. TreeMap can be case insensitive + */ Map lowerExtensions = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); lowerExtensions.putAll(extensions); return lowerExtensions; } + //sets amount of trash in a location public void setGeneratedTrash(int newAmount){ generatedTrash = newAmount; } @@ -52,41 +56,38 @@ public void welcome() { updateExits(); + //acts according to the location switch(name){ case "Butik": showShop(); makeHandled(); - // System.out.println("you handled the butik. ");//placeholder/tjekker bare at det går igennem break; case "Genbrugsstation": recycle(); makeHandled(); - // System.out.println("you handled the genbrugsstation. ");//placeholder/tjekker bare at det går igennem break; case "Park": collectTrashPark(); makeHandled(); - // System.out.println("you handled the park. ");//placeholder/tjekker bare at det går igennem break; case "Hospital": collectTrashHospital(); makeHandled(); - // System.out.println("you handled the hospital. ");//placeholder/tjekker bare at det går igennem break; case "Bymidte": collectTrashBymidte(); makeHandled(); - // System.out.println("you handled the bymidte. ");//placeholder/tjekker bare at det går igennem break; case "Kontor": //player.getStatus(); + break; default: break; @@ -94,9 +95,11 @@ public void welcome() { } void updateShop(){ + /* + checks the player's level and adjusts the selection in the shop + */ int lvl = Game.player.getLevel(); - //afhængigt af level, har man adgang til forskellige varer. switch(lvl){ case 1: extensions.put("Billboards på Rådhuspladsen", new int[]{20, 10}); @@ -125,6 +128,7 @@ void updateShop(){ } public void showShop() { + //prints out the shop - updates it first updateShop(); System.out.println("Du er trådt ind i butikken. Du har følgende udvalg: \n"); for (String key : extensions.keySet()){ @@ -138,6 +142,7 @@ private void collectTrashPark(){ } public void updateExits() { + //updates what exits are available and lists the relevant commands for the location System.out.println("\n-------------------------------------------"); Set exits = edges.keySet(); System.out.println("Du kan gå mod:"); @@ -179,14 +184,21 @@ public void addCommand(String cmdName) { } public boolean isCommandPossible(String cmdName) { + //checks wether the command is recognizable from the list of commands for (String command : commands) { - if (command.equals(cmdName)) {return true;} + if (command.equals(cmdName)) { + return true; + } } return false; } @Override public Space followEdge (String direction) { - return (Space) (super.followEdge(direction)); + return (Space)(super.followEdge(direction)); + } + + public String spaceToString(){ + return name; } } diff --git a/woz/World.class b/woz/World.class new file mode 100644 index 0000000000000000000000000000000000000000..356bd9521dad694b9ab52a43bf6c1a069f1e9454 GIT binary patch literal 1847 zcmZuyU2_vv7=BK($!^1zmZdG!Qu)wIKN1R+FDcZPmM;kfU2F}AvT2rd={6g7H$d^* z;Wsz~;}tjDc%jt^DkJ0QomY+*UU})QKR^e?=bR)%K_|&M&%W<--hDq$e){Lz2LLAU zaT+a1=+I0gkrL>*>|Aw5e5YI*IbFEy&c_0&gI?K-#|07tgR?pefuvn==3N76Do+OG zI0)0wVM-Hi0$l^S$42Zp^vb2N!P!={qeI6!6BgFf#9R>iMV?<&=LPhfGCF3UOF%p0 zgp2aT1```4U8_)F;2H7`FE4q;*p=E%CiC14W1%55 z@H}6BxEg!P{tG6yD|ZS~Vqj39{g_)Wgw;|M#ZK%6Woc&EL`KruOHb-_?06z&^=J)P z1~wY#GqBCTb_1C-ve;{4ANC8ZiGy5l%?+oV$Q9@u82oRxWHt|&7?bq2Nap%%P&X|N z9WpVFmzg^EO4aeBrxIST+SuSZX=KvGVN5YWPO*5TSmOJ7|ED;)nV{&hL^_TLtXH*T zHvEyvFm#r4UKFP>jYJy9aYDx{CQc&PjQTN;ex#g8vIY7F&aVop=}}#zPDt9Av^rzr zG|tGQ#p0yz3-mPnQ?#kT_t}Chf{JGvubHrMmgV$fH+0x{0^Q97suL#~^076T#hi{e zOyqG+z20&m7Z|qev1%ksb=kzCoSrl@F%>K=Ipw0Xv1Fnw zZRoUNF9a0>6}~odecu41PZX-l2IP=dy!pi{)mN!r@XE1)>umJUja+KADOQ;6oAb)< zOm(T?hG(6EPf42{JM)XDoQitZ@g5ssb?q9_==gwPoNu^JC+(mb&bvoFX(O#hd56p} zw$SAkUMwka2(X@rlhD{Xs_K~osdf&Y+BsR=6a4W8g1|D+vL6~TL_Bm4;y(1e)p`$W zzQkIEI~DF$xJTh$g`ZV;i^9(-+^_I}!b2UY?~u(WtPwk}Sv&1~(%NO`Q`V@R*R2=r zykYIObCRRy6DwFt(h9oCT0t*qE7(Hb3i?T0!H|6_G2WMXa0iDHd$lfYm?%5krH$6G zC)3CEC4w3b-o`pUN<~H~CvIxu?xSCBCb<51AJh4JI69Nfe2rr@oSMtl@ah4rNBah^ z3*5pbiOvgr5B)&0C;1iL9;#uU8x7w=TTjv|)!^MlwyE=*x=!i>>bPA|lr&LP7gX!p zH7S4e2?Mo8xYRH)G{>DO{(_Zg!40lA@GRGM*1|#utF#H77(f?xqnm#n8<0aUDwN*F zX53-zKf_l1zzg?h;$JEIjhE~1Jn;vHMJqC*7g^EID{~)4#5i_};}{jEu}92euegAH z;v&YyA|^zHNxZ{1k0SjDpF-2ouH#)D?+f4||A2=6LXzLV(XC@z$LvGw(xGol{Yft& sXRh8w^i1#ru#js%=Pp!Kvd4g9jFFQ?%zj(V?0=ehlAI68X~9ST0+>LQCjbBd literal 0 HcmV?d00001 diff --git a/woz/World.java b/woz/World.java index 476f673..92086f4 100644 --- a/woz/World.java +++ b/woz/World.java @@ -1,6 +1,7 @@ /* World class for modeling the entire in-game world */ -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; class World { static Space kontor; @@ -9,12 +10,11 @@ class World { static Space hospital; static Space butik; static Space genbrugsstation; - //statiske instanser så Space kan finde dem + World () { - //redigeret til at passe til vores lokationer - mangler ændring ---------------------------------------------------------- - + //creates our locations kontor = new Space("Kontor"); park = new Space("Park"); bymidte = new Space("Bymidte"); //bymidte? rådhusplads? @@ -22,50 +22,53 @@ class World { butik = new Space("Butik"); genbrugsstation = new Space("Genbrugsstation"); + //arrays af hhv navne og steder, som kan sættes ind i et for-loop, der laver edges til alle steder - List locations = new ArrayList(); String[] locationArr = {"kontor", "park", "bymidte", "hospital", "butik", "genbrugsstation"}; Space[] spaceArr = {kontor, park, bymidte, hospital, butik, genbrugsstation}; - Space[] spaces = {kontor, bymidte, genbrugsstation, park, butik, hospital}; - locations.addAll(Arrays.asList(spaces)); - //uddelegerer edges til hver lokation/rum. sørger også for, at et rum ikke har adgang til sig selv. + //uddelegerer edges til hver lokation/rum. sørger også for, at et rum ikke har adgang til sig selv (med kontor som undtagelse). for(int i = 0; i < spaceArr.length; i++){ for(int j = 0; j < locationArr.length; j++){ - if(locationArr[j].toLowerCase().equals(spaceArr[i].toString().toLowerCase())){ - continue; - }else{ + if(!(locationArr[j].toLowerCase().equals(spaceArr[i].spaceToString().toLowerCase()))){ spaceArr[i].addEdge(locationArr[j], spaceArr[j]); } } } + + ArrayList locations = new ArrayList(); + locations.addAll(Arrays.asList(spaceArr)); - for (Space location : locations) { - if (location.name.equals(getEntry().name)) { - location.addCommand("status"); - } else if (location.name.equals(getShop().name)) { - location.addCommand("sell"); - location.addCommand("buy"); - } else { - location.addCommand("pickup"); + //adds valid commands to the locations + for (Space location : locations) { + if (location.name.equals(getEntry().name)) { + location.addCommand("status"); + } else if (location.name.equals(getShop().name)) { + location.addCommand("sell"); + location.addCommand("buy"); + } else { + location.addCommand("pickup"); + } + + location.addCommand("hint"); + location.addCommand("reset"); } - location.addCommand("hint"); - location.addCommand("reset"); - //kontor skal have sig selv som edge, for at resetDay() virker inde fra kontoret af. - //hvis ikke kontor har adgang til sig selv, vil transition() ikke du, da den "næste" - //edge er null. + /* + kontor skal have sig selv som edge, for at resetDay() virker inde fra kontoret af. + hvis ikke kontor har adgang til sig selv, vil transition() ikke du, da den "næste" + edge er null. + */ kontor.addEdge("kontor", kontor); - //------------------------------------------------------------------------------------------------------------------------- this.kontor = kontor; } //Build spaces with SpaceBuilder() -} + - Space getEntry () { - return kontor;//redigeret fra "entry" til "kontor", da kontor fungerer som vores entry + Space getEntry() { + return kontor; //redigeret fra "entry" til "kontor", da kontor fungerer som vores entry } private Space getShop() { From 49e2bf9d1a960785776892fb20fd8564c5941125 Mon Sep 17 00:00:00 2001 From: Matt-G-K <146090539+Matt-G-K@users.noreply.github.com> Date: Sun, 22 Oct 2023 14:36:37 +0200 Subject: [PATCH 12/14] Add files via upload Save Load Command --- woz/Commandsaveload.java | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 woz/Commandsaveload.java diff --git a/woz/Commandsaveload.java b/woz/Commandsaveload.java new file mode 100644 index 0000000..b587cd3 --- /dev/null +++ b/woz/Commandsaveload.java @@ -0,0 +1,71 @@ +import java.io.*; +import java.util.*; + +class Commandsaveload extends BaseCommand implements Command { + private final String fileName; // This variable stores the name of the file where we save and read variables. + private final Map variables; // Use a LinkedHashMap to preserve the order + + // Constructor to initialize the class with a file name. + public Commandsaveload(String fileName) { + this.fileName = fileName; + variables = new LinkedHashMap<>(); + } + + // Method to save a variable and its value to the text file. + public void save(String variableName, String variableValue) { + // Read existing variables, overwrite the file, and then add the new variable. + variables.put(variableName, variableValue); + + try (PrintWriter writer = new PrintWriter(new FileWriter(fileName, false))) { + for (String key : variables.keySet()) { + writer.println(key + "=" + variables.get(key)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Method to read variables from the text file and store them in a map. + public Map load() { + Map variables = new LinkedHashMap<>(); + + try (BufferedReader reader = new BufferedReader(new FileReader(fileName)) ) { + // Read lines from the file and split them into variable name and value. + reader.lines().map(line -> line.split("=", 2)) + .filter(parts -> parts.length == 2) + .forEach(parts -> variables.put(parts[0], parts[1])); + } catch (IOException e) { + e.printStackTrace(); + // Handle any errors that occur during file reading, such as if the file doesn't exist. + } + + return variables; + } + + @Override + public void execute (Context context, String command, String[] parameters) { + + Commandsaveload Commandsaveload = new Commandsaveload("variables.txt"); + + switch(command) { + + case "save": + + + // Save variables + Commandsaveload.save("name", "Tom Smith"); + Commandsaveload.save("age", "34"); + Commandsaveload.save("city", "New Amsterdam"); + Commandsaveload.save("city status", "Polluted"); + Commandsaveload.save("lake status", "5 Trash"); + + break; + + case "load": + // Read and print variables + Map savedVariables = Commandsaveload.load(); + savedVariables.forEach((key, value) -> System.out.println(key + " = " + value)); + break; + } + } +} From 8871d5b66c068d84ecd10ca83ccf159ca27dcdf2 Mon Sep 17 00:00:00 2001 From: Matt-G-K <146090539+Matt-G-K@users.noreply.github.com> Date: Sun, 22 Oct 2023 14:37:33 +0200 Subject: [PATCH 13/14] Update Game.java register save load --- woz/Game.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/woz/Game.java b/woz/Game.java index 46cebe8..054c4ab 100644 --- a/woz/Game.java +++ b/woz/Game.java @@ -26,6 +26,8 @@ private static void initRegistry () { registry.register("go", new CommandGo()); registry.register("help", new CommandHelp(registry)); registry.register("reset", new CommandResetDay()); + registry.register("save", new Commandsaveload("Gem spillet")); + registry.register("load", new Commandsaveload("load spillet")); } From e4c365b31cd3649827ac1ed40234bd7ac10f0986 Mon Sep 17 00:00:00 2001 From: Matt-G-K <146090539+Matt-G-K@users.noreply.github.com> Date: Sun, 22 Oct 2023 14:38:22 +0200 Subject: [PATCH 14/14] Update Registry.java register save load --- woz/Registry.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/woz/Registry.java b/woz/Registry.java index 0df1387..7e7944f 100644 --- a/woz/Registry.java +++ b/woz/Registry.java @@ -10,7 +10,7 @@ class Registry { Map commands = new HashMap(); //key-value map of String name of command and the belonging command //Get basecommands from commands - String[] baseCommands = {"exit", "bye", "quit", "help", "go", "reset"}; + String[] baseCommands = {"exit", "bye", "quit", "help", "go", "reset", "save", "load"}; Registry (Context context, Command fallback) { this.context = context;