From 247af8a28a0eea8b3b46b668c1c76b71b8e13bda Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 13 Apr 2025 17:04:08 -0400 Subject: [PATCH 01/95] Made Existence and body classes --- Body.java | 5 +++++ Existence.java | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 Body.java create mode 100644 Existence.java diff --git a/Body.java b/Body.java new file mode 100644 index 00000000..387079f3 --- /dev/null +++ b/Body.java @@ -0,0 +1,5 @@ +public class Body { + + // Attributes + +} diff --git a/Existence.java b/Existence.java new file mode 100644 index 00000000..45c9dc57 --- /dev/null +++ b/Existence.java @@ -0,0 +1,5 @@ +public class Existence { + + // Attributes + +} From e01ee1e58d4d50338e824da2699adebff487b679 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 14 Apr 2025 14:37:58 -0400 Subject: [PATCH 02/95] Created Item.java I was thinking about Item.java on my way back. I thought about A8, we can overload the constructors to accept different parameters. And this way, we can write all the items in this(maybe not computer because it's more complicated). We can let : Item teddyBear = new Item(...) --- Item.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Item.java diff --git a/Item.java b/Item.java new file mode 100644 index 00000000..c310b3a1 --- /dev/null +++ b/Item.java @@ -0,0 +1,6 @@ +public class Item{ + + //Attributes + + +} \ No newline at end of file From 6be0c397a47850574b0983718f9601dce4cde292 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 14 Apr 2025 23:37:02 -0400 Subject: [PATCH 03/95] Added possible attributes --- Item.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Item.java b/Item.java index c310b3a1..2d0dd94d 100644 --- a/Item.java +++ b/Item.java @@ -1,6 +1,16 @@ public class Item{ //Attributes - + protected String name; + protected String description; + protected Boolean canBeGrabbed; + protected Boolean canBeSitOn; + protected Boolean canBePutItemsOn; + protected Boolean canBeSleptOn; + protected String inside; + + /*Default Constructor */ + + //Items: bed, screwdriver, broom, table, chair, teddyBear, irisPot } \ No newline at end of file From 308309f7b72642c80f92976626695faa8ee19b38 Mon Sep 17 00:00:00 2001 From: jliang50 Date: Tue, 15 Apr 2025 14:11:10 -0400 Subject: [PATCH 04/95] Add files via upload Room Class --- Bedroom.java | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++ Lab.java | 89 ++++++++++++++++++++++++++++++++ Room.java | 47 +++++++++++++++++ 3 files changed, 276 insertions(+) create mode 100644 Bedroom.java create mode 100644 Lab.java create mode 100644 Room.java diff --git a/Bedroom.java b/Bedroom.java new file mode 100644 index 00000000..2c76f37a --- /dev/null +++ b/Bedroom.java @@ -0,0 +1,140 @@ +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +public class Bedroom extends Room { + private Map items; + private GameState state; + + public Bedroom(GameState state) { + this.state = state; + items = new HashMap<>(); + + items.put("toolbox", new Item("toolbox", true, "A dusty toolbox lies on the floor.")); + items.put("box", new Item("box", false, "A small box sits against the wall.")); + items.put("broom", new Item("broom", false, "An old broom leans in a corner.")); + items.put("leg1", new Item("leg1", true, "A mechanical leg hidden inside the box.")); + items.put("leg2", new Item("leg2", true, "A mechanical leg hidden behind the broom.")); + items.put("eye", new Item("eye", true, "A glowing eye rests in an iris pot on the table.")); + items.put("teddyBear", new Item("teddyBear", true, "A well-loved teddy bear sits on the table.")); + items.put("door", new Item("door", false, "A sturdy door leads to the lab.")); + } + + @Override + public void describe() { + System.out.println("You awaken in a dusty, dimly lit bedroom."); + if (!items.get("toolbox").isTaken()) { + System.out.println(items.get("toolbox").getDescription()); + } + System.out.println(items.get("box").getDescription()); + System.out.println(items.get("broom").getDescription()); + + if (state.openedBox && !items.get("leg1").isTaken()) { + System.out.println(items.get("leg1").getDescription()); + } + if (state.lookedBehindBroom && !items.get("leg2").isTaken()) { + System.out.println(items.get("leg2").getDescription()); + } + if (state.canStand()) { + if (!items.get("eye").isTaken()) { + System.out.println(items.get("eye").getDescription()); + } + if (!items.get("teddyBear").isTaken()) { + System.out.println(items.get("teddyBear").getDescription()); + } + System.out.println(items.get("door").getDescription()); + } + } + + @Override + public void handleCommand(String cmd) { + if (cmd.equals("look") || cmd.equals("look around")) { + describe(); + } else if (cmd.equals("take toolbox")) { + takeItem("toolbox"); + state.hasToolbox = true; + } else if (cmd.equals("open box")) { + System.out.println("You open the box. Inside, you see a mechanical leg."); + state.openedBox = true; + } else if (cmd.equals("look behind broom")) { + System.out.println("You move the broom aside. A mechanical leg is hidden behind it."); + state.lookedBehindBroom = true; + } else if (cmd.equals("take leg1")) { + if (state.openedBox) { + takeItem("leg1"); + state.hasLeg1 = true; + } else { + System.out.println("You don't see any leg. Try opening the box first."); + } + } else if (cmd.equals("take leg2")) { + if (state.lookedBehindBroom) { + takeItem("leg2"); + state.hasLeg2 = true; + } else { + System.out.println("You don't see any leg behind the broom."); + } + } else if (cmd.equals("attach legs")) { + if (state.hasLeg1 && state.hasLeg2) { + System.out.println("You attach both legs to your body. You can now stand up."); + state.canStand = true; + } else { + System.out.println("You need both legs to attach them."); + } + } else if (cmd.equals("stand")) { + if (state.canStand()) { + System.out.println("You stand up. You can now reach the table."); + } else { + System.out.println("You can't stand without legs."); + } + } else if (cmd.equals("take eye")) { + if (state.canStand()) { + takeItem("eye"); + state.hasEye = true; + } else { + System.out.println("You can't reach the eye while crawling."); + } + } else if (cmd.equals("take teddyBear")) { + if (state.canStand()) { + takeItem("teddyBear"); + state.hasSoul = true; + System.out.println("You feel a warm sensation. A piece of your soul has returned."); + } else { + System.out.println("The teddy bear is out of reach."); + } + } else if (cmd.equals("open door")) { + if (state.readyForLab()) { + System.out.println("You open the door and move into the lab."); + state.setCurrentRoom("Lab"); + } else { + System.out.println("You're not ready to leave the bedroom yet."); + } + } else { + System.out.println("I don't understand that command."); + } + } + + private void takeItem(String name) { + Item item = items.get(name); + if (item != null && item.canBeGrabbed() && !item.isTaken()) { + item.setTaken(true); + System.out.println("You take the " + item.getName() + "."); + } else { + System.out.println("You cannot take that."); + } + } + + // For testing the Bedroom class. + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + GameState gameState = new GameState(); + Bedroom bedroom = new Bedroom(gameState); + + System.out.println("Welcome to the Bedroom. Type commands to interact."); + while (!gameState.isRoomChanged()) { + System.out.print("> "); + String command = scanner.nextLine(); + bedroom.handleCommand(command); + } + scanner.close(); + } +} \ No newline at end of file diff --git a/Lab.java b/Lab.java new file mode 100644 index 00000000..6a188e2d --- /dev/null +++ b/Lab.java @@ -0,0 +1,89 @@ +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +public class Lab extends Room { + private Map items; + private GameState state; + + public Lab(GameState state) { + this.state = state; + items = new HashMap<>(); + + items.put("computer", new Computer("computer", false, "A computer with folders: History and Controls.")); + items.put("door", new Item("door", false, "A door you cannot open from inside.")); + } + + @Override + public void describe() { + if (!state.hasCrawled) { + System.out.println("Bright lasers block the lab entrance. You must crawl in to avoid them."); + } else { + System.out.println("You are in the lab. Equipment surrounds you. A computer catch your eye."); + System.out.println(items.get("computer").getDescription()); + System.out.println(items.get("door").getDescription()); + } + } + + @Override + public void handleCommand(String cmd) { + if (cmd.equals("look") || cmd.equals("look around")) { + describe(); + } else if (cmd.equals("crawl")) { + state.hasCrawled = true; + System.out.println("You safely crawl into the lab, avoiding the lasers."); + } else if (cmd.equals("walk")) { + if (!state.hasCrawled) { + System.out.println("You walk into the laser. You are vaporized. Game over."); + state.gameOver = true; + } else { + System.out.println("You walk further into the lab."); + } + } else if (cmd.equals("inspect teddyBear")) { + if (state.hasSoul) { + System.out.println("You inspect the teddy bear closely and find a tag stitched with the number: 1234."); + state.passwordRevealed = true; + } else { + System.out.println("You don’t have the teddy bear with you."); + } + } else if (cmd.equals("use computer") || cmd.equals("unlock computer")) { + if (state.passwordRevealed) { + System.out.println("You unlock the computer. There are two folders: History and Controls."); + } else { + System.out.println("The computer is locked. Maybe something you’re carrying has a clue?"); + } + } else if (cmd.equals("click history")) { + System.out.println("You open the History folder. It speaks of Teddy’s creation in 2005."); + state.historyRead = true; + } else if (cmd.equals("click controls")) { + System.out.println("Controls folder contains switches: Reasoning, Memory, Power, Laser."); + } else if (cmd.equals("toggle reasoning")) { + if (!state.reasoningOn) { + state.reasoningOn = true; + System.out.println("You turn on reasoning: 'It's better for me to have reasoning abilities.'"); + } else { + System.out.println("Reasoning is already on."); + } + } else if (cmd.equals("toggle laser")) { + state.laserOn = !state.laserOn; + System.out.println("You toggle the lasers " + (state.laserOn ? "on" : "off") + "."); + } else { + System.out.println("I don't understand that command."); + } + } + + // For testing the Lab class. + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + GameState gameState = new GameState(); + Lab lab = new Lab(gameState); + + System.out.println("Welcome to the Lab. Type commands to interact."); + while (!gameState.gameOver) { + System.out.print("> "); + String command = scanner.nextLine(); + lab.handleCommand(command); + } + scanner.close(); + } +} \ No newline at end of file diff --git a/Room.java b/Room.java new file mode 100644 index 00000000..949369c5 --- /dev/null +++ b/Room.java @@ -0,0 +1,47 @@ +/** + * The Room class is an abstract base class that provides a template + * for all room types in the adventure game. Each room should implement + * its own ways to describe itself and to process player commands. + */ +public abstract class Room { + + // A basic description of the room + public String description; + + public Room() { + description = "An undefined space."; + } + + /** + * Returns the description of the room. + * + * @return A String describing the room. + */ + public String getDescription() { + return description; + } + + /** + * Allows setting a description for the room. + * + * @param description The description string to set. + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * This method should print out the description and visible items + * or aspects of the room based on the game state. + */ + public abstract void describe(); + + /** + * Handles a command input by the player, such as "look" or "take toolbox". + * Each subclass must implement command processing relevant to that room. + * + * @param cmd The command input by the player. + */ + public abstract void handleCommand(String cmd); + +} \ No newline at end of file From d3ee601724307666c7d887b9ad1600e664c86ace Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 15 Apr 2025 23:11:08 -0400 Subject: [PATCH 05/95] Finished first version of Item.java Notes: 1.I deleted several items to start small and make it easier. We can always add more later. 2. I added the two souls as instances of items. We can try setting the two souls as items instead of writing a soul class. 3.I think printManifest of all the items should be in room classes instead of Item class. We could store the available items in an arrayList and print out. 4. I'm unsure of whether this will work. Should we start a main class and put this main method in? --- Item.java | 49 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/Item.java b/Item.java index 2d0dd94d..62356faf 100644 --- a/Item.java +++ b/Item.java @@ -1,16 +1,45 @@ public class Item{ //Attributes - protected String name; - protected String description; - protected Boolean canBeGrabbed; - protected Boolean canBeSitOn; - protected Boolean canBePutItemsOn; - protected Boolean canBeSleptOn; - protected String inside; + private String name; + private String description; + private Boolean canBeGrabbed; - /*Default Constructor */ + /* Default Constructor */ + public Item(String name, String description, Boolean canBeGrabbed){ + this.name = name; + this.description = description; + this.canBeGrabbed = canBeGrabbed; + } - //Items: bed, screwdriver, broom, table, chair, teddyBear, irisPot + /** + * Accessor for item's name + * @return name of the item + */ + public String getName(){ + return this.name; + } -} \ No newline at end of file + /** + * Accessor for item's description + * @return description of the item + */ + public String getDescription(){ + return this.description; + } + + /** + * Main method that creates all the items + */ + public static void main (String[] args){ + Item bed = new Item("bed", "This is a bed.", false); + Item teddyBear = new Item("teddyBear", "This looks like a toy. It feels soft.", true); + Item firstSoul = new Item("firstSoul", "This is the first piece of my soul.", true); + Item box = new Item("box", "This is a box. Seems like there is something inside.", false); + Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true); + Item irisPot = new Item("irisPot", "This is a plantpot. Seems like there is something inside.", false); + Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true); + Item computer = new Item("computer", "This is a computer. I want to check what's on it.", false); + Item secondSoul = new Item("secondSoul","This is the second piece of my soul.", true); + } +} From 879f626f588e8e34ebe8aa84011684fe3c77e8c7 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Wed, 16 Apr 2025 23:51:55 -0400 Subject: [PATCH 06/95] updated existence class with methods and their call signatures + made Human class --- Human.java | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Human.java diff --git a/Human.java b/Human.java new file mode 100644 index 00000000..ab30dd6b --- /dev/null +++ b/Human.java @@ -0,0 +1,3 @@ +public class Human extends Existence { + +} From 13d04f28e86134ac52d9c8345ccbf3a6c0c617be Mon Sep 17 00:00:00 2001 From: tnphammy Date: Wed, 16 Apr 2025 23:52:27 -0400 Subject: [PATCH 07/95] Made Robot class --- Robot.java | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Robot.java diff --git a/Robot.java b/Robot.java new file mode 100644 index 00000000..5cc597f5 --- /dev/null +++ b/Robot.java @@ -0,0 +1,3 @@ +public class Robot extends Existence { + +} From 0a073077b86bc264833b8a14a4f2cc740580feff Mon Sep 17 00:00:00 2001 From: tnphammy Date: Thu, 17 Apr 2025 11:22:19 -0400 Subject: [PATCH 08/95] sout test --- Existence.java | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/Existence.java b/Existence.java index 45c9dc57..adaaf100 100644 --- a/Existence.java +++ b/Existence.java @@ -1,5 +1,47 @@ +import java.util.ArrayList; + public class Existence { // Attributes + protected ArrayList bodyParts = new ArrayList<>(); // List of body parts + + // Methods + public void use(String s) { + + } + + public void touch(String s) { + + } + + public void grab(String s) { + + } + + public void think() { + System.out.println("I am thinking"); + } + + public void fight() { + + } + + public void lookAround() { + + } + + public void inspect() { + + } + + public void crawlTo(String s) { + + } + + + public void walkTo(String direction){ + + } + } From 680d583056e11e6dbdf8defe6c42ea68d8c93095 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 14:58:03 -0400 Subject: [PATCH 09/95] Deleted Body.java --- Body.java | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 Body.java diff --git a/Body.java b/Body.java deleted file mode 100644 index 387079f3..00000000 --- a/Body.java +++ /dev/null @@ -1,5 +0,0 @@ -public class Body { - - // Attributes - -} From db9865df8c6eabd1d2996b476cf81c070e7e0a15 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 14:59:37 -0400 Subject: [PATCH 10/95] Added accessor for status & javadoc I also deleted computer as an item. We will write a separate class for it because of its complexity. --- Item.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Item.java b/Item.java index 62356faf..84587dee 100644 --- a/Item.java +++ b/Item.java @@ -1,3 +1,7 @@ +/** + * The Item class creates items we will use in the rooms. + * Each item has a name, description and a status of whether can be grabbed. + */ public class Item{ //Attributes @@ -28,6 +32,14 @@ public String getDescription(){ return this.description; } + /** + * Accessor for item's status(whether it can be grabbed) + * @return the status(whether it can be grabbed) of the item + */ + public Boolean getItemStatus(){ + return this.canBeGrabbed; + } + /** * Main method that creates all the items */ @@ -39,7 +51,6 @@ public static void main (String[] args){ Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true); Item irisPot = new Item("irisPot", "This is a plantpot. Seems like there is something inside.", false); Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true); - Item computer = new Item("computer", "This is a computer. I want to check what's on it.", false); Item secondSoul = new Item("secondSoul","This is the second piece of my soul.", true); } } From f5985f92f0e19325009e7b634cc99a9e0ae06faf Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 15:33:13 -0400 Subject: [PATCH 11/95] Updated Room.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I kept the description for each room in the command and I added attributes of a name and an arraylist of items. A wild idea: Can we write bedroom and lab as instances of room instead of starting a subclass. But if so, how do we deal with the computer? --- Room.java | 70 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/Room.java b/Room.java index 949369c5..9c775e1c 100644 --- a/Room.java +++ b/Room.java @@ -1,47 +1,63 @@ +import java.util.ArrayList; +import java.util.List; + /** - * The Room class is an abstract base class that provides a template - * for all room types in the adventure game. Each room should implement - * its own ways to describe itself and to process player commands. + * The Room class is a parent class of Bedroom and Lab. */ -public abstract class Room { +public class Room { - // A basic description of the room - public String description; + // Attributes + protected String name = ""; + protected String description = ""; + protected List items; - public Room() { - description = "An undefined space."; + /* Default Constructor */ + public Room(String name, String description){ + if (name != null){ + this.name = name; + } + this.description = description; + this.items = new ArrayList<>(); } /** - * Returns the description of the room. - * - * @return A String describing the room. + * Accessor for the name of the room + * @return name of the room */ - public String getDescription() { - return description; + public String getName() { + return this.name; } /** - * Allows setting a description for the room. - * - * @param description The description string to set. + * Accessor for the description of the room + * @return description of the room */ - public void setDescription(String description) { - this.description = description; + public String getDescription(){ + return this.description; } - + /** - * This method should print out the description and visible items - * or aspects of the room based on the game state. + * Add an item to the items arraylist */ - public abstract void describe(); + public void addItem(Item item) { + if (item != null) { + items.add(item); + } + } /** - * Handles a command input by the player, such as "look" or "take toolbox". - * Each subclass must implement command processing relevant to that room. - * - * @param cmd The command input by the player. + * Remove an item from the items arraylist */ - public abstract void handleCommand(String cmd); + public void removeItem(Item item) { + if (item != null) { + items.remove(item); + } + } + /** + * Accessor for the items arraylist + */ + public List getItems() { + return items; + } } \ No newline at end of file From 23b5d659b83b1e2123afaf3b82dc8d42657b5e1f Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 19:04:12 -0400 Subject: [PATCH 12/95] Deleted Bedroom class and Lab class --- Bedroom.java | 140 --------------------------------------------------- Lab.java | 89 -------------------------------- 2 files changed, 229 deletions(-) delete mode 100644 Bedroom.java delete mode 100644 Lab.java diff --git a/Bedroom.java b/Bedroom.java deleted file mode 100644 index 2c76f37a..00000000 --- a/Bedroom.java +++ /dev/null @@ -1,140 +0,0 @@ -import java.util.HashMap; -import java.util.Map; -import java.util.Scanner; - -public class Bedroom extends Room { - private Map items; - private GameState state; - - public Bedroom(GameState state) { - this.state = state; - items = new HashMap<>(); - - items.put("toolbox", new Item("toolbox", true, "A dusty toolbox lies on the floor.")); - items.put("box", new Item("box", false, "A small box sits against the wall.")); - items.put("broom", new Item("broom", false, "An old broom leans in a corner.")); - items.put("leg1", new Item("leg1", true, "A mechanical leg hidden inside the box.")); - items.put("leg2", new Item("leg2", true, "A mechanical leg hidden behind the broom.")); - items.put("eye", new Item("eye", true, "A glowing eye rests in an iris pot on the table.")); - items.put("teddyBear", new Item("teddyBear", true, "A well-loved teddy bear sits on the table.")); - items.put("door", new Item("door", false, "A sturdy door leads to the lab.")); - } - - @Override - public void describe() { - System.out.println("You awaken in a dusty, dimly lit bedroom."); - if (!items.get("toolbox").isTaken()) { - System.out.println(items.get("toolbox").getDescription()); - } - System.out.println(items.get("box").getDescription()); - System.out.println(items.get("broom").getDescription()); - - if (state.openedBox && !items.get("leg1").isTaken()) { - System.out.println(items.get("leg1").getDescription()); - } - if (state.lookedBehindBroom && !items.get("leg2").isTaken()) { - System.out.println(items.get("leg2").getDescription()); - } - if (state.canStand()) { - if (!items.get("eye").isTaken()) { - System.out.println(items.get("eye").getDescription()); - } - if (!items.get("teddyBear").isTaken()) { - System.out.println(items.get("teddyBear").getDescription()); - } - System.out.println(items.get("door").getDescription()); - } - } - - @Override - public void handleCommand(String cmd) { - if (cmd.equals("look") || cmd.equals("look around")) { - describe(); - } else if (cmd.equals("take toolbox")) { - takeItem("toolbox"); - state.hasToolbox = true; - } else if (cmd.equals("open box")) { - System.out.println("You open the box. Inside, you see a mechanical leg."); - state.openedBox = true; - } else if (cmd.equals("look behind broom")) { - System.out.println("You move the broom aside. A mechanical leg is hidden behind it."); - state.lookedBehindBroom = true; - } else if (cmd.equals("take leg1")) { - if (state.openedBox) { - takeItem("leg1"); - state.hasLeg1 = true; - } else { - System.out.println("You don't see any leg. Try opening the box first."); - } - } else if (cmd.equals("take leg2")) { - if (state.lookedBehindBroom) { - takeItem("leg2"); - state.hasLeg2 = true; - } else { - System.out.println("You don't see any leg behind the broom."); - } - } else if (cmd.equals("attach legs")) { - if (state.hasLeg1 && state.hasLeg2) { - System.out.println("You attach both legs to your body. You can now stand up."); - state.canStand = true; - } else { - System.out.println("You need both legs to attach them."); - } - } else if (cmd.equals("stand")) { - if (state.canStand()) { - System.out.println("You stand up. You can now reach the table."); - } else { - System.out.println("You can't stand without legs."); - } - } else if (cmd.equals("take eye")) { - if (state.canStand()) { - takeItem("eye"); - state.hasEye = true; - } else { - System.out.println("You can't reach the eye while crawling."); - } - } else if (cmd.equals("take teddyBear")) { - if (state.canStand()) { - takeItem("teddyBear"); - state.hasSoul = true; - System.out.println("You feel a warm sensation. A piece of your soul has returned."); - } else { - System.out.println("The teddy bear is out of reach."); - } - } else if (cmd.equals("open door")) { - if (state.readyForLab()) { - System.out.println("You open the door and move into the lab."); - state.setCurrentRoom("Lab"); - } else { - System.out.println("You're not ready to leave the bedroom yet."); - } - } else { - System.out.println("I don't understand that command."); - } - } - - private void takeItem(String name) { - Item item = items.get(name); - if (item != null && item.canBeGrabbed() && !item.isTaken()) { - item.setTaken(true); - System.out.println("You take the " + item.getName() + "."); - } else { - System.out.println("You cannot take that."); - } - } - - // For testing the Bedroom class. - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - GameState gameState = new GameState(); - Bedroom bedroom = new Bedroom(gameState); - - System.out.println("Welcome to the Bedroom. Type commands to interact."); - while (!gameState.isRoomChanged()) { - System.out.print("> "); - String command = scanner.nextLine(); - bedroom.handleCommand(command); - } - scanner.close(); - } -} \ No newline at end of file diff --git a/Lab.java b/Lab.java deleted file mode 100644 index 6a188e2d..00000000 --- a/Lab.java +++ /dev/null @@ -1,89 +0,0 @@ -import java.util.HashMap; -import java.util.Map; -import java.util.Scanner; - -public class Lab extends Room { - private Map items; - private GameState state; - - public Lab(GameState state) { - this.state = state; - items = new HashMap<>(); - - items.put("computer", new Computer("computer", false, "A computer with folders: History and Controls.")); - items.put("door", new Item("door", false, "A door you cannot open from inside.")); - } - - @Override - public void describe() { - if (!state.hasCrawled) { - System.out.println("Bright lasers block the lab entrance. You must crawl in to avoid them."); - } else { - System.out.println("You are in the lab. Equipment surrounds you. A computer catch your eye."); - System.out.println(items.get("computer").getDescription()); - System.out.println(items.get("door").getDescription()); - } - } - - @Override - public void handleCommand(String cmd) { - if (cmd.equals("look") || cmd.equals("look around")) { - describe(); - } else if (cmd.equals("crawl")) { - state.hasCrawled = true; - System.out.println("You safely crawl into the lab, avoiding the lasers."); - } else if (cmd.equals("walk")) { - if (!state.hasCrawled) { - System.out.println("You walk into the laser. You are vaporized. Game over."); - state.gameOver = true; - } else { - System.out.println("You walk further into the lab."); - } - } else if (cmd.equals("inspect teddyBear")) { - if (state.hasSoul) { - System.out.println("You inspect the teddy bear closely and find a tag stitched with the number: 1234."); - state.passwordRevealed = true; - } else { - System.out.println("You don’t have the teddy bear with you."); - } - } else if (cmd.equals("use computer") || cmd.equals("unlock computer")) { - if (state.passwordRevealed) { - System.out.println("You unlock the computer. There are two folders: History and Controls."); - } else { - System.out.println("The computer is locked. Maybe something you’re carrying has a clue?"); - } - } else if (cmd.equals("click history")) { - System.out.println("You open the History folder. It speaks of Teddy’s creation in 2005."); - state.historyRead = true; - } else if (cmd.equals("click controls")) { - System.out.println("Controls folder contains switches: Reasoning, Memory, Power, Laser."); - } else if (cmd.equals("toggle reasoning")) { - if (!state.reasoningOn) { - state.reasoningOn = true; - System.out.println("You turn on reasoning: 'It's better for me to have reasoning abilities.'"); - } else { - System.out.println("Reasoning is already on."); - } - } else if (cmd.equals("toggle laser")) { - state.laserOn = !state.laserOn; - System.out.println("You toggle the lasers " + (state.laserOn ? "on" : "off") + "."); - } else { - System.out.println("I don't understand that command."); - } - } - - // For testing the Lab class. - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - GameState gameState = new GameState(); - Lab lab = new Lab(gameState); - - System.out.println("Welcome to the Lab. Type commands to interact."); - while (!gameState.gameOver) { - System.out.print("> "); - String command = scanner.nextLine(); - lab.handleCommand(command); - } - scanner.close(); - } -} \ No newline at end of file From 914e9bc4b1eb2c36bb0a0d43ca30474b1f679350 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 19:05:24 -0400 Subject: [PATCH 13/95] Updated javadoc I think it's a better idea to let bedroom and lab be instances of the room instead of subclasses --- Room.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Room.java b/Room.java index 9c775e1c..2bebca01 100644 --- a/Room.java +++ b/Room.java @@ -2,7 +2,9 @@ import java.util.List; /** - * The Room class is a parent class of Bedroom and Lab. + * The Room class represents a typical room that has a name, decription + * and a list of items. + * We currently have two rooms in our game: a bedroom and a lab. */ public class Room { @@ -16,7 +18,9 @@ public Room(String name, String description){ if (name != null){ this.name = name; } - this.description = description; + if (description != null){ + this.description = description; + } this.items = new ArrayList<>(); } @@ -35,7 +39,7 @@ public String getName() { public String getDescription(){ return this.description; } - + /** * Add an item to the items arraylist */ From ab41a7ff14f97891897ac6b80fdb2c30ec64c995 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 19:05:48 -0400 Subject: [PATCH 14/95] Deleted main method and put in Main.java --- Item.java | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/Item.java b/Item.java index 84587dee..1b81d800 100644 --- a/Item.java +++ b/Item.java @@ -39,18 +39,4 @@ public String getDescription(){ public Boolean getItemStatus(){ return this.canBeGrabbed; } - - /** - * Main method that creates all the items - */ - public static void main (String[] args){ - Item bed = new Item("bed", "This is a bed.", false); - Item teddyBear = new Item("teddyBear", "This looks like a toy. It feels soft.", true); - Item firstSoul = new Item("firstSoul", "This is the first piece of my soul.", true); - Item box = new Item("box", "This is a box. Seems like there is something inside.", false); - Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true); - Item irisPot = new Item("irisPot", "This is a plantpot. Seems like there is something inside.", false); - Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true); - Item secondSoul = new Item("secondSoul","This is the second piece of my soul.", true); - } -} +} \ No newline at end of file From 68567e713e3712d47056858b845d34998c163fc4 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 19:09:05 -0400 Subject: [PATCH 15/95] Created Main.java This is the class where we implement the classes and methods we have written and run the game. I currently created the items and two rooms. Much more to be added later, but this is a good start! --- Main.java | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Main.java diff --git a/Main.java b/Main.java new file mode 100644 index 00000000..48e27c16 --- /dev/null +++ b/Main.java @@ -0,0 +1,35 @@ +/** + * The Main class is where we implement all the classes and run the game + */ +public class Main { + public static void main(String[] args) { + + //Create all the items needed + Item bed = new Item("bed", "This is a bed.", false); + Item teddyBear = new Item("teddyBear", "This looks like a toy. It feels soft.", true); + Item firstSoul = new Item("firstSoul", "This is the first piece of my soul.", true); + Item box = new Item("box", "This is a box. Seems like there is something inside.", false); + Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true); + Item irisPot = new Item("irisPot", "This is a plantpot. Seems like there is something inside.", false); + Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true); + Item secondSoul = new Item("secondSoul","This is the second piece of my soul.", true); + + + //Create the Bedroom + Room bedroom = new Room("Bedroom", "This is a bedroom."); + bedroom.addItem(bed); + bedroom.addItem(teddyBear); + bedroom.addItem(firstSoul); + bedroom.addItem(box); + bedroom.addItem(leg); + bedroom.addItem(eye); + bedroom.addItem(irisPot); + + //Create the Lab + Room lab = new Room("Lab", "This is a lab."); + lab.addItem(secondSoul); + //Remember to add the computer after Computer.java is finished + //I don't know how to add the laser yet but we will figure it out + + } +} From dc94980da77c020c4beb22e10ac014f83c3a08b2 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 19:27:13 -0400 Subject: [PATCH 16/95] Added attribute Boolean laserActive and its accessor We can take advantage of this attribute later. If laserActive == true && (the user chooses to walk), the player will die, achieving the first ending. --- Room.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Room.java b/Room.java index 2bebca01..87e84d56 100644 --- a/Room.java +++ b/Room.java @@ -9,18 +9,20 @@ public class Room { // Attributes - protected String name = ""; - protected String description = ""; - protected List items; + private String name = ""; + private String description = ""; + private Boolean laserActive; + private List items; /* Default Constructor */ - public Room(String name, String description){ + public Room(String name, String description, Boolean laserActive){ if (name != null){ this.name = name; } if (description != null){ this.description = description; } + this.laserActive = laserActive; this.items = new ArrayList<>(); } @@ -40,6 +42,14 @@ public String getDescription(){ return this.description; } + /** + * Accessor for the laser status of the room + * @return True if the room is laser activated and false otherwise + */ + public Boolean getLaserStatus(){ + return this.laserActive; + } + /** * Add an item to the items arraylist */ From a0d26fc0a7f40b484ea51000d3242b962a3dc42a Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 17 Apr 2025 19:27:58 -0400 Subject: [PATCH 17/95] Updated room laserActive in parameters --- Main.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Main.java b/Main.java index 48e27c16..f4a65723 100644 --- a/Main.java +++ b/Main.java @@ -16,7 +16,7 @@ public static void main(String[] args) { //Create the Bedroom - Room bedroom = new Room("Bedroom", "This is a bedroom."); + Room bedroom = new Room("Bedroom", "This is a bedroom.", false); bedroom.addItem(bed); bedroom.addItem(teddyBear); bedroom.addItem(firstSoul); @@ -26,10 +26,8 @@ public static void main(String[] args) { bedroom.addItem(irisPot); //Create the Lab - Room lab = new Room("Lab", "This is a lab."); + Room lab = new Room("Lab", "This is a lab.", true); lab.addItem(secondSoul); //Remember to add the computer after Computer.java is finished - //I don't know how to add the laser yet but we will figure it out - } } From 2986e3aab0ac0e25b55afb39a6e416c4eaaf653e Mon Sep 17 00:00:00 2001 From: tnphammy Date: Fri, 18 Apr 2025 15:05:50 -0400 Subject: [PATCH 18/95] deleted Body.java --- Body.java | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 Body.java diff --git a/Body.java b/Body.java deleted file mode 100644 index 387079f3..00000000 --- a/Body.java +++ /dev/null @@ -1,5 +0,0 @@ -public class Body { - - // Attributes - -} From 6800bf2253356bca159b454721dd970ad17e3bf9 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sat, 19 Apr 2025 02:48:48 -0400 Subject: [PATCH 19/95] Wrote most methods for existence class; overrode fight() in Human and Robot classes differently --- Existence.java | 113 ++++++++++++++++++++++++++++++++++++++++++++----- Human.java | 34 +++++++++++++++ Robot.java | 33 +++++++++++++++ 3 files changed, 170 insertions(+), 10 deletions(-) diff --git a/Existence.java b/Existence.java index adaaf100..eb08ddc1 100644 --- a/Existence.java +++ b/Existence.java @@ -1,35 +1,127 @@ import java.util.ArrayList; public class Existence { - + // Attributes - protected ArrayList bodyParts = new ArrayList<>(); // List of body parts + public String name; + protected ArrayList inventory = new ArrayList<>(); + protected int health; // Imaginary health bar + public Boolean isAlive; + + // Constructor + + /** + * Default player constructor + */ + public Existence(String name, int health, Boolean isAlive) { + this.name = "Teddy"; + this.isAlive = true; + this.health = 100; // User starts the game with full health. + this.inventory = new ArrayList(); + } // Methods - public void use(String s) { + // Accessors / changers + + public String getName() { + return this.name; + } + /** + * Getter for one's health bar + * @return Current health bar number + */ + public int getHealth() { + return this.health; } - public void touch(String s) { + /** + * Decreases health (while fighting) + */ + public void weaken() { + this.health -= 20; + } + + /** + * Immediately changes one's isAlive state to false, and health to 0. + * Often as a result of being electrocuted or hit by a laser beam. + */ + public void die() { + this.health = 0; + this.isAlive = false; + } + // Game Functions + + /** + * Browse all, and utilise a functionality of an item + */ + public void use(Item s) { + if(inventory.contains(s)) { + System.out.println(s.getDescription()); // Placeholder for .getUse() + } + else { + throw new RuntimeException("You to not have " + s.getName() + ". Take it first!."); + } } - public void grab(String s) { + /** + * Touch an item, which gives its description, NOT add it to inventory. + * @param s The item + */ + public void touch(Item s) { + System.out.println(s.getDescription()); + } + /** + * Lets the user take/own an item (add it to inventory) + * @param s the item + */ + public void take(Item s) { + if(this.inventory.contains(s)) { + throw new RuntimeException("You already have " + s.getName() + "."); + } + else { + this.inventory.add(s); + System.out.println(s.getName() + " successfully added to your inventory!"); + } } - public void think() { - System.out.println("I am thinking"); + /** + * Print the ArrayList of player's inventory. + */ + public void printInventory() { + System.out.println("Your inventory contains:"); + System.out.println(this.inventory.toString()); } - public void fight() { - + /** + * Lets the user access history of an item + * @param s The item + */ + public void think(Item s) { + System.out.println("I am thinking..."); + // s.getHistory() //Placeholder for that as well } - public void lookAround() { + /** + * User fights another existence for a specified number of times + * @param e The other entity + * @param times The number of times to fight + */ + public void fight(Existence e, int times) { + System.out.println("I am fighting!"); + } + /** + * See description of the surrounding space. + * @param r The room one is in + */ + public void lookAround(Room r) { + System.out.println("You are in: " + r.getDescription()); } + public void inspect() { } @@ -43,5 +135,6 @@ public void walkTo(String direction){ } + } diff --git a/Human.java b/Human.java index ab30dd6b..13e10acb 100644 --- a/Human.java +++ b/Human.java @@ -1,3 +1,37 @@ public class Human extends Existence { + // Attributes + + // Constructor + + /** + * Default constructor for 'Human' + * @param name + * @param health + * @param isAlive + */ + public Human(String name, int health, Boolean isAlive) { + super(name, health, isAlive); + } + + + // Methods + + + // To overload + /** + * User fights another existence + */ + public void fight(Robot e, int times) { + for(int i = 0; i <= times; i++) { + this.health -= 20; + System.out.println("I am fighting!"); + } + System.out.println("I am so tired, but I can keep going!"); + + + } + + + // To override } diff --git a/Robot.java b/Robot.java index 5cc597f5..8f4806fa 100644 --- a/Robot.java +++ b/Robot.java @@ -1,3 +1,36 @@ public class Robot extends Existence { + /** + * Default constructor for 'Human' + * @param name + * @param health + * @param isAlive + */ + public Robot(String name, int health, Boolean isAlive) { + super(name, health, isAlive); + } + + // Methods + public void electrocute(Human h) { + System.out.println(h.getName() + " is temporarily unconscious."); + } + + // To overload + + // To override + + /** + * User fights another existence + */ + public void fight(Human h, int times) { + for(int i = 0; i <= 3; i++) { + this.health -= 20; + System.out.println("I am fighting!"); + } + System.out.println("I am so tired, maybe I need to try something else..."); + + } + + + } From 058e71dcb33373c5c9ce8974bb51748da5d8597f Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sat, 19 Apr 2025 02:49:18 -0400 Subject: [PATCH 20/95] made respawn() for Existence class --- Existence.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Existence.java b/Existence.java index eb08ddc1..44817d53 100644 --- a/Existence.java +++ b/Existence.java @@ -48,7 +48,14 @@ public void weaken() { */ public void die() { this.health = 0; - this.isAlive = false; + this.isAlive = false; // need to make some loop to restart the game? // Maybe add Scanner to ask user to keep playing or not? + + } + + public void respawn() { + this.health = 100; + this.isAlive = true; + System.out.println("I am reborn!"); } // Game Functions From bdd754fb9c681f0f8d4f5187ce0951372ac7770c Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 20 Apr 2025 15:32:54 -0400 Subject: [PATCH 21/95] Created Scanner --- Main.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Main.java b/Main.java index f4a65723..17e96f7f 100644 --- a/Main.java +++ b/Main.java @@ -1,3 +1,15 @@ +import java.util.Scanner; + +/** + * Starts and runs the conversation with the user + * Asks the user how many rounds they want to chat for + */ + public void respawnChat() { + Scanner scanner = new Scanner(System.in); + System.out.print("Do you want to die or respawn to play again?"); + } + Scanner.close(); + /** * The Main class is where we implement all the classes and run the game */ From 49eaaa75e227a55bfb2177ba44ea5ee4a2defba4 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 20 Apr 2025 15:46:06 -0400 Subject: [PATCH 22/95] Fixed scanner close --- Main.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Main.java b/Main.java index 17e96f7f..44cacd25 100644 --- a/Main.java +++ b/Main.java @@ -7,9 +7,9 @@ public void respawnChat() { Scanner scanner = new Scanner(System.in); System.out.print("Do you want to die or respawn to play again?"); + scanner.close(); } - Scanner.close(); - + /** * The Main class is where we implement all the classes and run the game */ From 07d7e9ee8bd83a44a629df7c87977971c04d9bd8 Mon Sep 17 00:00:00 2001 From: jliang50 Date: Sun, 20 Apr 2025 16:14:01 -0400 Subject: [PATCH 23/95] Add files via upload --- Computer.java | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 Computer.java diff --git a/Computer.java b/Computer.java new file mode 100644 index 00000000..3426a0ba --- /dev/null +++ b/Computer.java @@ -0,0 +1,133 @@ +/** + * Represents the lab computer with two folders (History & Control Panel) + * and a set of toggleable controls. + */ +public class Computer extends Item { + + // locked until the player unlocks it + private boolean locked; + // control panel states + private boolean reasoning; // default off + private boolean power; // default on + private boolean memory; // default off + private boolean laser; // default on + + /** + * Constructor + */ + public Computer() { + super("computer", + "A lab computer with two folders: History and Control Panel.", + false); + this.locked = true; + this.reasoning = false; + this.power = true; + this.memory = false; + this.laser = true; + } + + /** Unlocks the computer so folders can be accessed. */ + public void unlock() { + if (locked) { + locked = false; + System.out.println("You hear a click—the computer is now unlocked. Two folders appear: History and Control Panel."); + } else { + System.out.println("The computer is already unlocked."); + } + } + + /** + * Clicks on one of the two folders. + * @param folderName either "history" or "control" + */ + public void clickFolder(String folderName) { + if (locked) { + System.out.println("The computer is locked. You need to unlock it first."); + return; + } + switch (folderName.toLowerCase()) { + case "history": + openHistory(); + break; + case "control": + case "control panel": + openControlPanel(); + break; + default: + System.out.println("No such folder. Try \"History\" or \"Control\"."); + } + } + + /** Prints the history. Not completed */ + private void openHistory() { + System.out.println("Today, April 13, 2005, I created the first Teddy prototype. This is looking great, I’m hoping…"); + } + + /** Displays the control panel with current switch states. */ + private void openControlPanel() { + System.out.println("=== Control Panel ==="); + System.out.println("Reasoning: " + (reasoning ? "On" : "Off")); + System.out.println("Power: " + (power ? "On" : "Off")); + System.out.println("Memory: " + (memory ? "On" : "Off")); + System.out.println("Laser: " + (laser ? "On" : "Off")); + System.out.println("TradeBody and SelfDestruct are present but restricted."); + } + + /** Toggles reasoning on; cannot be turned off once on. */ + public void toggleReasoning() { + if (!reasoning) { + reasoning = true; + System.out.println("Reasoning is now On. I can think more clearly."); + } else { + System.out.println("It's better for me to have reasoning abilities."); + } + } + + /** Attempts to toggle power off/on; power must remain on. */ + public void togglePower() { + System.out.println("I need power On to function."); + } + + /** Toggles memory restoration on; cannot be turned off once on. */ + public void toggleMemory() { + if (!memory) { + memory = true; + System.out.println("Seems like I don’t have any memories. I need to restore them."); + } else { + System.out.println("I don’t want to delete these valuable memories!"); + } + } + + /** Toggles the lab’s lasers off; cannot be turned on again. */ + public void toggleLaser() { + if (laser) { + laser = false; + System.out.println("Laser is now Off. The path to the lab is clear."); + } else { + System.out.println("I’d better keep the laser Off for my own safety."); + } + } + + /** + * Attempt to trade bodies between two existences. + * Always prints restriction because no second existence present. + */ + public void tradeBody(Existence e1, Existence e2) { + System.out.println("You can only trade bodies if there is at least another existence present."); + } + + /** + * Attempts self-destruction. Only a human operator may trigger it. + * @param operator the one pressing the button + * @param robot the robot body to destroy + */ + public void selfDestruct(Existence operator, Existence robot) { + if (operator instanceof Human) { + System.out.println("Self-destruct sequence initiated! Boom!"); + robot.die(); + } else { + System.out.println("This button is for human use only."); + } + } + +} From 99e77d5120cc8f31205e5d043c1115773823fc58 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 20 Apr 2025 16:12:10 -0400 Subject: [PATCH 24/95] Add respawn functionality and user interaction for game continuation --- Existence.java | 53 +++++++++++++++++++++++++++++++++++++++++++++----- Main.java | 15 ++++---------- 2 files changed, 52 insertions(+), 16 deletions(-) diff --git a/Existence.java b/Existence.java index 44817d53..bf08ce4d 100644 --- a/Existence.java +++ b/Existence.java @@ -1,4 +1,5 @@ import java.util.ArrayList; +import java.util.Scanner; public class Existence { @@ -18,6 +19,7 @@ public Existence(String name, int health, Boolean isAlive) { this.isAlive = true; this.health = 100; // User starts the game with full health. this.inventory = new ArrayList(); + } // Methods @@ -35,6 +37,14 @@ public int getHealth() { return this.health; } + /** + * Get user's isAlive value (true/false) + */ + public Boolean getIsAlive() { + return this.isAlive; + } + + /** * Decreases health (while fighting) */ @@ -48,14 +58,47 @@ public void weaken() { */ public void die() { this.health = 0; - this.isAlive = false; // need to make some loop to restart the game? // Maybe add Scanner to ask user to keep playing or not? - + this.isAlive = false; + System.out.println(this.getHealth()); + respawnChat(); } + /** + * Become alive again + */ public void respawn() { - this.health = 100; - this.isAlive = true; - System.out.println("I am reborn!"); + this.getIsAlive(); + if(this.isAlive == false) { // Check that user is actually dead + this.health = 100; + this.isAlive = true; + System.out.println("I am reborn!"); + } + else { + throw new RuntimeException("You are still alive! "); + } + } + +/** + * Starts and runs the conversation with the user + * Asks the user how many rounds they want to chat for + */ + public void respawnChat() { + Scanner scanner = new Scanner(System.in); + System.out.println("Do you want to die or respawn to play again? Press Y to respawn and N to die."); + + String choice = scanner.nextLine(); + if (choice.equals("Y")) { + this.getIsAlive(); + this.respawn(); + System.out.println("You're alive again - Hooray!"); + } + else if (choice.equals("N")) { + System.out.println("Okay, you're dead. Bye!"); + } + else { + System.out.println("I don't understand what you wrote. Try only Y or N."); + } + scanner.close(); } // Game Functions diff --git a/Main.java b/Main.java index 44cacd25..7286f125 100644 --- a/Main.java +++ b/Main.java @@ -1,15 +1,5 @@ -import java.util.Scanner; - -/** - * Starts and runs the conversation with the user - * Asks the user how many rounds they want to chat for - */ - public void respawnChat() { - Scanner scanner = new Scanner(System.in); - System.out.print("Do you want to die or respawn to play again?"); - scanner.close(); - } + /** * The Main class is where we implement all the classes and run the game */ @@ -41,5 +31,8 @@ public static void main(String[] args) { Room lab = new Room("Lab", "This is a lab.", true); lab.addItem(secondSoul); //Remember to add the computer after Computer.java is finished + + Human tammy = new Human("teddy", 100, true); + tammy.die(); } } From 178ff9dc9f48004f6e4808dfb9c5186421abc294 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 20 Apr 2025 17:10:15 -0400 Subject: [PATCH 25/95] Refactor Computer class methods for improved readability and add overloaded selfDestruct methods for better functionality --- Computer.java | 97 +++++++++++++++++++++++++++++++------------------- Existence.java | 2 -- Human.java | 10 ++++++ Main.java | 12 ++++++- 4 files changed, 81 insertions(+), 40 deletions(-) diff --git a/Computer.java b/Computer.java index 3426a0ba..20341bda 100644 --- a/Computer.java +++ b/Computer.java @@ -28,11 +28,11 @@ public Computer() { /** Unlocks the computer so folders can be accessed. */ public void unlock() { - if (locked) { - locked = false; - System.out.println("You hear a click—the computer is now unlocked. Two folders appear: History and Control Panel."); + if (this.locked == true) { + this.locked = false; + System.out.println("\nYou hear a click—the computer is now unlocked. Two folders appear: History and Control Panel."); } else { - System.out.println("The computer is already unlocked."); + System.out.println("\nThe computer is already unlocked."); } } @@ -41,9 +41,8 @@ public void unlock() { * @param folderName either "history" or "control" */ public void clickFolder(String folderName) { - if (locked) { - System.out.println("The computer is locked. You need to unlock it first."); - return; + if (this.locked == true) { + System.out.println("\nThe computer is locked. You need to unlock it first."); } switch (folderName.toLowerCase()) { case "history": @@ -54,57 +53,66 @@ public void clickFolder(String folderName) { openControlPanel(); break; default: - System.out.println("No such folder. Try \"History\" or \"Control\"."); + System.out.println("\nNo such folder. Try \"History\" or \"Control\"."); } } /** Prints the history. Not completed */ private void openHistory() { - System.out.println("Today, April 13, 2005, I created the first Teddy prototype. This is looking great, I’m hoping…"); + System.out.println("\nHistory: \n Today, April 13, 2005, I created the first Teddy prototype. This is looking great, I’m hoping that we can be best friends!"); } /** Displays the control panel with current switch states. */ private void openControlPanel() { - System.out.println("=== Control Panel ==="); - System.out.println("Reasoning: " + (reasoning ? "On" : "Off")); - System.out.println("Power: " + (power ? "On" : "Off")); - System.out.println("Memory: " + (memory ? "On" : "Off")); - System.out.println("Laser: " + (laser ? "On" : "Off")); - System.out.println("TradeBody and SelfDestruct are present but restricted."); + System.out.println("\n=== Control Panel ==="); + System.out.println("Reasoning: " + (this.reasoning ? "On" : "Off")); + System.out.println("Power: " + (this.power ? "On" : "Off")); + System.out.println("Memory: " + (this.memory ? "On" : "Off")); + System.out.println("Laser: " + (this.laser ? "On" : "Off")); + System.out.println("TradeBody: " + "(Restricted)"); + System.out.println("SelfDestruct: " + "(Restricted)"); } /** Toggles reasoning on; cannot be turned off once on. */ public void toggleReasoning() { - if (!reasoning) { - reasoning = true; - System.out.println("Reasoning is now On. I can think more clearly."); + if (this.reasoning == false) { + this.reasoning = true; + System.out.println("\nReasoning is now On. I can think more clearly."); } else { - System.out.println("It's better for me to have reasoning abilities."); + System.out.println("\nIt's better for me to have reasoning abilities."); } } /** Attempts to toggle power off/on; power must remain on. */ public void togglePower() { - System.out.println("I need power On to function."); + System.out.println("\nI need power On to function."); } /** Toggles memory restoration on; cannot be turned off once on. */ - public void toggleMemory() { - if (!memory) { - memory = true; - System.out.println("Seems like I don’t have any memories. I need to restore them."); + public void toggleMemory(Existence e, Item s) { + if (this.memory == false) { + this.memory = true; + System.out.println("\nI'm starting to remember things...\n [ACHIEVEMENT UNLOCKED] You have unlocked the second piece of your soul."); + e.take(s); // Add the soul piece to player's inventory. + if(this.reasoning == false) { + System.out.println("\nI don't understand what these memories mean... How can I understand it?"); + } + else if (this.reasoning == true) { + System.out.println("\nHmmm... \nThis is MY memory! I AM Teddy!\n [ACHIEVEMENT UNLOCKED] You found out about your true identity.\n Truth is: You used to be a scientist, who tried to make a robot called Teddy, but it outsmarted you and has traded bodies with you. Go get your body back!"); + } + } else { - System.out.println("I don’t want to delete these valuable memories!"); + System.out.println("\nI don’t want to delete these valuable memories!"); } } /** Toggles the lab’s lasers off; cannot be turned on again. */ public void toggleLaser() { - if (laser) { - laser = false; - System.out.println("Laser is now Off. The path to the lab is clear."); + if (this.laser == true) { + this.laser = false; + System.out.println("\nLaser is now Off. The path to the lab is clear."); } else { - System.out.println("I’d better keep the laser Off for my own safety."); + System.out.println("\nI’d better keep the laser Off for my own safety."); } } @@ -113,7 +121,7 @@ public void toggleLaser() { * Always prints restriction because no second existence present. */ public void tradeBody(Existence e1, Existence e2) { - System.out.println("You can only trade bodies if there is at least another existence present."); + System.out.println("\nYou can only trade bodies if there is at least another existence present."); } /** @@ -121,13 +129,28 @@ public void tradeBody(Existence e1, Existence e2) { * @param operator the one pressing the button * @param robot the robot body to destroy */ - public void selfDestruct(Existence operator, Existence robot) { - if (operator instanceof Human) { - System.out.println("Self-destruct sequence initiated! Boom!"); - robot.die(); - } else { - System.out.println("This button is for human use only."); - } + public void selfDestruct(Human operator, Robot toBeDestroyed) { + System.out.println("\nSelf-destruct sequence initiated! Boom!"); + toBeDestroyed.die(); + } + + /** + * (Overloaded) Robot tries to destroy another Robot + * @param operator + * @param toBeDestroyed + */ + public void selfDestruct(Robot operator, Robot toBeDestroyed) { + throw new RuntimeException("\nFAILED: A robot cannot do that to another robot."); + } + + /** + * (Overloaded)Robot tries to destroy a Human + * @param operator + * @param toBeDestroyed + */ + public void selfDestruct(Robot operator, Human toBeDestroyed) { + throw new RuntimeException("\nFAILED: Only a human can do this to a robot."); } + } diff --git a/Existence.java b/Existence.java index bf08ce4d..9eb5f375 100644 --- a/Existence.java +++ b/Existence.java @@ -59,8 +59,6 @@ public void weaken() { public void die() { this.health = 0; this.isAlive = false; - System.out.println(this.getHealth()); - respawnChat(); } /** diff --git a/Human.java b/Human.java index 13e10acb..55d9eddc 100644 --- a/Human.java +++ b/Human.java @@ -19,6 +19,16 @@ public Human(String name, int health, Boolean isAlive) { // To overload + /** + * Immediately changes one's isAlive state to false, and health to 0. + * Often as a result of being electrocuted or hit by a laser beam. + */ + public void die() { + this.health = 0; + this.isAlive = false; + respawnChat(); + } + /** * User fights another existence */ diff --git a/Main.java b/Main.java index 7286f125..bdd8370d 100644 --- a/Main.java +++ b/Main.java @@ -31,8 +31,18 @@ public static void main(String[] args) { Room lab = new Room("Lab", "This is a lab.", true); lab.addItem(secondSoul); //Remember to add the computer after Computer.java is finished + Computer computer = new Computer(); + lab.addItem(computer); Human tammy = new Human("teddy", 100, true); - tammy.die(); + //Robot joyce = new Robot("joyce", 100, true); + + computer.unlock(); + + computer.clickFolder("History"); + computer.clickFolder("Control"); + computer.toggleReasoning(); + computer.toggleMemory(tammy, secondSoul); + } } From 4bff232a6f603d239def6dd60c8fb867d009ac70 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 20 Apr 2025 17:16:00 -0400 Subject: [PATCH 26/95] changed arguments of methods of Existence to use Item s instead of String s --- Existence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Existence.java b/Existence.java index 9eb5f375..a3df497c 100644 --- a/Existence.java +++ b/Existence.java @@ -170,7 +170,7 @@ public void lookAround(Room r) { } - public void inspect() { + public void inspect(Item s) { } From a4221e9df2ca62397abc75de0b2a9f3b886d91f4 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 20 Apr 2025 17:16:11 -0400 Subject: [PATCH 27/95] changed arguments to Item s --- Existence.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Existence.java b/Existence.java index a3df497c..60fd7630 100644 --- a/Existence.java +++ b/Existence.java @@ -174,12 +174,12 @@ public void inspect(Item s) { } - public void crawlTo(String s) { + public void crawlTo(Item s) { } - public void walkTo(String direction){ + public void walkTo(Item s){ } From 7c863182d9d3473fe1ff5461142a1858698ec8c0 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 20 Apr 2025 17:43:55 -0400 Subject: [PATCH 28/95] added annotated architecture diagram --- Annotated Architecture Diagram (1).png | Bin 0 -> 457064 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Annotated Architecture Diagram (1).png diff --git a/Annotated Architecture Diagram (1).png b/Annotated Architecture Diagram (1).png new file mode 100644 index 0000000000000000000000000000000000000000..f76d44a756f4688efa346b073b6eb76b07fa655c GIT binary patch literal 457064 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 z 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±&e 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 z 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∋`NSO? zinsoX*^j%X>>q&?(Xl!AW03b)Y%t3iI~h5-_y{?sQdC8t{6`O{8CFw~2~snWEFOzd z6LH=A_Ipn3$p~2~sTg_Se^JgcZ8xh9#S%V(??gBHEPdxV>ffY@e`7H+T-UZG@#`!g zPXBx(t(l>$(%D@O58?7ew0?YwvS!#!q8gi!of@%)casfNKM7|z2z-h>M< zm$UqB14!y>djVcJAZtVlNVayZ*QfEE+}wmH3PXm}V`y_#G;E8wtFV!!MVu;0^7e&d z)X9yy7?QJ34TGYBRD~=$-;2dvB)N&u+{jzv$+;l#0n%>RRP-OcGV&lZ3#3GVS)ngJ zW*gqm1T9Vfz~RG@T^+EzkV+Fwq^&$x%*-b6Ie*}lH9Q)DYJ0Ceb((O6nRjMso8HO0 z!@R?~<0~Ezh=rzx)j<7@p?H<*&rQa$@{Rjk7G{z%voOR0s89z5Qx(G7xAAMcM7Gjn zE+Y=6*nL6e!;c}VKuuE;GH!P#}C$8j>By0PJU=JI8?u(!5`1ETKP z`((XSKk3$TSP_QY!QMyoXuqlJD*ZvyJ^mptrE}`u4-XFbsv_PlgGWx0d1cO& zNC+|QgYVO|;gd9edJC)7TFr>QG(+;V-Cb9VbmRJ&xk`N-(58}KU7T4%Je@l??V@Y5)6+oTTleO-1OT%3^O1nJPBQcYSnzhE zX9{9z#1&+2-|$MSbHQ;$-uj3XV?tiBZ1cz^ilZ9KZWEkl?LxxJvl{39^X@e%_Ol}z zZ?r)pDAWhM?ulH@R273h?D5C5fdJBW1k^S6@{^6R2*=c#Cqd1`4>QAM9&9sPQ0d^;pb58 zf3uYb0nZMS?B@i#`N_xtT8S|#Fdd<4~d7jdR)XZ{5qnt_2q;UY%rR7+DQXD=wl|D7AZeg zE@BV=Y(O&7e00bn?XMJ!Fj4U1U8hZ#h*B$v8*q=h_DI z>gm$HTM{uY+7*p|tyOIG~sxx z-(^-FcubwGW-J$Y{IKmto%IzaB)Zf@j!)o_HgO+&#)XU6n^|m~1$JPhR?$ZE6&GJJ zjLQ?WJcWdHBqS9pxdv9#k1Vzx;FHs5tfT6|k$C+r<$#h$LS31OA+k4`rrIZ)lg(zz!sFXjennI1EV}03IK2 z@3>?8IfY2o!0WUuoLswj8VYT}06T~w2ySL)8_J>J!;MLwbM3O;-OEY8aCLadwi10$5; z0*%am+I?(38=D1Gz<7kMv}UCl4Qms$ETc0u_`)J1cN7U3)oxo)LPA`;Dd4 zLa!?txoPW6rK4488-gH)Ig#4}B3)|jG?M=q3?}?J@*Vh*^0s?h`ChR(+{*xDk*U}l z3a6p(ioUz5_TyD{?9qdYk^v*LB*H^4fk_TAw_GTBnvJzJY#kq(OoJL?!Hgojh=FL3 zW$grC^UF26)F4yiU1?~rhg5u*1^{AabNxz(0ZBRYFE|B8ShYfk)`EhtD}0G>Ms4kf zns0W+;dKCbGtTE*O+tJ0&%65H4G&bnPLUtul1sjuSXOqjYX)7)ojS#r-fYrMe<&q$ z(5joH?Z%B8m8u%(pkQyMTfTeZZ#R!BV#kghPJ}m*$pWkHw&KkOhFHJIvF8so9Pk+ z3t*uXlY+H&$&44oQiIgnARvLYcRFCUqrP6@im(cyU376oqIZQ=ViFh5prH+s*=+ce zSRiBg-^@SyU>I~*ElpF!-W)whOJ~57&3yo*3bjRDg8hPn5nRmTgxiC#5rD?^JGU2} zf(@o~)XCmBSoPcmgr#fq`4yRkl*=Q3?ErjY(dV)KVi5=Y^R!&;@?C3_zFT+>H+ilDq5IPo zz53nil8ZIqj7xPO^i&JsjQR60+|MO!bf}QAtIIgkPU(3$6MGlS!{LLBa+e&aggF#(RkK&WP`%@{3Zx?)vw6wJNR6>)n zA(&jWyJ|~=ADE;9F7G%L;OAEwOgJHZqyPuNw|}>l{r8CrLsN*vx|q3RIJ#;E%1%xq z+0t3BScskw;coVyIR(MEQGt>0k34cjx4;CYD>0l=1sMdwR!BN18&8|k5M8r;@p*}v ztLby!z6JBZgRkl6`E8Q3{WxH#dwEongHmf-T7qXKg$Go$wYO)$`#0v-hXZh9r)sh$ z9e#7s1N5>%92eq*ABBW@a$0X5%rmC)xW}zVWNr4m#E|8tPIY2rgm0*ev$F|R40IOS zNqqO|e?{v5c>Vm5oD*(Sz4hvF`}zk5MP#_UdjeNvP58t+70`2R?Sba_2|d^D9`@!f z?p}acQYQ2VLCit)6>nGt&^Ady=i5K2CbBGH!|yZW>~<%C+@;$EB`5cA`EP9>BC z#L3u&=Nzi4uYZO*Rz|EoOXV`?D#s?~=GvG~C@E2^6{8cL>~a<&Hs5}DDWQyjb~Wdr zSQE3yikp|&d91+O^feq^L}o`E#Q)PwMs1xZX8^2106uNI3FilR5A6R+Sh}0ykjj5} zh!8{Eux*wfp2-(n#gQn~W@Hwq1LzAcMc92fjS)1t)Pk$?{Jd})s<(Vjwk>b>(9jT5 zwzMjH*-ZBgI>^tby+26hb16en4+Q4I0$NYj|w3MyHLuc#Rc~#d&1d! z#oEk}Bn5!Js;X+S7#HTaU=s+6fk68?%fo}DeLp@B#DVBq#r6^W)Y*HfTF>vfd*1m_}hc%ibx9~vuI*wm&im8JxJuy9zrXPc;bkW#2~Kx0XzQXarcWK zAQgEgj9=0{1xd|>UkH?uuTF7;_*h+y7U^LI_sMdGtXybPyHx;e3*b|P3!BS)gx!d4 zL1SB6sK^|M*Ty*n5d;vaowO(JwliOm`sTsPP;zB+Q3fa@0t^T`uUogSo4-9?e{J?^ zH85(vsGw@VCwQNCx$MpsCaqPDj7Ty6^RR$Y%w_-$iUqCmH*ah)R?Xp3_IZDB3c)$= zgc;|vtDwtwUd3PP*w)OLS6y36NlDo&BO>w~PEZ=FgdFVc6L18Afj^{+L`7U7KEA#}t!1xYUoRlw1-sA4_nZ#kPN=J@I&02x?=!(*pr?22CJakZX21an zeqbP%Dxbsk2;8l*6@8fpF5fY%Pj1^ekmR4d@@$A$wg#x#m2V>dyJf(Tky zvMnOBzh?pV>1h?JB)aft@^m9`mH)(ujKJYK^D{EWiB7BtF7iDhGjntB$j#3>Pw?s` zmUn4=tKlt~NQQ2DG_4me1HL+7&7xD92a6q8iJV9d28#nZ=RSe+guirqd)NjTZ0x5e zoZmwTKLq=bc!VtLXaxC{gptrAX230X&EmP%3Di^s29gT`J!T)#)=-FBNkYYcPDx3h z>{mm(hjPD5%!xA7AzF?%8HQWoV?lJ!b0OfYeui|LmfZpuPQ@&?b_+aaoMwd!p7{!~ z09c@V|KY>idq!qt-3E{w{O7wHIBrp4VHq2Ah1xnga6fEE`xrb0O(DmLZfFWPrxkG8 zpiumx3WN}+NEB|nXvg3&reP~iP#=>)Y1(hdQvfR^h~hvC$v$H9kO6Dk1EmtP=RyEuU^Tu0XwfI85x;14U-A*5~R>XgDxoO66BpuPMo$O6UAf)t<9DJP;$7}hGQz5PhMiyx=4SnadW=E zUz6ox7W1dY_lFImBO~V<+otdTIG@&_=`w0RD>~d+n07v}=I%!h*qe+XmJFfnj0UO; zqQ+NXXjl+l+@2$7*hV=k*RM^73>@C7yl%K9T3{}S_KZwthWdNxw93Bjz733^L%)G; zY9gI<=q?u@;p^Tbi~=X+NT{4UBN|5#fo651Uw}~P{r<3ZJ`gIeZ8(m>I;g*zYex(O ztXLhLoT^;!;0TV>ok7)D`@F~jM}Z5YeVf+4s(%w{TFd=$S&kTD>8g)Ad^`gB{GR$DVEz%yG= zfMi481B&Q>BGTpf`ujDalewlrFxU8PMe~qSJC!!vuTIUP=IJb)1J)i=)DzsCzh*)N zh+)MRT%@K5+E3lqq)$AzpX#l0Po&teLFqYi6HP(nuWTjsYfJx_b#DDrYMbXX<$0k! z%ddY2b_u?|@;K6<2g5$s3XK3n_(J%Tz@Wha7H#Re=m8)h3uGkN0T8E5tDgn$80r>+ zB`h1NAT3R3DQu1hDMQSLzN>v0#-0@wxnlEUPJDM?AKm876L@f@LIZ0GxXTDP?1cLc zygI*t@*N(B6sZeYn$!N!SFNqBuU}t+)sa{z%?|;v>VPYSYb%V5BGs?`YAbHV>b8T0 zWf?jN4nq@ZjCE%evok{7xugQZiXPhB-z4}Rzb}>JKFH6nq%A8-CBKWFaKJ$1mR+6A zlIJ|>J{|*8l5mHjA7d}bnrZaJrdPYOtVut=9hcqHwScX^8bbSn=H-&vF=U9}dGYO7 zUkxdUTGpr%!Sx)zde$Sf9Otd~67N!Ck_8ndWzeT}#?1Dcx-IVz8;gXbbe-w^FT=$1 z<~F=m!66|8(KV4cT3awD-f`(ytb)`lR zton4}p{%K?Sjs%Q-n)PH%e|&M3NVc${#fz9<6Qfp@-Bkwh^5sY!PpRq8*^HSamk6mSgS z!g6n$2oE@0YH9|1typoz?866SVNgWe!TIg|PMS4>6O7mpDQvE(sHo_cQQo1kL3=&m z?aiam6&Awevp995hssJOL_%@^j{n5MN@$Idr2{kB^B9i*{%(EPp5M3p42AX&Jff(U zq;sduDiQqkYlutUO$*=}W;XuR*>?W$|LZxy{;SG@D70@lIjHb0z`RRKGF;zrQCwsN ze=dJ+GL{RrCq1{SLH!d= z`1fKvbz?rGVTcKKo0*x}Ny7KquG+?O6?l(`_OO`@4pz145%c8yVn?dRyEJa>U}xv! zEeYd|t?)>YH)KA4?g0CjV0YQ~b#(*? zEb3z43j~RT-@BB~XAd&vR^%7w7k$>G!)4<8i2?-4$}AkM~cZ1_gGGj8g3(Kf`HzWc?&HKN6<%*9M&w6#uHuoi+uTR zefW6gdM0bBn7OWCF!fT;b!)U$kr0WUD62qLrO{~&GH4kGA7QxF|M&$w{-ujI_ayjx zZz*TX@L!P427}Fh2uTRL7EIfoA`L+g95G3~uqWKx30dF!;WI}U-x2JFqxzM8pr%wP z)yj3YVMCX(!aO&&g!@|Fo_uE6hEw#<6uf+VFoU59{wrmrK;7?3;}Q0~m|3lM97q48 zB_P|n7of0|2Z{rDMT1H|Z!HP$q2JA@J-_eXoIaCo0wI$?kwBq-+0+yY%^h@f!Cyj8 zjp69+%>LK0X^`qpMl=@tR3(L&$j2D$=Xc=3s~f-&!x#>UiQU^S+N^Zy>&?%FZ((Jj z-;NV5L;*7*41Cc9Lw8!};K76Fov&CjYIw{{d_KV!!NH^cG$vs@5uKB!q;u?bX~ZJhT{#Phn1pj4R3&vxl&-`#y^K4Q1Z3JWCL7$kFe)#re1~ z0$isrpuN?$eS$_#<9yU+fhH(v&#D5kp5EBd(OM+ckc09iI&Mv6agqfG@@@kn#^USzn%{eu$WMx-mbZk#91s@+TGwtUbuA;)5k;^= zLEwkgj)jFbZ9dUMTwZ7^DXR(nM6qh38THW@ym1d9e4~DJk7o)R6>8FIcq)zl;bG0b zjG%MZ<1wKbOh=Bl(1tw&{{#Q4%zkBQ^1i#e7dvC^p{k&JFx|&-b+SZ|2UQ}d240mV zs7nyhCnqL2@FLCN-XbR>Q$0mWI}YdnRH7^5G!ASMt~RU`Wz4Xv#oGqh?z|N~$JUQXP zPwLK^{^ZCiE;NgA7-TY_d3Cf#4+S6HbiXeVG$|+q^2w|v+ll!mVDBKA7p56;WF8b_;Il-BU`s`=W;jSXT^F&g+5h1^Hsd;5tjgkL5k884ACZ5 zqIBKw?Q8BtgfJZYf1iI^{4)N40~iK&?w+v8`=_6A0ZV!}V;JXW9JZ=1w4Y(>7~XJx z?|A$TC&GHOqywxbBD?!&59%1+e03Mxqx8*JnP9w;-#3C1I)qukkL1WeWK=56NiSv3cLWcQ0g;9djb4&%G*>-J`bKLeKD}O!si4Ll@!C zfF2j1aMZTb@HvFIIdi}LB(56+YxL?Q!xq$^qV{xjajDVGJkNLC`8-y-&>QfFhM1h( z1I%`P__8-XE7d&m9bh3*Lv;Hg%?o$U|?&P=+jQt<527-qp>Evl-XKPDChK-A3m77Cy-7^J6S+z4> zM_@YQQ&l>_X}YKKN^`hDy07Fi_s4GF^qW~&EW4uGOI18)_Pmn2rep#yD2OOF8$f*x zDNyX?I%H;j%IFQS>7WPcuY&}kaeG8~xF&|7kq+e_3{1x>v6||YZr6qVcwlzh-bpVQ zb*Z?2nX+pZoz3t>uSIJSMn+p!PSy` zhr!9}#vqm&wiX-K9Pfrtzr^FIz%xhu4G^7kl&2v91;lli$;IUdoK{j^1Tl0d$y@-9 zGpls3N^oD=xeO;H^dYT)M??+CF-h~rH8Kh>(n%?;{Uj3(zq@&VgOxCjiibG<=|3tI zOg!@P@(K`=4;O5TmKW_E#^++wS-V;d8P`Zt+#6hQb?h1NJ>amiv1t}xE3<)$>iNv7 z;P%p%@seepui&mdu|U)-@^2tmKi*8htx=b>@3xTHgvgUaE7Ba)4yOB){`Kd*AXKSI zbAzXdLOYUx-Wvq*ZOEiOE5Qg^im#84Aj^A5bDF+lWD~!8$a94!XcHOPLGXR_g`E6I zTHy_a?qry5#Fl>isAI@Xk|F-zuP&nU>V+4@0gMp@+(N46@vUaEv;_}lPzS2bH^X!H zb`efJ(xCwk9RRYJ1;BxYWf~~4Pmx#);SPvBdsv)@M`4pC9M$ScVQ|7*bBl__!gv+l z3BgGFhR)>K=U7bLXK1{Cr6d4q1GGUDnG6)9LHynPBK*MvBYoB|XxX+`860nyuDf3O z4yDQkV*w1(;CTU-j&bw1-YOa=9~H17l)^L1HzN*Tx2Txlx@-G2p?HCAd_Gvrxj2s+Su9A8lVYJ z%v)|we<-4YSb8f&2)(-y^ezzFyf9r!Lk|vW_AV$=^<7ZB+o@vGl7JrIsz>dF^T(TOir7R+gX48Rx33?k(e7F-5 z5|Um78J6zlpWD4n%VD}-zP%a3zeOR!{4h(2-HKK38q&D0XUMu+h);*F|7+JyO-~03 z0gZhZO-yymvOx{Trc*Jk01`<^Fw|K}OlTQW=vRP2mR(2^=rRNpy`Ts;U6^JSqR_k7 z@JB;rIf_LLPF<0pm3RkAkVkPlyR@*)O^%Ux6F z&C0X~Nk=5FAMc_{CbCq;f4AgGPe>@qamKD8BUT z5QAn6e;{MmPbeuVkq(_KJcslI8L*@Q#?=H>z+9&0GtrJ(vXbTBmPft(a^F{!*)5}( zHSoxcVc9-BH~7IFFE35-wDL4$wL$^VfVNT19~k(embjT!u_;xuWAKt<+W>jug=9%4 zzB4m7hxb9<*X%-jnR}eCg~->e86;01>nh@;aGo6rOA;b+EdO2RYz0h1e4H3x#EG3$ zFp0KC5mL&8f1Rp#4-?+EAKYmQesapuh^gtX*w*|*)ym!ALMbSN#wBAcCnp!QFBJxE zgH+G=qQC{}Row%~jBW4UCojrQM~`TN;n}KsamZ^b9j$kh=3smTghgz&v#R)4i>zsw zN272Mz)jsXi0@VDug-mR=y?v-C3aY|G_StX*D_hQ`w7XKxyf#QMCe+rh8v)*WFLt; z&3~`ihz(bXAs6Q#idhl9yNe_qKX*1@st%cYHZ~e2{Tvh%^I`&8j`o|Z0m>8n6rBN} zI}nojhJ>OVl;KosBKr*l1tpcXfI`2o2AB(VnriH%AP=&Voyv{d~{9v2lic` zGt6I;vTeS2rVtj&SxTKr3E=>w==Up2y~7>H#>dyB6ozKo!(qsNvA-{P&e&Gfis)5O zwXR2X9?Afl$6P^0@rTuyEcaO@aDB&%4(VU@e_q~bpg&az+dvHXR0tXBRlflt?E8)m zuPp3BjKZlc?8e_i)TSpB78V9FCB%E+fdjSszNgvQfzx+HTXay_^QZ6O(k*;{bp-G* zlrTJR!g={$lf@?_jDoHPEF>!x<4wawrjFZlsY9}fF^07i80Z!m87cYFWxVLIAbi2K zav(<#78mclN|=!KKEzFWV2C=@Pp5|-xR+4q%x(cs%ysw+M!+2Azv%kjcjTFabH(zWbRosLfc$VkltWpRj&}-B}alzj^z1GdD@6@4?-pqudq* zejl5POKaG+%7;At1~@v5W}JS^<``_@t?rX|6M+nz!3J;-uK<_Zzi*$kdvcqui~M3C zLFjmV&{T`P4*Bh-oXpJ0sVO3bLNF+&$-`$s{pzhl439*59<0{>a~M9eenm*G`iuC} z*zY(I9keETQpbGa>cH3E7(8mpyrRTv7_wXH>n@?oq=KCQXq$1T@6S$7&f~=&0pk~c z2W*6axn^Bb#AE95I8aI9=w204S}M`h3<4OXyTy9PzAe8)If1UHo=YTEyB2Vkj}Ie) z1FHe^cD#Q-c$Mo;5)cT%jM&~te%MBcz`0LWuX4?rHNYYUDG}p-;5;B__|-rR^O^b#c;(pmf z#(DwEE^z}XkVphl8(y_a_cVcY;+Jr?M;8z~Pl@L~3i6XAdu)Zh5%S5j$`G*}hQ#Q6z5QuTuch??rzv7N<+UR0 z6_nxZFw#O0^aL^5UKqKaAg1shW@%eXoC5q(iTY}@?)|K+21uQ%*UKs)O~C1{^M;Jz zIngwl+PYg3;S+F1hDJtX!y(aw2XWS)K?#9fT;#S`uylN@B7m^c!EW~OU6NlWO_YNNF!X~}|LCHflnIY`8g!iBw4 zD?TqLI{Fj3>5(p>mG=M^-r*)@zE@pP#Wls@w{*f75KUc1?kWPN#7g*OBMk~bi4BHc z4gkRJ?rz*cgA8xV%i-7OC|iI)2!PovL+mYx({5-e!RG|`vN7OD#)=%92DBkC6%W;a z4ps-}#w03A|M4||idHTe8li!zUuBTbC?g{EeUSH6yj=#3HD+C*ceZB z*%xywRuWyM|LHvffeCQHK%`xZGNfwFaB^mwdjvy2v}w;SOUam-jQ~#|>~Se@M?lYD zc;p0fSILaXNS!fmB{?3RT|7Z}jagXeL!zR0`w(Ip<2kVuz;9wr(U6(X5-yebmDt&+ zwvwtzv?6l1A$t`!1`Jj;o~w@gePDQaKRxU}nIf|QG~Kof|75+&G5Ak9__qZ&k8;@C zI|Zc}ifkk=Z4bi(F=6#iXbfb17il&y@TA(Zy+>ItS%=*$3EZRy1dH4jKvrbDCV?{03g?L=pe32I1H+p0bql*ERr{ z^?SmdQO#Uw3s|LKeW$AXpR=XTs}91QlfNFa<@$9I|MDT)xC>$0fGJk$DRl>HTdY=_n*GCJ};KO5HaqZxMhdYF!a0N17I*{Hlx6g>)k2aW;IO<*jOwtt)TaPxM!4B` z;CzDQ5KJ%p_;H^}h>*|s=mL7(%S@FS&1OItq$g4bdduFS2-7|;&OB_~#|_ZqV{&NXAzMV!KvvO^8%0O_u9tDnXMca^pU-)mPjTPx_v`f>*YmorCoH?R z-@gk8E@+VlW!+R1=YiSp?r+eHXt_sVO^j>vV_bDtn%)o62~J#;M<5?7WM^>x3)%eZ zFoc&hL!*WUoH+!3hq0sWfY(u@?YBQ_Zf*{kzINdv)Ll9DA8+IlXZNr`OJMO@ODpZj zgs-{1y&Z{ioE5Jbg@aW65@j@CEo=C|D(8c7uYD698wi7+(VxgC;y;qzqP_9B-qm3+ zX$06VxK+40UTaSfOtqCBv#gWbrW4L%kjJ3}z)|grS70XSbYJ|OZIOkrx}>QL2dO2> z2usZL`!P`8#D&jdVNpxO1j*1aOApjOWhQ&|s63}@84n zObdA$l@q=e+3%Mg1Nuvlu@I&PbWPrSfKnlTK*>3Pic;snf#t2A`ukmgPQ(yVfnH-E zCVPVMbV~m(4(ejEKc*0bx+-<=EYJXY!N&(nBzK%*$A~@YL!Nkj=`H2uWch2`UzmAx zbo5EEnFwlL84olc7ruHfS_~8ozMe?9i5P99U%^x)+~^<^jTlN+EqyK!z}5z@k;f<| zd+{2|f9_hw?9Y{S>51AFvKLabg*a5@QU`sJVSa;qu_D!iK=;SN(rUi9ZSbUkPUT$N z_5P|DhU`nI$8I?*@mq3*Dsq+ExkjQU$M@Hfs`}a%HYb_sQp}FsQ@Gm?NoVc}V)&ai z^x~b-VK5ST5U0vOMDF)Dv;Qp%+ z;Jh`t3(u@q55q^>QDazM{>=FSoU5qoj_M-dK^3YF)9Gt2!{urc9H|w7IFQK6oBLR#PGLO-mGp- ztp%}KLpABYk8f8KxM8(gC|d$Oxe4$t#%IIlimg4{&z=E52nBt$3JP5W-lK47;TQLj z=k*l6hf5D4$Jp2GcIk7ds08_K?d@NFsr_1__sZ}tfp4^sSsSRY5qC{PU(bn<>|mRQ z?MS*~V0iJ@m~4imn2FC__5At%nv>SnsiEeCURf}VHK5U_v0^puBsVB8F`<~Ki&%ld zV$~S<7KJqWoG=UF4|r~Nbtu^q-v)+PHOT{;qAdsoh$Y&b39f+Ruh2v2WcwZYZ1ez^ zswU};L*xx?UF183O-T1Uoqh-&48Np>)B)dOg&CehR?}OksGNEG=hd#v#SXSN%$esW z-Bs)FF*)Z^P^(huL;Ep^s#+Eysi2@x`&D}`h5xOUGL7~Q zO=uEgREZjf8L&G01p&S4@x=>L&VT@=L{l;pla*~P;K7lhI(c3~0y-dK15U6F+}{eZnPYezlOhI*(yQ zPkjue$046J=MZ)e#D43+m%$vv70NaY8)GIuh@z7Ph*Gj9BJUz@g@s`f_<^ti95E^S)=$oL%peb%j1p`fh67jt@t{P zoj`KV1d5k%1~!N~AoklLCMH4c2VS3u3 zK^E&}#I=DbAc!bzTdmUV2AxDOQih(Lo{cZ$a=Vh_0J{CFA|WVgCkm_Mj+~5kU;RCC z!_++Oe;hzQ;ye{;YyxsYU!N>^LjVu5!P7HrYG@b)+R4AC+gSyb?VpVv==;N2>JfR& z&Er`s;8{2hdIP(-p-2iFH@CP8slW22=TWqweMNG`4SfIpeY3*aW(@lsUYQg4uMn4h z^|xox;~_4Kj_3uHG-DKfy*+}@n3ao*OCsFKp~imyzPS`IvXCtTR9TnqLG1ua8Y$2S z@H{uoAJb)Uryd^cP>~#+%LITTUG>Z3x~KDPtM4ZxkgvlKX>p`SN8LBWTxPN>qrv zn-2^bF@V@b;7Oq^O_42y_l6jmUr=+5Q>L~C3ST8F;WIjrvVc`8qo)k;ypKOFbRBKK zzYgAQ{iyDuF06Wg9TH3ULrmCyeY_C_u@Q_9s_wqQpO9e=h?9Vy8UEF5RSu`r2{oWP ze!a}Y8+LkZy1B#Z^`m=r-_crC`yLFFt{heJq>wFxh#n}n=Q1dA&mt%@3w&P$z4c5& z=71Q&yAqJVY1byip&malQo=6#_TnvU-mJNVTI8C0;tA@G^kq4$gde+))Pfdc1Lr3X zKRUXrf!Oz43>A>UNP8iS=@Ya~(X*~TNOrEsLjIen9DKVZP_8E#6=ql=K$`o);nTzK z)i}B*6Ntq)^$%L%3m4A^cpN@I@VY-2?5j#Ugn@re6TSnH(f-fxAj}tu!dt#88WDki ze{O#M;q8p7pBiI)(RhJ4Ch%`GTdF0AqH!$| zXm%ckO*dBet|)cX1A7F00{_?P8v((Qd56N*bqd8-{NU*2F%LE6^;ra2v(=VK9$)2 z`QTCnVaM(F*28uN8{k!F$svWw=q3?r`rcO{Mel?s{1*7Tcr$w!V)Yd37f28$k! zg&c#pybl^{%`Dr~lfUBDZ{O!aA9qk%2MdA#}_p zgcOEJIruZ%Oz)zbm6H;ZkVwNz{6&$VMsB$N0`ZzyKHXat00`VzZ zHZ+F1ar{#QZ_F2>OV*C@=~XGUTDfW!xlCh+0m%g!@jPj7H)5w1x->U3e*iBqRBs-U z6p;N0velOJD0J(d$Q6g_g}fi z)LAwH@`gCpGPoz4)=*Pxa@}tW>2y2x z0NUP+bTa(NEqoljd^Xw4t_v+m>_$e}vc(Y|MG&9kNg?z1w--+WC3ACiMcGM5zk=ib z4rZ;nq|mNCpVEn@9}EV`n@3RakzGqT^^ec=!6pd?o`P|#%DCJ*OZ5HHVbO;68|wEx z4xZrl<90>gzi;?pGCCJ73MQZ8!@tARr0U?{Nmol z?JGIBxfMXinWhd=J=)mnCs05uw$QnZRar?RHjGp_nKOF{v8R$;lToyoLw!J6%sV> z{EA6%t;*WJm9-BdOqkYUz^2Q?i~8<2BwA2q+@YMka*g0>1=7e@ZXnX;z3;Yd#_E6s zj42QOdLEeWUBYI_UKJjLW4Ny$f$%uB7+3C{;oIuJ6a&ID%Ri6m{ZGXJVSvT{n_}R5 zRDt?|1KR+61K%!-2cT~%hKr1d(Q}1XEIC9C-IGj-5{$ z0Qa~j!q@?^x5-!7Cmc(zW#l(Q_feRKZq=5}_AJJ0SSPhbUSGrlKLt66tnS5Cx=ZCX z~Tx4dTW5i@fsH4Znk<)~( zgXm3neGE6p?yfgeavTJP3aYq8M?dgpyC(#|2;Iv>XufTlfSU=29wZbTf%i~#_WZDF zPIN&2e3yGq%?coqfgk1(?&2F4n)DmOe1g{pbG|-QJyu|3rk->_J!Q|1UT8R*j2 zTluUMH2$9H*p<9~%3UD$3Wn)DEu4m@Qp=aD$f=sbNbqU){X@_`=b40$T4BKZkMtFYz9+E5g&lOR&7=r_xOc{y#XpjMcyg?BJy^PXHxM+%JHjA zw4N!*06&>`c6GLgUL^zpn0em83ii5RQyU%vNoIP&$lxr#ZQE<4ArKAd*+5h~vw;{^ zwCnvn)iP`>X-1FGa{+Cc1HZ&7bd2sfX8?AY3=&#a(YHH8KUrubH`Db9(ZV_P2}>oW z7$(#YPcK80y36!F5Ge4x|YO{=E1P?8Yl>7K7+;exj z{c6%K1b&L8b5|#iTU(1WyN@P;^eQ}3K9BMg*Ob5tKBrEeBui*@#*hhcelZSmad!50 zTNeHZ6kx#def8&ov;kXW;o6dns+q8yUVGvVg%5ZbWE3p7wKA4~-5vkd9C+|L{6qm z)bMOA@L#drGN2R>XgMA$W10(623eHROq<5keWqh{h01hBQ&1oPHZuSUYedXssfW%T zDkn#woI^+QiomP_k9WTd2%(;LrW%w0%I%INo7qx!u}HMmqbugjO?iW%CrmMT+1sHH zLE(g1k}%ZW@~T1O7+`lYwL(DGxS>tl*bl=W-;W;<5m*P#Tzp=NqHF6H4kOnOU0u9q zNd?b3uu^pdE9`IAe?%*1T1`YAu48uKl$Vs0ps^iVkGTo<_<`l$kB+vK-py}yTG!EW z6sZ!Qg&_Q?XW;n98qTwh5^;`$+5acm@z6@|cybZ<3i~uP3eMwr#!J2OS_4}L4Y^$1 z!At|r$dC{LD>x6S=hY18CfA~(a9u@MEd{37vvTXso#b^J;4&N<>J-n#fiJKQ#_G`ea1i2Wv&3oi@7&Nqg?(Ge_%q_yeP#`i}+BlJ> zzyei46-C+-r|J%{7y89MeiVj63t&MNx)e6CQ^q{9DzNihb28=`TCIe7-42yyp94ma zhhK;sP*pt)ZZsxnHL0IFI>x1!_*YIx|oZf3xkMb77GJjl%d#^W(F&Q)cS_DLziKPP#?Zke8mEAa!-tQEv>x(#zs%OlVk&0PBh}wJU1%uJOVwDR(^~HH4j<2V07#R$9DkG z{noKOy-mgOZ*VYSqyIow15vg~aODbmP+7j>I5FuYw6Cap$S6i`BZ2NV!dQob!x+Yl z+3+*`e>GRfQDmkQuLI-+Vr+2}`3fL?koFxQ>;nU-W6OM01|640S+ur)fGrH<^DBjP zD+*pWG}v}m+zv|jt;&#w(bgcr1-)EGzT*b(GW#hRfbJjbQCf-Sf<-)TVt$a?H(l4> z@JU;&;7c*##Tr)40w-Jl3&@sU_4cY1T$8g<;z%1w0*P0>eROPNwq>)*_@RO>FxHIa zX$8Tim!@0cf6z5R70L=e;?cfIk6=(73kwTTF2wP zi+OvK>12O{R=*Ti&UQ2}$=Jo0=$x7ZQ1F*vb&64OQO@!-CcpwJ43#fmzT8+g*giQy zQJzbr9_^jN!@Pg5`YvN9``c7UGJFJEjkYDnlDXz*E%@{aq5c z$^cXfQ#&->sEKgrG$U>-JN!UyL1E2c*O=O-tsE`Wy? zE^R?a_`Q#6=d(hQr$(%V+BkydN>LAcj0!(`C(ReD z2a%2c@0DEf#iBmsEE+w63m2kDq|=!)-iLCP#=nCM8OaB|fh6;(o1>OzsfHvDyp*3>v#S47jkZ| zR_FXeTiE>`_bnbhY-fUw{F>5*2?B;$mVx6^N(JE%$h^kv86Z>T+(C;}=U=VJ4}osN zV3>vMFL=?}Oo@y^l^xHP&MC9qzV}+*XQ&2nv;qoI0%@JCjZ!drj0t^J_p(PwWb~fuw{PD9j`D7&QU=Za^t#X!~HTOrN9&-!2A3PMmvXo zU@RbM^^;CW)~iuG$54-M-gAHcM-aA-w!yettyP$v?2H|`XJTvyM+DPU)X-z=RaMSB zK(pM*B%&Mt0w4qge~Bw$nkQi7@6(1;)%#_x;e#kOXszZYWH4jir*yv*TjW00!!hW+QT{OAS{hv1W708KO$QDV%ioX%Mrzfa5VZEa zS|=8qH4r&0|N6pfe`MMuYhtX4yzO7ud0fZ!aR>{J%-J^Q=ivDRitaqNEOit^KJ-|q zvXkvCc$3lN%ge&+rR=mm>~^vR$hQ%qSwP^=f&c=3-Fu;=O_&^0&G)r^!^z= zx>EamxzE;EyYaBshlgaUH&NwSjD1U`6hMp{6pR~|2MuLx$O?GNza2#QJ~J>({a24W zrkibK@HeL5#Gy6}H*24{;_zlp5oVDOyC^3YS5jv2l;V8pL1nb&+zx1~fymVoMZ@%nG_Vz=LZvBj zzXs9iguFfr7=R%Ht9Ce^eDzI9R!LndZuqIem2M3GR9=|kDe@Q2h?R~QC*XlK-Px6F zv;^)&5`EhDc`qPzZ+D12psr5%waI-T*42r1C_SD>F?O!HZG{#z`a~_hlBuWDo7$+u zt95Rpwu+X0hWjJTjICQ1cHbimJo59;c@EF>B{N}J+8EZ~or<5IGJjChV%_15YZcsS z1&YXzjmgWGUb(Z8ho_{VrDKWjdwz_P(w&#@yj0+x6ev5eDTvBUu z#8JRH2;KX63q`;_CT`GEFM43cQ>(BONI=X=}La z{kTHCNv!!oacohdy@maFw}*NeF^!VEAZ*ApJL#UO+cOD%Nz^%LFcj+~SCQS0_eC~O zYB{Y%Y!tt>F2noUwM^ZYh-h>B_Sc3y2%!txz)NSLtO?+Zen$wLOm#2eq*a97y~`7$ zb$T}hxr@aVZ$m4F*|h_GlXyBu4y+l)VQS_%+#OPvlq+^5XrKps!2KwcO|O~)o{wa; z82(vV1Ev{i;vOG*iZ+l?4jn27x&T7BF3(PF2OMpO;O*NttYcD@!kPi! z>wbO9N5&|vMkT%{7pCBvt-p$jl^Um3c`cN?IJQ(5%-@slHvYTi$97{_mFI?%CfyCd zPf$6yuLiF|F8zc%1!g;_rH8)_mHC3-Yv8huKbu$+CUX*GFUa&+$p-_d4 zV}nB1nED%eCZWWxSdXSxC%bx&Cz^SPWJRwpUb-~+c=IN8!MH8d?Uhx2H49Qi7}-{0 z-T)VrO2^uZ#*!xA4NH>*Q$ZlRPvWUICL}{4w{!udYiWYbg~ZX9Yy!&-yF^UwAq!oJou#3!2x4)JI(pM4xgg7;k!$G0kjWMOV!^QL23&XfM0r!VlJIf3* zY}>IT{Je{Rr||Es?pMG%+wd_If?(&=+iUeD4-j!%agbd_GahL3*Q$(-Z5&}&drkd+ z)f$_5$enzocp762c2P^gdq3Y;rB;R!1|>Vos?Cb*=8-0*-gW_0+>4rXftzH}@iwwl z+1g{FyyrOM4BEG3=AfSy58NS^VjtIe~ zAcJaVf5hq$05EnHxPXD>IXT-}UuRnAM5L*dpTuZcr3*tk)8m*Q$iv9p|Hb7Sc*N2- zgS4x$!WPLR-3?J^K}+fhJmqT9sx=_Fv8`gFd0T}>dGZRTMvvL<;SV@|w@JK*S?|mP z5axbKi5$v2pr5FbUNte-&}4^A%!4<>D~ya2Bt5&ZH+t&Xa`ys%t4K#*X=FdAlXd$u z)6$0Sew7Xtxti_AMVCh%N7X(uJggfTB(g9ipgtR4uHQ&k_GL{s??LAvvPJCjxyoDg z6BZ5kFW+|QDU3SjDGV%J^_l51E!VvUE<;N=r4Jn3!0!K{5Ni;;mKt(%b2}I4d0v}K zF&+$x4Z}K_Ph#FQH>+6EV9vh>RaN@+iUZg~lg!Mgzz zb`JV}2s9WUxtlu9rBwBa?Mrv;Woc7IxZN9y&>k}vND!P51F8_s&}wc&Q#Iz5m!EGH zD;dy|hG+Im*coM)$id862I zpvPMT`B7F@v$HT0A{M(T+9mCqdUGit%r6+A$W`LN(dl$;dCR8s zH96Yy?I0zOa6CdOPL(}B;p&i27Xfvpt)tKc^yw6`0^1^og@%^TK&WD~4Y8gBUh1up ziv*f58Se+j2*B1sV!vk0HhBF1b1+|*!-_fND}c#EFLndPMjEu%{_+uf`4WyJtxi2} zV*0se!)bjBmZeMUn+jRhYH@NMwlZlWAD;!gNyvIYYS%@UQKSd-4EIO8^Ev~Vn+m+a3iOk;eIS2LuwXD7 z5QqRFo8!UJx`YOM8=th!-+{+s=!RJ7rIlSBq5?UZU%$U6k8_?(zCM%ni5`uIooZWG4({7_J6P-T!7>|aM;OvKbjFBqrWN#twM0j2YQ#* z$Bu0f1fDrF44k4SN_fzDgW)HPgVls76F%@o=utTXY0i0h_wxd_D-R5B=sL#pZepHedeJ)0m&@c}1*^CVL={QTnH%R^D$>c_N7#GQE zfQBkn!0`c#j+mFqSr7y8;8$OeZ{Vvv^A?0|QhJrf&~3+pXqxm8MUu1^XR&%|;H8Nq%7eij?%? zsmEODA1$OCf9sej^dsHp){Ba&zsDIiUibS0#BIjOWBCSRiUo|<3If&q?x=KF0%HC} zS-N;J+kgm_OuAr4Ls&c~k3dBK33AQHU#jdnRK{GHSy-BkDv5=1t;PXfi3eXQx=I3B zm)C%hv1y?>3<8L=i)kyFKu_dg@les|UN?yJMKEyQH|ISzIY*cNpHChW`GnsSe-0r0 z!%;Et$u&@`rnnY%bs&P69y>OMwVfD|B@=CM-f#3C>A$hIQzpmV4P#nTZ5C+=gP?*M zLfw+iXM^J;PCY)gzccluf=!3V^f3nUt2)W+qe@1}fh&8R8-Ng=YDDd+*V+v8>ED6y zNZzMRjei^X$!qM14nKr$Cnv_u&d(7~Uz-CJf$^Mqwu1M-M!yd*-H-pPWb6h6(NAPJ z6J(06yx(zk(-}Lvs;8Y`je+UkbINCF3?fC?ofjj!1I?=KIv}_qvOY$8~>=_Yr_)~Rd4jI2(;qJvmI8erUbq-OMy6yoz z`k9>mrb>-zWetNz!ECuTD=;OJCp-NcQ>*hfUL~7kEXF}55#FPMvL|ym`uldeybUq- ztLOxzfO0c@7;m2TW8dDrs|px-1MF`BBjoZ=fu8d^XubLq=&{2XI~}n2G8j)V3CM5d zkL)%V)sL)bz_5Du7Y=WRqc~iE=|ad2VT=o;Hj=7Ecc~{>FX`Op zeTqWf;RJz(MDoGGT{7L5M7jM4U6T?;Jp?w4h)$dU9|1+IB35Jl`-W-|S&~l^--DBY z1uaf+SZ}sr!%pey(j(^V0v~luWo_UE)A8w(fF%rU&&an!bCsz7P>9>ze<;}Seo3G~ z?ibbp5!GkUuXAm(qD!K!j5Uc?j@P(%M{tHddTZ-{PByD@@^EPsCdV|il3Tgfu6;Nb z{R7mHn(xJJH`ngaM?!`-Zb)Wzz;1B;;2>(4s4GZ48R^E#E@HrQZXwI6qZWQ>pn)sY zhsk^fxUSL#fCF;h@UXB%Srbr^?cM+v!f5C1D|b%e8=G zgu;{>y~UJpURBB~?hV@iCTSE5W*pylJ8XZ6365y(-7a)pc5pV%AL}NwEoeVXS}`3^ za|tX7bgGtf9o4kI0!mfI+4zWv_W(MZj;J_kh$#L(DA5q3irFl;Ltd{^FKHP}bd0UT zJcTdrc=xwrwkjH0D>MI;U;$!=Mp!NlNd2Oza2RlY0%(8zRmg0O-n&CP*NQE4gYbc` zb?rbM1+5D2B4`=ZZz%auM8KSg3H*qSkT`%iv1j3s5r|{D>(HSv=g`;lA+n+#w==#u zjJX9WVP8Y=OUO|#2Qso!PDVyNjE$vo^B)RcuPFGPVx7`nxGw)(YGJzHmoIlyKXSWCw~XYb{HC@T-g&7vkb+)L zV9qr-Y5TWgP}8%_CxI~qBi`gP8=vL z+&E9Qv%I>ZVsoU5vNG(ueBNzDqv84$01Z;T9(6NT()m-7@HWGaYG^HdQOTQ9y{XLn z+T)#3T@k%XIOu}w8?XsBoc)AF&||W`I|<#M`AxR9brFq;#sp|i(%IJkR%B!wk_`3e zx?*Sgd22cU41S|q!&of={BUb|7gh{cJxmF^uGMMq6i8w%^O?x+D9TLaUjQ>0sqNEupCagI1lPBopP5jU*1BrUbWKS!3}sDn>yJXlP7c`TM$AboDm2?pW07kv*m5v< z?m&r!nhd+NqXJtBu%Dw7gIs>AK!wtQ?rv$gW5vglDZ5t|3cqozh(Q^`V+PBO)9IRH zFTY~6vTOvmSw>mDThIoyhwy=GHE{1axx;nzJ0|ons}c%E=X+jtV0<}Hm^fWXq`Yfk z5egG6vhWc(l*kfW_fj`3GNH#A)cxs-zqZMz%n#>w5@Mp%!XIIG$aeIx=YrzJtZ^HC z%5uH4KqeYfm>68zg|&~u7oXgn?}-%!5Yzq`$M?Wcs~Dz^u*SL*5n<%g$H#Z%C`xJU zkm50W|Lz@%aH3%zY`z2WZD!(Lb9h#}g5@!O#Fy-GsjfoQ3)y;CVbA?{3Z3jSq0r;T zA;sPq`S}x0OT=AiR2xH?qH($^Ow44Pv0!3Irm_Oxv#VDsjib-(ljx5^NwFIoF>%ckVp6Y4mb=Ai1Mici){bUMOK+bTKDi zC0Oj?c%A_q`wRp)m!0x5(yt01ES2XkUgrQ0>s-NvEwal-sk79 zQ0{!Wq2SZXJTk}W^mN&utg6w`uUv;sZHl*r%*@P&wnoWSI(xswY*CsWUcGK(J;A-q z=wB_hogvWbx**4xVh4l&3_M-hO<_3G(Gtq#AzPAh_HV`o2%LW-5$#1NEzIsrRrn3H zRad>RMC=mOBCCtbt3s|`eGY$#A1G5Rx%H-es3D_!RTKouMem=7BD)LH_nq*>$oqKF z%?XxDv}h(hP%G4!LCJ-m8e_X2k;CPChv(Stu1^PGF9^b&=+_sp-yIr1_Jr#eW*ZOk z`XNesAgozKLWVOQyX%psbX$ZZ0`YQ$wAAduo2R%9_!AW<-=SEQaX;ysWM?81 zTJ_thQLHfbHFO;;!>_MeZhMiBpC8Sn{+I}&zyDUZK7|j2-ZRc0Yr7tUskGrnIqI#? zL)}==C6FJw@DI_n(;X_b3$PlAvBH2MHU4&SL+dsh2MF%@at@1p{C!TmaMjZN&gXXf?sD*;iZ>TW@HAQuB=qh0(K7fE(FXh2?0ih(2uFnm- z_PUl9iW>FM2(~68itSE7jhR1qa@Sl+XLMN|p(|mA2hu9cdJM0ts}V-sm)4iHwY4TF zSFDIUzgvdpx6Ncw5WT-7RU2IsnjG+|+8fQVV<8)*smkfSj>NyUi$^7LF6Aiz8t}N( zyS9{07?TZezEogp!>F()ySOJee^ZfP!G#SqWBCv1XG9x;CHA=S)zzA)oWIhIKN4_{ z*)}TPU9i(0Ddm2FnQ{Zf_JA-G#hi`V*Dh~=527USyW{jMpv5DA!r!dzO`TJQj~WoX zO}SHrL&V^2VbyCiRZx)P4WDRK#353e>|_uXmA;XH`HL(3lff~QX}gDxrn6D)fU@kBP-(b>StP`bvE^0226@!0X=C1E4$CsDS$nB}$k`%lW6UW&T_| zF(RIpYnukLVpNn7xY#j2@OQ~-=XM)pWV=F}N(6&VvXd(aU)6udW5hBtI2IA`14ADR zAkfbEzYfo_?3t656V(&Gplou1_cLAge?2YRu>oyI_lS|TLVowDWvf=1%Lz=L`VG73 zhrhV(89n5tRX7I06D5Izevtk_!wroYtX{i0MYK@7*rjLst)Chku_ z(I?}~sNSHWs_N_Q4If!zt@TNBgiWt^Z!0bZCZs$QWCtW|kBr|oBs_s!m97|NXFE`h z)8e+hMqUZouRe^U(}w*}8}i;@fQMHiB`Gc6L744dHv9>1*HqUv%>Aj1WigxYM^jZ0UlL=CGL9yc!=C_R;*={ zQ?CSDgSWZj_!S;^2X5dC*w8Z>=X(Tr92S<7LtQz~5a=7vLY z@&!$I>sIhgP;{uBD5E$73IX8(x*bJi5JuSgtP+aSobYXr9a?(mxR!JcBpw_u= z)$AtoWs#2x2VJqft!ogSA()T835ZP`de#h)GsW%aDik6DC(%3#1r4>`BREX_IZwfz z1B@3O;8-jB@xZ}@V*Q2_*v>RXM;h+v6Cx$c%rC_uH+h0~g8p9dwiT$#IhXL-!ZZpo z0X9y=4Jqheq&R0fizI{J7I_ennr-XUdb_;kAscK=&k+)j8L`>Ff4X~Mh61O!G%{t% zHKS>H&ad!=DUgNq@Il`nUhnhSF9ULv#{-K?hOk-)ALQr}*iN4z!X$86#}N719C$Y? zbySt>Lx>Am+Lte`I6(Km_58OVPIf3Y6vxGx?b~-{EcwY%NO{>A0i^xQ?_lVL(Bd%e zc@S!jZQn7C#m}@R4KH~be|_Lq5t|VpQG{xR)vezEihxc6*Bp@C(ov~(=WWIT!-y6D z0!U=W4__ZcuvFQ8K%+ybeTTs!+E>t0lx|E-C$KDp?K~E;Ccmjcge8>|;3DrVl*vH3 z`Vli0FSux#W=@Y=1N1@rP#6e9P??skz5(6_>VwYyYr$Uiiw!{*6;U^L~bP`(}lfuAa(@4e>}2A+5?Li))9 z3*it2_gdpd58J8Enl1!tPZJnEh(SUhgrTR_DggaULf9Qu0SEqGJCNm`6=i`SIlUR5 z8<823aiBU=L6CvojanL|F=j3jHmKZ}alVz&9oZ`AuKo@IE zBMee7xHkO(iWnKWGm?ha-hK#1I*(6}L~MhL;{Q;1zxEf>obSWWn* zgUDe{<7F_PZkMLMC&Sc86|eBqlb3qrReIz-b$`|j1hKRZZJ18PT6oQje?rC&S0mW& zLAT+C{fSn%iTh*hn{#xZoPDI+ZwjRtXAyR;l?yS91P)7H1Tc&{0VRsej!Gbc^ zW5!tQGdUn01ZyY%>~zYTa)8sMy!I4c4EPq1Q2;l5j!osVU??UlkLu(4T9D^Y35w}` zUmIy4XamC$PU>;`51|#n)9#l)d9q$gN@q1*E_4#Jin)yN6{IZc&tV`4GMKGT35jI*HJS#2s17iE=lI`;Gu|@^X2=y0fK^fs zZ3Y9jxuh8zf-*T&0899r_Sz;~82DbQ;+cg0uPO{hy~UaPiMadpX1xoeJgU`5_23T4 zESbYFJdG*-w>Y+YF%8d2^_wed$L0$N(n$+aNOk&r-n@A-Ka3uq42>c2%gH#VM9;+J zL2@6?(!NcJcvB+{`?)KLSo_UPV-9L0Y~hyUS#J!Ya22-)=qk}f1t ziJnOclj9l0^aqPrM*x5%hQs6nQ@0lFsms@}JV(3j1sf-4;vpVHd>0oNA5J7hBrrdnfmHhAY9)#;2KQ#0}mf;aC$b&1#ot80g3J_ zO3V9THLVvCB8d#Wp)qXXi1R@CpB#=IDz_4(1{p)m8ZTj;4N?-ds zi2g5~PT`A!SnWf70U{GtcB7?xKXqohLF5JNC^~Npg5&Ge&@=HWRIr{s`xDT8*vZou zOPYbTc7MThtuce%PQVOeNE3_mh=Ma^y@pu_$Q4JpMA1h=SELDO@3! z9-3SpiwRYx?MG*n^!4XBaivFz>5rtOPvTYv4Yt|r7a25N{CUKw<3Lnqj%ZULI_$+JtP!OC|{M73#* z8=)VxWg$bvOa(D=W8E!}W4)2WSKP&y= zN!Qxi>dmFN=Ek5Cj(C9tiiRV)g?|Hn!Wy1Q0FKxce=%C3t*0o$1|Bf}xwTFvDa!8CJ2^P;nc=4)=h|yzjcxNqhEOFepZx znoDu2x{gx&9Ru35@{9DgRZxp+IWTrO&!p89popY1ZAE9gC`*`c;0(Up!t;EbM4tL- zud~J|R+BTQdZJOT-Und`2a*F@M${8Gu(y$_XAL-YwyTP$;r_sa-gvr?80!!_pvZT{o<)x;Nh?{AJz$oE9qYd z#nNxVC0wP-cfmGEX@ZeO0113!-U zwN*TCP{tpNfPxi@uCk|S;e6CFvDpxp2{_&L_Bl-WYvQoKtt>(giaShQY3CTeC(n$0 zW+EGbPJ|ge7XJ;9CxR_iX6JwF*3tBSTtsfSVJ!rLTHhly8ju4E!RV2_XWJ}>KQ*L- z-@PxZ@V z;|C}|5!-TYjXwrb4AWL>;8^(yMi2l$E-t*DljRE0Zg5i&!V&547vHwDw15=71UIp%LKrWIM=49WoN?c7tBbY*b5>&-ktbiF4&)Ln+I@F092m4`q@h$@` zJD8>wH8lZUo%$=cn&7pS2IN>`1h8!pCc&$8>K|a>2BW+$I&BM3)3``8FfTXiHF)CrTlAY|m&4Z2qqJS|Wz>RJ&-cXt2FxSN$tpfUC|AzJCRoG>$k|6s1c zL9sd$q4WDU!5CM7Ny7hZs&Xe$ucg_|MNf(&8O#V_mSoiR8#mZFVhT)HO6+HZSc=m| znt;j3soFA|u%7-w6BK_W>3r;V8fxOIsdXUrSO;@b2P}!5i0KfcrS~^NuLDXA(AiUaum~7(s3r zq6S&cFla1MuOt4Pl8bR|2-02zwA7!GKOxbTJHob}tPN=zLh}`{0-Y}FR85@|Bg)1w zE8_mUYWSy^Tix%8ElZ~>!w^!;2Vx7l`_W|c>wpk|HK3@~2^X@x0Pyww5_m(8$Y?eq zFZ9Us5A1jGgHWcL9*>Sw*Vwl&c#IN9<-QS{+;$bJP+b(JpvGW>pJeOr|+z}iNtLn zPolab@E%jm-hlZ)FKrXC(b#2srBz2&cOZ>Fz+cyGd1xA1g+tqGh&@vRWI3T~JHg;7 zDo+GV#ji6ap9fo<>f5*{7C+%6(@mR4mQAoS0;GI{eY!<6gXe#&a2QIkT9zObuS`cu zno$^-*5Z3)oh9Kbc^pIuZhyfD=Qu=h@O!<|B~7ca{Zgo_>d#nQ8LmUGFvX?5f*HWL z%-z?BzR4)vBL|%n6+PCZf~vc36EJ~Wrr?O`zQVu z-sHTPMu4RN!A-5GCBClkx_L7=5YJaC6x?O_gC#7=3+TIvEojNZ56i0TTr; z0j-&uqDu>Wg6Uwz6A;4dUlHHKvD1pbU}s_SJIA)`+H;`b;?H5Lam$JeGD|%-hh{R# zheHt#AGls!;z=l9v1gjU3~z*pqN3GgD`8e*5mkaGW!gg~lW7`&ha{b#jFug3pPXoM zRW7>u4KZo^xh0Di*UH$KqS9W3{U0g+U+;ntbzc$K_*^zou1lpP?DDGpkxfxLE5S|+7u+OW#|CWqFQV+7ga!C_g@S7EGsg?}p+R?9Y{2X@W8cMnx!*~BkHaSX_X@1X}vm&7Kd=wu=!tm$5B zR2~I;T%kpfIf=NxgY93k5m@k+Zo6(AEK*lpmVGsb({^FeXs7QR&m?piRTpp`d$JZX z)UTLD9cJoW%rNINyq;zcmgLb_=7eGQst8)`W&zZa;Ua%d?a?A_@2fLkUN^Yni&)@h zr`utqS>8p&p+vD!6q5z|6oBp}ixy#AUTriFhkxDzmRo_q6VxH-6I@ok6Bj%=Bg208 z?h7$)MH9cQjEvetLROh>rKW+q^#s;pl1-Zvgkj$(_B%SbcD zl#2FAPrTc^!RiS>L1IicbOFOVvSz9S0(cfI{@rs8)?ptIJ$qHjz4&<&I-bga(LZGQ z#MbZFaX2exlQR=7=D`D)-6^r7ubK9hk-dtjW^s})MK_2{m=%01yWW=T7Vgj@tcX+@SISzL(rN ztd8H_30^!U`34$y{;=i2%T}xy0&WkZk;(+{piE3m%&kYz#c;J-qv>xFsB3Rf#&j{5 z8OASj=gmV+2`{#d-%8Nuo8lIA>Z%3^NSvryb-kn+^e}!i;=Uj+{LyPMS>c9Rm zNAB%^=t}D|;X-e_lo*&!%b~wGjr)w9iAf zXZ&)qFak5T2+Tq6`j}v&6Y-omzp!`Aw`YDK0Hzw!?%n(H1LLHRF6$X0E&jcG92r;E z&}a`ij+CYJUiE{@f2M+AIiWE?t&-{8pa^W7IaO6vVRFvt^ecP`h%z{fy=Ai$r7_M8 zmq$09hW&4|%Vo#5N(inYalnGt-nb}t7cl?6UO9gJI6U?(8XsvQ<^g@As#sDj6=}X# zukOdG$7@BRD(mZUG1mSYYfZoB>#M4$s0b6^{zQCX9LIe{dTPh4t>F>FwR&~Jpe-5O zfnz+F$YJQTOZx80ZW$Xs*r+)G#zP;zCHE3iEqbe_M&&TzW{>R@MBp8XY1!I{Otg}? zQ(UQb4i0SX5w0E4%X5fhIAUT*7{pNhbss)_s8VNRXOI23n?WxB-%n8gSoFAe5+HGK zY6NNYZ;N3FzmB->ly;y#In}4|c=6o>GdPfNs;4mVRsLrf76`vQ==26RfHrL6<73PD zEC;ikzsOQ#d8z$%3${q~=s?)*QC3akwU7GW`m1?`Ay)eIma*D;Y}YXa1pqa7dq5XF zY>_({zx|%9tf*M_mMreQW1_38i&D|>tU1I!IWOUIIe|h+PP7JyS0_6>qR8@wGNFiU zvgboI4BSAnTrVaJYt2!OY4M-7j)-7z+V}5ed-KpH3~KPCVWLRP6S3~Ht1a0aAGDJb zx3w;EroWu-SsFwv1_y};uXl1_rI0hN2>yQZ$me7 zm`oL@@OSLJT*5~d%s$A!*#W>R>!Z+EVCiA{Q6MN=zSa7`d1QmwJxpnPbx2YT0Ti}G zJa=y7Oa)G+=7)(Qv*0Bl!eH|2z{d7of?Jt{2w!vTyvia*zY9Vn8}SKz0c zHzm_@v0AjQwRH>*Q(LT96t(^WzGs;$^HX3vd$pt)_WiuSehv@UfI}Z8vx)^x)BO@) zT)>7kr>%F$U|B#8Z@j8q!F_xi{L9yVyAUM@ep6sF>fH{iR&$%V+v&VLp z*mVRW61b-f>fAsLUVR(=z8EkeU|JYEVVKnm{m?UziJ;IOg6;;3gs>xF6p5m7^ky9< zbQL$ZIrImt83X=H0vkB67{Fo7MJP!)cIB#2X_duck!m^$SGWM(fqKp0{zp4ZJEVb` zf`FYiNJkZM4=K-w( zLq0njn~q{x#&Ne!t79d52}sT?#B%$z>#=rUZ(p%LV(5 zHav3meiRQvW(cMUZhO(tuKalSm$=*F1gYd|o z4{|{+Mm&jSNX2??`}L2V=S9u$FJo+`8ka{1ACgg5SsmOZocueCQ6~$;NT6ir3SK2b3iMsBZDI&Y-ONm1oy>4e3J&)790yf zG%+GJV9yM%6YVNT<|UkdM`Gav63LpC=kRD+oRszT^#R9~>f$(Y%e%(g?#21I9gacU z8>e?iHxGYq(U27$v_(lpzD3Tm9(yI^k=6X`E6MwVcJCHCbWs6;cwht5x%w+6 zvN<4N-#@*Gfj%oh{6}UX;wVRG+8Cr1n0lN;_W+FLG(6T5uHCrdh^4_YsN9*cbb1v_ zm9DmSBdXi$I@`+woHTGeP;MN`G+)lmom$fd1~%&0^rIj~0)Pd`j}Yw)qX4t+V{8W9Yqm`;7G# zn&Jg*(Z@r=Da_A<X47y~V%^L(l-+)r=WJ82=qz)j>DdVe-sUAzj{ zaiDQJlCneTh%!6vM3c-n|1nqZD-Ky2SUzkxiygB6!6C~(>?n$sFTf9N5qKh&F4^$& zCoaHsBi!qcH7#q>CTL?J`RY#8*|=w~58;I%Hu@k)QW29uYQ)gwMHrB!wU%h0+;Uq; zt%<5rmfsvk1q)G6?9qj9mH^vgrmh2-he>GC1$bWP`e8J8-3i*HNZ|49D1nWM$3Z~A zgZ&uWZHVzM8gI}luj|+}r1C8S+UL##37l--4ZNzqFh;d&B9PL~CkT)yP!GDax0hD~ zTxyKLoIIuwnRy0%93$cRACcbE7=FCumR?0>{dB~4dWRwxF!`8jm^EFy7(uVD18*{y zJi0#}zR=zjO-K|yg<1Q>fSeFEp#ZcT8xs<;xkK(_N(0(6OvVb3r8c`EmF%D;PwieX z^YV%;usp@wo?QT6P5m?%$Cgp;KcN+WiyUP-hy8|Cv`Gb|jhVA5zOGAHeSLg9A|3p| zLRGoZ%oDTRxPq>_8=C)JW`wI=^bET&^p(%i3f%BX^2>Mcg`@}|hUZ?41@rJnqFr&w zYaxuie4ky$;T*+ZZQhDF(jbG$#;}$j-T1HHyLlokd{^qs1|~j&%=}r<;tGq>brSCA zPWgx{;H9hI&3pPZ*vAaC zSxG%w=9xt6cC%yDdF|m^5B!3EQ0?F^+Xv{$GWj*CqU=RGst&~-Dd1nrKV!y01qV>7 zSi4sdnZpCfC&NZ$E}$UglZe}1lS6P)MZU{^*a!euMrm@H={eg^EH3x@g2Rrv5y-?| z6<_<)UQeD3m@YyG+Av9rnzU6=-blDgZ~+ZXqDV@At&7Cf?O@(Jr5}_g?LTK>5T_7a zMV!dR6NJ%0#=EJoa9dl1Q>Dmt5{J63L2HT*8M#ut!$)#S2`BO>e-Dq__r(g$H!q}P z)E}QYyaR({ccVR3FMrM3JLF%tK%4Ls9W>gu6~-qfGU^1U%2w?`Fp}DLXS1_T#Y)Ih z!;sQT29c+&XXKcqpjn79u6)ox>VT}eZ3q+rqqDdrEQfR~@o?Q>RTeLV2!j3-FH?T$ z%B`W5&!FbU&=Hs++^CwsJLk_7{@X#|3`XPO%DZla4t0L>R$k+zttrd5#e;9G!ULYl z{CT0xC3HBQxs;(n^W1|7Vfx7=wj?D*#Y%K?pZxX{9)h&Y2spk94*~8IYj-A>_WnR$ zU*Uq6ua|HAB&ZJ9>TG!0s|kL1gYr% z#TyTq(34kigRv#6MDc=k1|%ZUA?Rq>9=`?JU+o_ag@EJ5#1LFPWkHI6ZZg6#bs`(& zCpSI@W&A@gpt#(TMsRRx0f8WpAytiV6OpdowjV-w)hR|rMQt}kb0xwAR6=;7FU|$| zF$9qeshA{cQPe^JwK{syu8l4%AotA>Jdn-9S76wo4h4kmZ0CmgqktpSjIobwF+T<6 zYuE`ZE45#LeW=-kR{B7H|Fg_YKAt&NH6pMxRdeQ!dZe&y+2-Q=`(tx<|HN_NFI4k? zvSt%Qmsu=-WLCLftA|-6iWbSI5e4S1S={TZFqC)hTH+WmLV9r3k zwt)2~u$Z{)-uz`*^R&VLmY$$jtisWg$rIklP+f zq9TLZgqDX70E?ZNmK8MH`id*>N4U; zTz)Uze0RbZ!k>9Ph=3=p&_iOx6WR)Z%T0<6`oqf5F=7Xg30idiNn_ZS&9vfLFx2S#xvWQhI} zuOPS{MXRzOcOCkw7sG6%f=ccapL5owbgCxQ!Em zmJ2YYT1!Yk8~}>ZOb1ZkqPn?w>C)9-=9C2M+C%7oTFDG0DiV;(JOXOlwnc5{VOinT z;gUH~jd`5&+(pfQt^j_h(ao8*@cYpxz)^IAJ7J0q6azr8*;Vx#8MjD8BuChHPd%U& z8>`@ukmB$?Ti+%k3E6blPPGbAn3d3Yplss-%^v)Tgabyl>+yG?Z`oYEJo-=~fY z6aMfK-tR{SNJyZBvE2eZ`VINn&J8EEO!ut`PzqLY=NF4iL~hT>>cnh|E5brTp@5#| zY{L?0e0K>b^^P6l)j~Ma>cJ1*VfPg@Sq>3sdI6S{j1klahd&O`f5DE&Q&KHBq(?jFS>!d z{|lwaanQAMb7?-lH}veb4aUNu9}5z}4N#3_M=86GmPA&ftLN&1)>g#+W2=@dNw;w} zu3-Yq%RL!Pus>Mxx76Q+RxwylA(Rc}$j*ecK!G}SRnOzQ=C>ixT zhbUap@sksN7#D{Pk;G(xb1O6K;07H;B=S=GY(gX1h-8Num;sv|qn*G!p)@%+<-6w@ zdR1d22RT~{!6#h2_!d$IU~@MF@e&l#vSeo9Y2o6bjmns~P4u=_^nxWT1_#oGuyiJa zJa;R@K!v#$B>cO)nj@lh{X!^plm|aJtEND)StNtJ;YAAi|dKTVx_Ervt~Gj&;u;2F6M_e*!3!G`S$ik6m?`~a@bvpv|*TIUa-k07tT zaw0_{>BD(=u>*c}6&But|6F;os2c~A5_a9`Z-R2Ic$w}-~1@Me(<`4-WW zVy4v_R2TFmSy`nt+UHjkPzu&ETRZyxlik>5m#Q3eCepv+jDmH4=SBU#jJf&in(u?H zaww<>%mb0t$YWk`MK=@)XdFf$W<9{JK(Za*U;Ogr%RJxJF+5bzZWw1%`itlcT3cds zWM%=1RDXBH-nW)b>YR&(u-NAqKkH1`;74NjIq923#lGu)QF;*$VCM_-C#{eBpOolY zSH>IaPXR;`$ZSUO*xJ;TZ4R#v!6D+a_8_5%QDcn6kX0(A%*xJi_1Oy??bSh(YP_}h0=lqe(5p7Utm3p$2hoz)AcP$zF(ShH@1R%HMb_qebJNQce zt;H|h-RMEBPOZYQ?W2v=Lv7ZqJaq6)%wpHZ`>j5rCTIEfL>83naj){W%+&5KGG9$6|HCh@$RDio7}0p_hR*-qUUQHZ+g;ml&UiKEx#FNyK;lzd2siRisPy7O(E>P zmH%NIBRt)|Nat)%OwbD}bgc}2OX~uqjo}V5PBV>8i4H;&dPx+^_eh}c3uF(4I_5`U zgQq_%9mL9^q+GLkiDvXv?qG#@c*zffEjD$oo>iFl%C(k_^O;qtQ{Icx34wxkb=RM{a`xz@wz1hiP!2A5jP^CF_pyHx+ zbqoGM-+-{u~NnYph-e$6VuyM1yJ0zOE_bxqb`y`5Qh1ru<*VXx9 zR5y3~dQz%{1;L@LI*2C;k{&lb;TW(`>|1_c-}bBP1kE4uI&URlll`%RM9*8(*!@>t zlhYPn2>^+~I8kUTmDfV3jf3tHy*PosG_KCeR;N!_Qb&elRXgdCerOU!{7eiuVv+*V zi{etcAJ{YY1oan+rZCYB3bOCaW;Qf9(Lku;oqo@W_7;~77bmAU_+%}DaEhw#^o|>3 zQc@#)(H?bh=tZvKW|eE->T@nvjf5l~` zkGD-nkR8JgZ{)3I0Xp}s&CNtxx3hJR6lB4tjII~s_X7`M z;Z99qURq!lmZBshb6sB_V@?fhdos%Mo*<@ms!tluB}e<)d!akI{j5Z_Jw8YS<#=_9 zqJ9y^gS)Dlb`UvrJ<;!fedA|;3>L1LJ?ngn z5H5yd5@;-wPp9wganwJVy&PA9m`*GbLHoTu+z}}$NZ3J3Z?WqUP`OK)KW|=kNl$OD zyx)Yd?*wfLhYlC}E&yo?9htKl5Ov;NWMu%^O2&Tgo``HcpDUUgo)8P_#b7ZBln&e1 z#X}*h?;yXxL{r?z0b8x!kRU2xf9WfKDBPnSV9W3=OG77r80svoYGVzHSd<>K)YdF{ zLWB|e_n{`xJN0S{D*`vxEk+xB-)`szNgHjyE76jOi9cOrE`!;}at>Mc7Sj3W7FrjN z$wSYPz3bad|o$6mrCa%4k zrQ8$c-q5jcNQmd*n+L=O}N~cS7L;&j+;NuIcPThh80=$XLS?W8I zb_1P5XR28q!V`9ee)4+5EIwM2>{^_b+Cz z`DU}tsuF9M%2~tABH0q1Jwr7DqtXvf(LK4x zA1xg7;}uV)fLzy!w5w|kp$xh`BGhY!tYU%T50`gl9a2{9Z-NaFnYv!!&=b>=fYed_Y)qj8 zGUcjKmQ@V(a8MQMzc*dTmooqv##BEqN$H7YHjfPVrgk;MPVzXn{#-tnv5t{=d?HNX zJCBnn_^}>tbw28I9FFtSU9c~VQa#{kpfJ!9=#p zg2GMnfev@7f+A+%`l~B_eEG{x`w4n?QCm!(HtnrVof}I4BFIYMm4}+_8RxmhkJi4KVDrn&F%pf$8j%=em}tw|cadqE z*w188Ep&ypPiIqz%o5g`ZSUVdZ@03x#>|qs7iZUTm@gbFubQu8)Q0J`G5PCEbPQqr zfaVejs&52-N?UMwjO8V#94vTSlu}?ap&{JV+N#*@L$*5=2NpHK=v@%Z9z7YMkLH!K+c zb$_b?{(BZPiivkxzJVl8^Z@+v>)Hu>p`4vm{U81vwf{}fFc(MpdlWgg$s_Gt9319$ zf4}RIym9aeVwt{5vB`HORj`}Bss_k+54z6y+eRnfP2)ob^i?iMzI#q;)8CR}@?8$Y z3xE6g?C(DN@$Us3`L^rK|A!A8HYJiVfn%fuNXKMSU?(kQC)uOxA&Wnc<|*eU{pH(O zrj^^s=Gt(c#18fsdr7Y^Bc;>gjpXmXe9a(N)?dEH|C+rR|no?NM>ie838`+fl<7=vkDJ& literal 0 HcmV?d00001 From 3ad120f063d50554f553556eea147acfc1993120 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 20 Apr 2025 17:50:25 -0400 Subject: [PATCH 29/95] Fixed javadoc --- Computer.java | 16 ++++++++++------ Existence.java | 2 +- Human.java | 6 ++++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Computer.java b/Computer.java index 20341bda..9c2d8d00 100644 --- a/Computer.java +++ b/Computer.java @@ -88,7 +88,11 @@ public void togglePower() { System.out.println("\nI need power On to function."); } - /** Toggles memory restoration on; cannot be turned off once on. */ + /** + * Toggles memory restoration on; cannot be turned off once on. + * @param e The Existence whose memory is being toggled + * @param s The Item being used to toggle the memory input + */ public void toggleMemory(Existence e, Item s) { if (this.memory == false) { this.memory = true; @@ -127,7 +131,7 @@ public void tradeBody(Existence e1, Existence e2) { /** * Attempts self-destruction. Only a human operator may trigger it. * @param operator the one pressing the button - * @param robot the robot body to destroy + * @param toBeDestroyed the robot body to destroy */ public void selfDestruct(Human operator, Robot toBeDestroyed) { System.out.println("\nSelf-destruct sequence initiated! Boom!"); @@ -136,8 +140,8 @@ public void selfDestruct(Human operator, Robot toBeDestroyed) { /** * (Overloaded) Robot tries to destroy another Robot - * @param operator - * @param toBeDestroyed + * @param operator the one pressing the button + * @param toBeDestroyed the one being destroyed */ public void selfDestruct(Robot operator, Robot toBeDestroyed) { throw new RuntimeException("\nFAILED: A robot cannot do that to another robot."); @@ -145,8 +149,8 @@ public void selfDestruct(Robot operator, Robot toBeDestroyed) { /** * (Overloaded)Robot tries to destroy a Human - * @param operator - * @param toBeDestroyed + * @param operator the one pressing the button + * @param toBeDestroyed the one being destroyed */ public void selfDestruct(Robot operator, Human toBeDestroyed) { throw new RuntimeException("\nFAILED: Only a human can do this to a robot."); diff --git a/Existence.java b/Existence.java index 60fd7630..b69e4b0e 100644 --- a/Existence.java +++ b/Existence.java @@ -169,7 +169,7 @@ public void lookAround(Room r) { System.out.println("You are in: " + r.getDescription()); } - + public void inspect(Item s) { } diff --git a/Human.java b/Human.java index 55d9eddc..5fe648fa 100644 --- a/Human.java +++ b/Human.java @@ -19,7 +19,7 @@ public Human(String name, int health, Boolean isAlive) { // To overload - /** + /** * Immediately changes one's isAlive state to false, and health to 0. * Often as a result of being electrocuted or hit by a laser beam. */ @@ -28,9 +28,11 @@ public void die() { this.isAlive = false; respawnChat(); } - + /** * User fights another existence + * @param e The robot to be fought + * @param times The number of times to fight */ public void fight(Robot e, int times) { for(int i = 0; i <= times; i++) { From 4a6929e2f1d5c30eb4c29810b5235e321cf45321 Mon Sep 17 00:00:00 2001 From: Clare Wanjiru Njoroge Date: Mon, 21 Apr 2025 19:35:52 -0400 Subject: [PATCH 30/95] I've added the walk to and crawl to methods to the Existence class --- Existence.java | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/Existence.java b/Existence.java index b69e4b0e..aee588b3 100644 --- a/Existence.java +++ b/Existence.java @@ -1,3 +1,4 @@ + import java.util.ArrayList; import java.util.Scanner; @@ -8,6 +9,8 @@ public class Existence { protected ArrayList inventory = new ArrayList<>(); protected int health; // Imaginary health bar public Boolean isAlive; + private Object currentRoom; + private Object currentTarget; // Constructor @@ -174,15 +177,49 @@ public void inspect(Item s) { } - public void crawlTo(Item s) { - + public void walkTo(Item s) { + if (s == null) { + System.out.println("There is nowhere to walk to."); + return; + } + + + if (currentTarget != null && currentTarget.equals(s)) { + System.out.println("You’re already near the " + s.getName() + "."); + return; + } + + if (currentRoom != null && !((Room) currentRoom).getItems().contains(s)) { + System.out.println("You can't walk to the " + s.getName() + " — it’s not in this room."); + return; + } + + currentTarget = s; + System.out.println(this.name + " walks steadily toward the " + s.getName() + "."); + System.out.println("You are now near the " + s.getName() + "."); } + - public void walkTo(Item s){ - + public void crawlTo(Item s) { + if (s == null) { + System.out.println("There is nowhere to crawl to."); + return; + } + + if (currentTarget != null && currentTarget.equals(s)) { + System.out.println("You’re already near the " + s.getName() + "."); + return; + } + + if (currentRoom != null && !((Room) currentRoom).getItems().contains(s)) { + System.out.println("You can't crawl to the " + s.getName() + " — it’s not in this room."); + return; + } + + currentTarget = s; + System.out.println(this.name + " crawls slowly toward the " + s.getName() + "."); + System.out.println("You reach the " + s.getName() + ", catching your breath."); } - - } From 6666106868b2656fd5c625c4cc13e0357786d29a Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 21 Apr 2025 23:35:01 -0400 Subject: [PATCH 31/95] Changed name --- ...am (1).png => Annotated Architecture Diagram.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename Annotated Architecture Diagram (1).png => Annotated Architecture Diagram.png (100%) diff --git a/Annotated Architecture Diagram (1).png b/Annotated Architecture Diagram.png similarity index 100% rename from Annotated Architecture Diagram (1).png rename to Annotated Architecture Diagram.png From 90f08b3f43b8d7008b76fb3dbe3c2f06152ee816 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 21 Apr 2025 23:35:43 -0400 Subject: [PATCH 32/95] Updated cheatsheet.md I added the commands available(currently) and the tasks --- cheatsheet.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/cheatsheet.md b/cheatsheet.md index d5dc4294..d04cf355 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -4,5 +4,44 @@ Note: It's a good idea to also make this list available inside the game, in res # SPOILER ALERT +**Commands available** +`use(Item s)`; +`take(Item s)`; +`printInventory()`; +`think()`; +`fight(Existence e, int times)`; +`lookAround(Room r)`; +`inspect(Item s)`; +`crawlTo(Item s)`; +`walkTo(Item s)`; +`electrocute(Human h)`; +`fight(Human h, int times)`; +`unlock(Computer c)`; +`clickFolder(String folderName)`; +`openHistory()`; +`openControlPanel()`; +`toggoleReasoning()`; +`togglePower()`; +`toggleMemory(Existence e, Item s)`; +`toggleLaser()`; +`tradeBody(Existence e1, Existence e2)`; +`selfDestruct(Human operator, Robot toBeDestroyed)`; +`selfDestruct(Robot operator, Robot toBeDestroyed)`; +`selfDestruct(Robot operator, Human toBeDestroyed)`; If your game includes challenges that must be overcome to win, also list them below. +**Stage 1** +- [Task 1] Touch/grab the teddy bear on the bed and get the first soul; +- [Task 2] Put on the leg hidden in a box; +- [Task 3] Stand up, find and put on the eye in an irisPot; +- [Task 4] Open the door leading to the lab; +**Stage 2** +- [Task 1] Crawl into the lab; +- [Task 2] Unlock the computer and see 2 folders; +- [Task 3] Click on the history folder, find the story, get the second soul; +- [Task 4] Click on the controls folder and play around with the control buttons; +**Stage 3** +- [Task 1] Have conversations with the “human”; +- [Task 2] Fight and electrocute the “human”; +- [Task 3] Exchange bodies; +- [Task 4] Choose to forgive or revenge; From a7f35f6b355453b935849349f8a76dd1d9227fe8 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 21 Apr 2025 23:36:49 -0400 Subject: [PATCH 33/95] Added attribute containedItem and method storeItem removeItem method to be contructed --- Item.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Item.java b/Item.java index 1b81d800..9a465fe7 100644 --- a/Item.java +++ b/Item.java @@ -8,12 +8,14 @@ public class Item{ private String name; private String description; private Boolean canBeGrabbed; + private Item containedItem; /* Default Constructor */ public Item(String name, String description, Boolean canBeGrabbed){ this.name = name; this.description = description; this.canBeGrabbed = canBeGrabbed; + this.containedItem = null; } /** @@ -39,4 +41,22 @@ public String getDescription(){ public Boolean getItemStatus(){ return this.canBeGrabbed; } + + /** + * Method for an item to store another item + */ + public void storeItem(Item item){ + if (this.containedItem == null) { + this.containedItem = item; + } else { + throw new RuntimeException("This item already contains another item."); + } + } + + /** + * Method for removing the stored item if the player interacts with the container item + */ + public void removeItem(Item item){ + //To be constructed: if player takes it, remove the stored item + } } \ No newline at end of file From a9b7c11a9a66907eedfa6fade9c286db02cf5df3 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 21 Apr 2025 23:37:10 -0400 Subject: [PATCH 34/95] Stored some items inside others --- Main.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Main.java b/Main.java index bdd8370d..a59849b6 100644 --- a/Main.java +++ b/Main.java @@ -1,5 +1,3 @@ - - /** * The Main class is where we implement all the classes and run the game */ @@ -22,10 +20,13 @@ public static void main(String[] args) { bedroom.addItem(bed); bedroom.addItem(teddyBear); bedroom.addItem(firstSoul); + teddyBear.storeItem(firstSoul); bedroom.addItem(box); bedroom.addItem(leg); - bedroom.addItem(eye); + box.storeItem(leg); bedroom.addItem(irisPot); + bedroom.addItem(eye); + irisPot.storeItem(eye); //Create the Lab Room lab = new Room("Lab", "This is a lab.", true); @@ -33,6 +34,7 @@ public static void main(String[] args) { //Remember to add the computer after Computer.java is finished Computer computer = new Computer(); lab.addItem(computer); + computer.storeItem(secondSoul); Human tammy = new Human("teddy", 100, true); //Robot joyce = new Robot("joyce", 100, true); From 4d0935a0aba662d43497193c9f2c8dd5c2d6cf1f Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 21 Apr 2025 23:41:59 -0400 Subject: [PATCH 35/95] Updated formatting --- cheatsheet.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/cheatsheet.md b/cheatsheet.md index d04cf355..e2c7b2e8 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -30,18 +30,18 @@ Note: It's a good idea to also make this list available inside the game, in res `selfDestruct(Robot operator, Human toBeDestroyed)`; If your game includes challenges that must be overcome to win, also list them below. -**Stage 1** +## Stage 1 - [Task 1] Touch/grab the teddy bear on the bed and get the first soul; - [Task 2] Put on the leg hidden in a box; - [Task 3] Stand up, find and put on the eye in an irisPot; - [Task 4] Open the door leading to the lab; -**Stage 2** -- [Task 1] Crawl into the lab; -- [Task 2] Unlock the computer and see 2 folders; -- [Task 3] Click on the history folder, find the story, get the second soul; -- [Task 4] Click on the controls folder and play around with the control buttons; -**Stage 3** -- [Task 1] Have conversations with the “human”; -- [Task 2] Fight and electrocute the “human”; -- [Task 3] Exchange bodies; -- [Task 4] Choose to forgive or revenge; +## Stage 2 +- [Task 5] Crawl into the lab; +- [Task 6] Unlock the computer and see 2 folders; +- [Task 7] Click on the history folder, find the story, get the second soul; +- [Task 8] Click on the controls folder and play around with the control buttons; +## Stage 3 +- [Task 9] Have conversations with the “human”; +- [Task 10] Fight and electrocute the “human”; +- [Task 11] Exchange bodies; +- [Task 12] Choose to forgive or revenge; From 68f07f8bc5b95254fa7d0467af1bd4dd698549b8 Mon Sep 17 00:00:00 2001 From: Clare Wanjiru Njoroge Date: Tue, 22 Apr 2025 11:36:31 -0400 Subject: [PATCH 36/95] Added the lookAround and inspect --- Existence.java | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/Existence.java b/Existence.java index aee588b3..05141f19 100644 --- a/Existence.java +++ b/Existence.java @@ -1,5 +1,6 @@ import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class Existence { @@ -169,14 +170,35 @@ public void fight(Existence e, int times) { * @param r The room one is in */ public void lookAround(Room r) { - System.out.println("You are in: " + r.getDescription()); + if (r == null) { + System.out.println("You’re not in a room."); + return; + } + + System.out.println("You look around the room: " + r.getName()); + List items = r.getItems(); + if (items.isEmpty()) { + System.out.println("The room seems empty."); + } else { + System.out.println("You see the following items:"); + for (Item item : items) { + System.out.println("- " + item.getName()); + } + } } public void inspect(Item s) { - + if (s == null) { + System.out.println("There is nothing to inspect."); + return; + } + + System.out.println("Inspecting the " + s.getName() + "..."); + System.out.println("Description: " + s.getDescription()); + System.out.println("Can be grabbed? " + (s.getItemStatus() ? "Yes" : "No")); } - + public void walkTo(Item s) { if (s == null) { System.out.println("There is nowhere to walk to."); From e250ba8b84955e354c3d6abff6f83bfcec6c03eb Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 22 Apr 2025 12:02:37 -0400 Subject: [PATCH 37/95] Updated Javadoc --- Computer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Computer.java b/Computer.java index 9c2d8d00..0c87de58 100644 --- a/Computer.java +++ b/Computer.java @@ -1,5 +1,5 @@ /** - * Represents the lab computer with two folders (History & Control Panel) + * The computer class represents the lab computer with two folders (History & Control Panel) * and a set of toggleable controls. */ public class Computer extends Item { From 5094a197a1fb3b60f7d5c558a4c76b68b6a815af Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 22 Apr 2025 12:03:09 -0400 Subject: [PATCH 38/95] Added attribute canBeOpened, method and getter for that --- Item.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Item.java b/Item.java index 9a465fe7..6a580c69 100644 --- a/Item.java +++ b/Item.java @@ -9,6 +9,7 @@ public class Item{ private String description; private Boolean canBeGrabbed; private Item containedItem; + private Boolean canBeOpened; /* Default Constructor */ public Item(String name, String description, Boolean canBeGrabbed){ @@ -16,6 +17,7 @@ public Item(String name, String description, Boolean canBeGrabbed){ this.description = description; this.canBeGrabbed = canBeGrabbed; this.containedItem = null; + this.canBeOpened = false; } /** @@ -41,13 +43,29 @@ public String getDescription(){ public Boolean getItemStatus(){ return this.canBeGrabbed; } + + /** + * Accessor for whether an item can be opened + * @return whether the item can be opened(whether it contains another item) + */ + public Boolean getCanBeOpened(){ + return this.canBeOpened; + } + /** + * Accessor for the item contained inside + * @return the item contained inside + */ + public Item getContainedItem(){ + return this.containedItem; + } /** * Method for an item to store another item */ public void storeItem(Item item){ if (this.containedItem == null) { this.containedItem = item; + this.canBeOpened = true; } else { throw new RuntimeException("This item already contains another item."); } From 7c2c0cdb392fd04c3af35f7b60cdf9cd17bdeeb0 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 22 Apr 2025 12:03:28 -0400 Subject: [PATCH 39/95] Added method open(Item s) --- Existence.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Existence.java b/Existence.java index 05141f19..0c8eaf1e 100644 --- a/Existence.java +++ b/Existence.java @@ -105,6 +105,12 @@ else if (choice.equals("N")) { // Game Functions + public void open(Item s){ + if (s.getCanBeOpened() == true){ + s.getContainedItem(); + System.out.println(s + " contains " + s.getContainedItem()); + } + } /** * Browse all, and utilise a functionality of an item */ @@ -217,7 +223,7 @@ public void walkTo(Item s) { } currentTarget = s; - System.out.println(this.name + " walks steadily toward the " + s.getName() + "."); + System.out.println(" You walk to " + s.getName() + "."); System.out.println("You are now near the " + s.getName() + "."); } From 60f66d7f6ccf06208e672fe8579d609f00aa0acb Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 22 Apr 2025 12:03:57 -0400 Subject: [PATCH 40/95] Updated test cases Need to add a toString --- Main.java | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/Main.java b/Main.java index a59849b6..8d626063 100644 --- a/Main.java +++ b/Main.java @@ -33,18 +33,29 @@ public static void main(String[] args) { lab.addItem(secondSoul); //Remember to add the computer after Computer.java is finished Computer computer = new Computer(); - lab.addItem(computer); - computer.storeItem(secondSoul); + // lab.addItem(computer); + // computer.storeItem(secondSoul); Human tammy = new Human("teddy", 100, true); - //Robot joyce = new Robot("joyce", 100, true); - - computer.unlock(); - - computer.clickFolder("History"); - computer.clickFolder("Control"); - computer.toggleReasoning(); - computer.toggleMemory(tammy, secondSoul); + // Robot joyce = new Robot("joyce", 100, true); + tammy.take(teddyBear); + tammy.use(teddyBear); + tammy.open(teddyBear); + tammy.touch(box); + tammy.take(leg); + tammy.think(teddyBear); + tammy.lookAround(bedroom); + tammy.walkTo(irisPot); + tammy.inspect(irisPot); + tammy.crawlTo(computer); + + + // computer.unlock(); + + // computer.clickFolder("History"); + // computer.clickFolder("Control"); + // computer.toggleReasoning(); + // computer.toggleMemory(tammy, secondSoul); } } From a6b37155a33b7c439b78cdb8bdded23999d7f90d Mon Sep 17 00:00:00 2001 From: yunxiann Date: Thu, 24 Apr 2025 11:26:22 -0400 Subject: [PATCH 41/95] Added boolean canGoToLab and its accessor --- Existence.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Existence.java b/Existence.java index 0c8eaf1e..8509e6c4 100644 --- a/Existence.java +++ b/Existence.java @@ -12,6 +12,7 @@ public class Existence { public Boolean isAlive; private Object currentRoom; private Object currentTarget; + private Boolean canGoToLab; // Constructor @@ -23,6 +24,7 @@ public Existence(String name, int health, Boolean isAlive) { this.isAlive = true; this.health = 100; // User starts the game with full health. this.inventory = new ArrayList(); + this.canGoToLab = false; // Default to false } @@ -48,6 +50,12 @@ public Boolean getIsAlive() { return this.isAlive; } + /** + * Accessor for the player's state of whether they can go to the lab yet + */ + public Boolean getCanGoToLab() { + return this.canGoToLab; + } /** * Decreases health (while fighting) From 9858b705f357759801bd6d49e6c622e48c6f44cd Mon Sep 17 00:00:00 2001 From: tnphammy Date: Thu, 24 Apr 2025 12:04:32 -0400 Subject: [PATCH 42/95] Added game commands help message and fixed typo in cheatsheet --- Main.java | 56 +++++++++++++++++++++++++++++---------------------- Robot.java | 2 +- cheatsheet.md | 2 +- stage1.md | 7 +++++++ 4 files changed, 41 insertions(+), 26 deletions(-) create mode 100644 stage1.md diff --git a/Main.java b/Main.java index 8d626063..7f79b67b 100644 --- a/Main.java +++ b/Main.java @@ -1,8 +1,12 @@ +import java.util.Scanner; + /** * The Main class is where we implement all the classes and run the game */ public class Main { public static void main(String[] args) { + // Create the player's existence + Robot player = new Robot("Teddy", 100, true); //Create all the items needed Item bed = new Item("bed", "This is a bed.", false); @@ -31,31 +35,35 @@ public static void main(String[] args) { //Create the Lab Room lab = new Room("Lab", "This is a lab.", true); lab.addItem(secondSoul); - //Remember to add the computer after Computer.java is finished Computer computer = new Computer(); - // lab.addItem(computer); - // computer.storeItem(secondSoul); - - Human tammy = new Human("teddy", 100, true); - // Robot joyce = new Robot("joyce", 100, true); - tammy.take(teddyBear); - tammy.use(teddyBear); - tammy.open(teddyBear); - tammy.touch(box); - tammy.take(leg); - tammy.think(teddyBear); - tammy.lookAround(bedroom); - tammy.walkTo(irisPot); - tammy.inspect(irisPot); - tammy.crawlTo(computer); - - - // computer.unlock(); - - // computer.clickFolder("History"); - // computer.clickFolder("Control"); - // computer.toggleReasoning(); - // computer.toggleMemory(tammy, secondSoul); + lab.addItem(computer); + computer.storeItem(secondSoul); + + // Messages: + String cheatSheet1 = "- \"use\" to use something.\n" + // + "- \"take\" to take something.\n" + // + "- \"inventory\" to see your inventory. \n" + // + "- \"look\" to look around.\n" + // + "- \"inspect\" to inspect something.\n" + // + "- \"crawl\" to crawl somewhere.\n" + // + "- \"walk\" to walk somewhere."; + + System.out.println("You wake up in a bedroom, discovering that you only have a broken mechanical body, missing one leg and an eye."); + System.out.println("Input anything. \nPress h for help"); + Scanner scanner = new Scanner(System.in); + + String command = scanner.nextLine(); + if(player.getCanGoToLab() == false) { + if (command.toLowerCase().equals("h")) { + System.out.println(cheatSheet1); + } else { + System.out.println("Command not understood."); + } + } + else if (player.getCanGoToLab() == true) { + + } + scanner.close(); } } diff --git a/Robot.java b/Robot.java index 8f4806fa..8d400ba2 100644 --- a/Robot.java +++ b/Robot.java @@ -9,7 +9,7 @@ public class Robot extends Existence { public Robot(String name, int health, Boolean isAlive) { super(name, health, isAlive); } - + // Methods public void electrocute(Human h) { System.out.println(h.getName() + " is temporarily unconscious."); diff --git a/cheatsheet.md b/cheatsheet.md index e2c7b2e8..426af70b 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -20,7 +20,7 @@ Note: It's a good idea to also make this list available inside the game, in res `clickFolder(String folderName)`; `openHistory()`; `openControlPanel()`; -`toggoleReasoning()`; +`toggleReasoning()`; `togglePower()`; `toggleMemory(Existence e, Item s)`; `toggleLaser()`; diff --git a/stage1.md b/stage1.md new file mode 100644 index 00000000..7532848f --- /dev/null +++ b/stage1.md @@ -0,0 +1,7 @@ +- "use" to use something. +- "take" to take something. +- "inventory" to see your inventory. +- "look" to look around. +- "inspect" to inspect something. +- "crawl" to crawl somewhere. +- "walk" to walk somewhere. \ No newline at end of file From 59b02ee98f49650bf40120fb3bf34217871a1ab7 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Thu, 24 Apr 2025 20:45:58 -0400 Subject: [PATCH 43/95] Updated help messages with additional commands and improved descriptions --- Main.java | 18 +++++++++++++++--- stage2.md | 8 ++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 stage2.md diff --git a/Main.java b/Main.java index 7f79b67b..53dc96c6 100644 --- a/Main.java +++ b/Main.java @@ -40,13 +40,23 @@ public static void main(String[] args) { computer.storeItem(secondSoul); // Messages: - String cheatSheet1 = "- \"use\" to use something.\n" + // - "- \"take\" to take something.\n" + // + String basicInstructions = "\nType the command with any item to execute that command on that item. \nE.g: open door"; + String cheatSheet1 = "\n- \"use\" to use something.\n" + // + "- \"take\" to take something, and add it to your inventory.\n" + // + "- \"touch\" to touch an item and see its description.\n" + // "- \"inventory\" to see your inventory. \n" + // "- \"look\" to look around.\n" + // "- \"inspect\" to inspect something.\n" + // "- \"crawl\" to crawl somewhere.\n" + // "- \"walk\" to walk somewhere."; + String cheatSheeet2 = "\n- \"unlock\" to unlock something.\n" + // + "- \"click\" to click a folder.\n" + // + "- \"open\" to open something.\n" + // + "- \"toggle to toggle buttons on computer.\n" + // + "- \"trade\" to trade bodies with another existence.\n" + // + "- \"destroy *entity*\" - to attempt to destruct another existence\n" + // + "- \"electrocute\" to electrocute another existence\n" + // + "- \"fight *hentity* *n* times\" to fight another existence *n* number of times."; System.out.println("You wake up in a bedroom, discovering that you only have a broken mechanical body, missing one leg and an eye."); System.out.println("Input anything. \nPress h for help"); @@ -56,13 +66,15 @@ public static void main(String[] args) { String command = scanner.nextLine(); if(player.getCanGoToLab() == false) { if (command.toLowerCase().equals("h")) { + System.out.println(basicInstructions); System.out.println(cheatSheet1); } else { System.out.println("Command not understood."); } } else if (player.getCanGoToLab() == true) { - + System.out.println(basicInstructions); + System.out.println(cheatSheeet2); } scanner.close(); } diff --git a/stage2.md b/stage2.md new file mode 100644 index 00000000..53ffad94 --- /dev/null +++ b/stage2.md @@ -0,0 +1,8 @@ +- "unlock" to unlock something. +- "click" to click a folder. +- "open" to open something. +- "toggle to toggle buttons on computer. +- "trade" to trade bodies with another existence. +- "destroy *entity*" - to attempt to destruct another existence +- "electrocute" to electrocute another existence +- "fight *entity* *n* times" to fight another existence *n* number of times. \ No newline at end of file From de8833034bebdce3aff9b18ed4bc3ce266fa537e Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 14:29:01 -0400 Subject: [PATCH 44/95] Added public attributes laserEquipped and laserActive --- Room.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Room.java b/Room.java index 87e84d56..79e945b8 100644 --- a/Room.java +++ b/Room.java @@ -11,17 +11,19 @@ public class Room { // Attributes private String name = ""; private String description = ""; - private Boolean laserActive; + public Boolean laserEquipped; + public Boolean laserActive; private List items; /* Default Constructor */ - public Room(String name, String description, Boolean laserActive){ + public Room(String name, String description, Boolean laserEquipped, Boolean laserActive){ if (name != null){ this.name = name; } if (description != null){ this.description = description; } + this.laserEquipped = laserEquipped; this.laserActive = laserActive; this.items = new ArrayList<>(); } @@ -42,14 +44,6 @@ public String getDescription(){ return this.description; } - /** - * Accessor for the laser status of the room - * @return True if the room is laser activated and false otherwise - */ - public Boolean getLaserStatus(){ - return this.laserActive; - } - /** * Add an item to the items arraylist */ @@ -74,4 +68,4 @@ public void removeItem(Item item) { public List getItems() { return items; } -} \ No newline at end of file +} From d23131e24c337294427f7de0113403add893d1f9 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 14:29:26 -0400 Subject: [PATCH 45/95] Deleted touch in Task 1 --- cheatsheet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cheatsheet.md b/cheatsheet.md index 426af70b..d27bb73e 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -31,7 +31,7 @@ Note: It's a good idea to also make this list available inside the game, in res If your game includes challenges that must be overcome to win, also list them below. ## Stage 1 -- [Task 1] Touch/grab the teddy bear on the bed and get the first soul; +- [Task 1] Grab the teddy bear on the bed and get the first soul; - [Task 2] Put on the leg hidden in a box; - [Task 3] Stand up, find and put on the eye in an irisPot; - [Task 4] Open the door leading to the lab; From 3a250843ea6b0fc0ad5a1ecab2e7e407da4adf67 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 14:32:50 -0400 Subject: [PATCH 46/95] Updated Control Panel methods The problem with the Computer class is that the control panels control the robot instead of the computer, so the computer shouldn't be having attributes like reasoning, they belong to the robot. I added booleans `reasoningOn`, `poweredOn`, `memoryOn` for the robot class and rewrote the toggle methods. --- Computer.java | 146 ++++++++++++++++++++++---------------------------- 1 file changed, 63 insertions(+), 83 deletions(-) diff --git a/Computer.java b/Computer.java index 0c87de58..1e031632 100644 --- a/Computer.java +++ b/Computer.java @@ -4,88 +4,68 @@ */ public class Computer extends Item { - // locked until the player unlocks it - private boolean locked; - // control panel states - private boolean reasoning; // default off - private boolean power; // default on - private boolean memory; // default off - private boolean laser; // default on + // Attributes + public boolean locked; /** - * Constructor + * Constructor for computer */ public Computer() { super("computer", - "A lab computer with two folders: History and Control Panel.", - false); - this.locked = true; - this.reasoning = false; - this.power = true; - this.memory = false; - this.laser = true; + "This is a lab computer with two folders: History and Control Panel.", + false, true, false); + this.locked = true; } - - /** Unlocks the computer so folders can be accessed. */ - public void unlock() { - if (this.locked == true) { - this.locked = false; - System.out.println("\nYou hear a click—the computer is now unlocked. Two folders appear: History and Control Panel."); - } else { - System.out.println("\nThe computer is already unlocked."); - } - } - - /** - * Clicks on one of the two folders. - * @param folderName either "history" or "control" - */ - public void clickFolder(String folderName) { - if (this.locked == true) { - System.out.println("\nThe computer is locked. You need to unlock it first."); - } - switch (folderName.toLowerCase()) { - case "history": - openHistory(); - break; - case "control": - case "control panel": - openControlPanel(); - break; - default: - System.out.println("\nNo such folder. Try \"History\" or \"Control\"."); - } - } - + /** Prints the history. Not completed */ - private void openHistory() { - System.out.println("\nHistory: \n Today, April 13, 2005, I created the first Teddy prototype. This is looking great, I’m hoping that we can be best friends!"); + public void openHistory() { + System.out.println("\nHistory: \n Today, April 13, 2005, I created the first Teddy prototype." + + "This is looking great, I'm hoping that we can be best friends!" + + "\n Today, May 15, 2005, I started building neural network for teddy." + + "\n Today, July 28, 2005, I observed that Teddy has learned basic tasks like" + + "grabbing things and walk around." + + "\n Today, April 23, 2006, it's been a year and teddy seems to be developing intelligence." + + "\n Today, June 27, 2006, deep neural network is a good idea!" + + "\n Today, September 12, 2006, Teddy's artificial intelligence is developing fast." ); + // more history to be added! + // added reasoning feature + // implemented control panals + // self-destroy + // electrocute + // trade body mechanism } /** Displays the control panel with current switch states. */ - private void openControlPanel() { + public void openControlPanel(Robot r, Room rm) { System.out.println("\n=== Control Panel ==="); - System.out.println("Reasoning: " + (this.reasoning ? "On" : "Off")); - System.out.println("Power: " + (this.power ? "On" : "Off")); - System.out.println("Memory: " + (this.memory ? "On" : "Off")); - System.out.println("Laser: " + (this.laser ? "On" : "Off")); - System.out.println("TradeBody: " + "(Restricted)"); - System.out.println("SelfDestruct: " + "(Restricted)"); + System.out.println("\nReasoning: " + "On/Off" + "\nCurrent state: ReasoingOn?" + r.reasoningOn); + System.out.println("Power: " + "On/Off"+ "\nCurrent state: PoweredOn?" + r.poweredOn); + System.out.println("Memory: " + "On/Off"+ "\nCurrent state: MemoryOn?" + r.memoryOn); + System.out.println("Laser: " + "On/Off"+ "\nCurrent room: "+ rm.getName() + "\nCurrent state: LaserOn?" + rm.laserActive); + System.out.println("TradeBody: " + "RESTRICTED"); + System.out.println("SelfDestruct: " + "RESTRICTED"); } - /** Toggles reasoning on; cannot be turned off once on. */ - public void toggleReasoning() { - if (this.reasoning == false) { - this.reasoning = true; - System.out.println("\nReasoning is now On. I can think more clearly."); + /** Toggles reasoning on/off */ + public void toggleReasoning(Robot r) { + if (r.reasoningOn == false) { + r.reasoningOn = true; + System.out.println("\n[REASONING ON]"); } else { - System.out.println("\nIt's better for me to have reasoning abilities."); + r.reasoningOn = false; + System.out.println("\n[REASONING OFF]"); } } - /** Attempts to toggle power off/on; power must remain on. */ - public void togglePower() { - System.out.println("\nI need power On to function."); + /** Attempts to toggle power off/on */ + public void togglePower(Robot r) { + if (r.poweredOn == true) { + r.poweredOn = false; + System.out.println("\n[POWERED OFF]"); + } else { + r.poweredOn = true; + System.out.println("\n[POWERED ON]"); + } } /** @@ -93,30 +73,31 @@ public void togglePower() { * @param e The Existence whose memory is being toggled * @param s The Item being used to toggle the memory input */ - public void toggleMemory(Existence e, Item s) { - if (this.memory == false) { - this.memory = true; - System.out.println("\nI'm starting to remember things...\n [ACHIEVEMENT UNLOCKED] You have unlocked the second piece of your soul."); - e.take(s); // Add the soul piece to player's inventory. - if(this.reasoning == false) { + public void toggleMemory(Robot r, Item s) { + if (r.memoryOn == false) { + r.memoryOn = true; + System.out.println("\n[MEMORIES ON] \nI'm starting to remember things...\n [ACHIEVEMENT UNLOCKED] You have unlocked the second piece of your soul."); + r.take(s); // Add the soul piece to player's inventory. + if(r.reasoningOn == false) { System.out.println("\nI don't understand what these memories mean... How can I understand it?"); - } - else if (this.reasoning == true) { + } else if (r.reasoningOn == true) { System.out.println("\nHmmm... \nThis is MY memory! I AM Teddy!\n [ACHIEVEMENT UNLOCKED] You found out about your true identity.\n Truth is: You used to be a scientist, who tried to make a robot called Teddy, but it outsmarted you and has traded bodies with you. Go get your body back!"); } - } else { - System.out.println("\nI don’t want to delete these valuable memories!"); + r.memoryOn = false; + System.out.println("\n[MEMORIES OFF]"); } } - /** Toggles the lab’s lasers off; cannot be turned on again. */ - public void toggleLaser() { - if (this.laser == true) { - this.laser = false; - System.out.println("\nLaser is now Off. The path to the lab is clear."); + /** Toggles the lab’s lasers off/on */ + public void toggleLaser(Room r) { + if (r.laserEquipped == true && r.laserActive == true) { + r.laserActive = false; + System.out.println("\n[LASER OFF]"); + } else if (r.laserEquipped == true && r.laserActive == false){ + System.out.println("\n[LASER ON]"); } else { - System.out.println("\nI’d better keep the laser Off for my own safety."); + System.out.println("\n[ACTION FAILED]-ROOM NOT EQUIPPED WITH LASER"); } } @@ -126,6 +107,7 @@ public void toggleLaser() { */ public void tradeBody(Existence e1, Existence e2) { System.out.println("\nYou can only trade bodies if there is at least another existence present."); + // TO be contructed!! } /** @@ -155,6 +137,4 @@ public void selfDestruct(Robot operator, Robot toBeDestroyed) { public void selfDestruct(Robot operator, Human toBeDestroyed) { throw new RuntimeException("\nFAILED: Only a human can do this to a robot."); } - - } From 56826104785b03a0da8acbc2b9873dac069f97ec Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 14:36:08 -0400 Subject: [PATCH 47/95] Added boolean `canBePutOn` and method `getItemStatus` I added boolean `canBePutOn` for items like leg and eye that can be put on. I also updated method `getItemStatus` so that its gets the three status at once. --- Item.java | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/Item.java b/Item.java index 6a580c69..c244bb3c 100644 --- a/Item.java +++ b/Item.java @@ -2,7 +2,7 @@ * The Item class creates items we will use in the rooms. * Each item has a name, description and a status of whether can be grabbed. */ -public class Item{ +public class Item { //Attributes private String name; @@ -10,21 +10,23 @@ public class Item{ private Boolean canBeGrabbed; private Item containedItem; private Boolean canBeOpened; + private Boolean canBePutOn; /* Default Constructor */ - public Item(String name, String description, Boolean canBeGrabbed){ + public Item(String name, String description, Boolean canBeGrabbed, Boolean canBeOpened, Boolean canBePutOn) { this.name = name; this.description = description; this.canBeGrabbed = canBeGrabbed; this.containedItem = null; this.canBeOpened = false; + this.canBePutOn = false; } /** * Accessor for item's name * @return name of the item */ - public String getName(){ + public String getName() { return this.name; } @@ -32,26 +34,45 @@ public String getName(){ * Accessor for item's description * @return description of the item */ - public String getDescription(){ + public String getDescription() { return this.description; } /** - * Accessor for item's status(whether it can be grabbed) - * @return the status(whether it can be grabbed) of the item + * Accessor for item's status(whether it can be grabbed/opened/put on) + * @return the statusof the item */ - public Boolean getItemStatus(){ + public String getItemStatus() { + return ("Item status for " + this.getName() + + "\n can be grabbed: " + this.canBeGrabbed + + "\n can be opened: " + this.canBeOpened + + "\n can be put on: " + this.canBePutOn); + } + + /** + * Accessor for canBeGrabbed + * We wrote a separate accessor for this because it will be used in the grab method for existence + */ + public Boolean getCanBeGrabbed() { return this.canBeGrabbed; } - + /** - * Accessor for whether an item can be opened - * @return whether the item can be opened(whether it contains another item) + * Accessor for canBeOpened + * We wrote a separate accessor for this because it will be use in the open method for existence */ - public Boolean getCanBeOpened(){ + public Boolean getCanBeOpened() { return this.canBeOpened; } + /** + * Accessor for canBePutOn + * We wrote a separate accessor for this because it will be used in the putOn method for robots + */ + public Boolean getCanBePutOn() { + return this.canBePutOn; + } + /** * Accessor for the item contained inside * @return the item contained inside @@ -70,11 +91,4 @@ public void storeItem(Item item){ throw new RuntimeException("This item already contains another item."); } } - - /** - * Method for removing the stored item if the player interacts with the container item - */ - public void removeItem(Item item){ - //To be constructed: if player takes it, remove the stored item - } } \ No newline at end of file From 2f28a8f7f6292e54ca1d97f2086630d478aa9d6b Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 14:38:59 -0400 Subject: [PATCH 48/95] Updated `walkTo`, `crawlTo` , overloaded `open` There are still many things to be constructed in the Existence class. See the comments. --- Existence.java | 287 +++++++++++++++++++++++++++++-------------------- 1 file changed, 170 insertions(+), 117 deletions(-) diff --git a/Existence.java b/Existence.java index 8509e6c4..f9b39fef 100644 --- a/Existence.java +++ b/Existence.java @@ -1,42 +1,51 @@ - import java.util.ArrayList; -import java.util.List; import java.util.Scanner; - +/** + * The Existence class represents the existences that can interact with the items + */ public class Existence { // Attributes public String name; + public Room currentRoom; // To be discussed! Do we need this? + // Should we also have an attribute for currentLocation? Like near some item? protected ArrayList inventory = new ArrayList<>(); protected int health; // Imaginary health bar public Boolean isAlive; - private Object currentRoom; - private Object currentTarget; - private Boolean canGoToLab; + protected Boolean canGoToLab; + protected Boolean canWalk; + protected Boolean canInspect; // Constructor /** * Default player constructor + * @param name + * @param currentRoom */ - public Existence(String name, int health, Boolean isAlive) { + public Existence(String name, Room currentRoom) { this.name = "Teddy"; this.isAlive = true; this.health = 100; // User starts the game with full health. this.inventory = new ArrayList(); this.canGoToLab = false; // Default to false + this.canWalk = false; // Default to false because the player wake up with one lege missing + this.canInspect = false; // Default to false because the player wake up with one eye missing } // Methods - // Accessors / changers - + /** + * Accessor for an exsitence's name + * @return name of the existence + */ public String getName() { return this.name; } + /** - * Getter for one's health bar + * Accessor for one's health bar * @return Current health bar number */ public int getHealth() { @@ -44,7 +53,7 @@ public int getHealth() { } /** - * Get user's isAlive value (true/false) + * Accessor for user's isAlive value (true/false) */ public Boolean getIsAlive() { return this.isAlive; @@ -57,6 +66,20 @@ public Boolean getCanGoToLab() { return this.canGoToLab; } + /** + * Accessor for the player's state of whether they can walk yet (only with both legs can) + */ + public Boolean getCanWalk() { + return this.canWalk; + } + + /** + * Accessor for the player's state of whether they can inspect yet (only with both eyes can) + */ + public Boolean getCanInspect() { + return this.canInspect; + } + /** * Decreases health (while fighting) */ @@ -69,68 +92,109 @@ public void weaken() { * Often as a result of being electrocuted or hit by a laser beam. */ public void die() { - this.health = 0; - this.isAlive = false; + if (this.health <= 0) { + this.isAlive = false; + System.out.println("You have died."); + respawnChat(); + } } /** * Become alive again */ public void respawn() { - this.getIsAlive(); if(this.isAlive == false) { // Check that user is actually dead this.health = 100; this.isAlive = true; System.out.println("I am reborn!"); - } - else { + } else { throw new RuntimeException("You are still alive! "); } } -/** - * Starts and runs the conversation with the user - * Asks the user how many rounds they want to chat for - */ - public void respawnChat() { - Scanner scanner = new Scanner(System.in); - System.out.println("Do you want to die or respawn to play again? Press Y to respawn and N to die."); + /** + * Starts and runs the conversation with the user + * Asks the user how many rounds they want to chat for + */ + public void respawnChat() { + Scanner scanner = new Scanner(System.in); + System.out.println("Do you want to die or respawn to play again? Press Y to respawn and N to die."); - String choice = scanner.nextLine(); - if (choice.equals("Y")) { - this.getIsAlive(); - this.respawn(); - System.out.println("You're alive again - Hooray!"); - } - else if (choice.equals("N")) { - System.out.println("Okay, you're dead. Bye!"); - } - else { - System.out.println("I don't understand what you wrote. Try only Y or N."); - } - scanner.close(); + String choice = scanner.nextLine(); + if (choice.equals("Y")) { + this.respawn(); + System.out.println("You're alive again - Hooray!"); + } else if (choice.equals("N")) { + System.out.println("Okay, you're dead. Bye!"); + } else { + System.out.println("I don't understand what you wrote. Try only Y or N."); + } + scanner.close(); } // Game Functions - public void open(Item s){ + /** + * Open an item if there is another item stored inside + * @param item to be opened + */ + public void open(Item s) { if (s.getCanBeOpened() == true){ s.getContainedItem(); - System.out.println(s + " contains " + s.getContainedItem()); + System.out.println("You have opened " + s + ". Inside it is " + s.getContainedItem() + " ."); + } else { + // To be constructed! A few scenorios: + // 1. try to open an item that can't be opened + // 2. try to open an item that has already been opened + // 3. try to open an item when we are not near it's location + // Some more? } } + /** - * Browse all, and utilise a functionality of an item + * Overloaded oepn method for a computer + * @param computer to be opened */ - public void use(Item s) { - if(inventory.contains(s)) { - System.out.println(s.getDescription()); // Placeholder for .getUse() - } - else { - throw new RuntimeException("You to not have " + s.getName() + ". Take it first!."); - } + public void open(Computer c) { + if (c.locked == true) { + c.locked = false; + System.out.println("\nYou opend the computer. Two folders appear: History and Control Panel."); + Scanner scanner2 = new Scanner(System.in); + System.out.println("Which folder do you want to see? Press H to open History folder and C to open Control Panel."); + String choice2 = scanner2.nextLine(); + if (choice2.equals("H")) { + System.out.println("You opened the History Folder..."); + c.openHistory(); + } else if (choice2.equals("C")) { + System.out.println("You opened the control Panel..."); + c.openControlPanel(Robot r, Room rm); + System.out.println("Do you want to toggle any controls? Enter the name of the control to toggle... "); + System.out.println("Do you want to toggle any controls? Enter the name of the control to toggle... "); + /** Scanner scanner3 = new Scanner(System.in); + String choice3 = scanner3.nextLine(); + if (choice3.equals("Reasoning")) { + c.toggleReasoning(Robot r); + } else if (choice3.equals("Power")) { + c.togglePower(Robot r); + } else if (choice3.equals("Memory")) { + c.toggleMemory(Robot r); + } else if (choice3.equals("Laser")) { + c.toggleLaser(Room r); + } else if (choice3.equals("TradeBody") || choice3.equals("SelfDestruct")) { + System.out.println("\n[RESTRICTED ACTION FAILED]"); + } else { + System.out.println("[INVALID COMMAND]"); + } scanner3.close(); */ + } else { + System.out.println("[INVALID COMMAND]"); + } scanner2.close(); + } else { + System.out.println("\nThe computer is unlocked and opened."); + } //Much to do with this overloaded method!! } + + /** * Touch an item, which gives its description, NOT add it to inventory. * @param s The item @@ -140,42 +204,47 @@ public void touch(Item s) { } /** - * Lets the user take/own an item (add it to inventory) + * Let the user take/own an item (add it to inventory) * @param s the item */ public void take(Item s) { if(this.inventory.contains(s)) { throw new RuntimeException("You already have " + s.getName() + "."); - } - else { + } else { this.inventory.add(s); System.out.println(s.getName() + " successfully added to your inventory!"); } } /** - * Print the ArrayList of player's inventory. + * Let the user put down an item at a room (remove it from inventory) + * @param s the item + * @param r the room */ - public void printInventory() { - System.out.println("Your inventory contains:"); - System.out.println(this.inventory.toString()); + public void putDown(Item s, Room r) { + if (this.inventory.contains(s) && r != null) { + this.inventory.remove(s); + System.out.println("You put down the " + s.getName() + " in the " + r.getName() + "."); + } // This method need to be modified. + // We need to figure out how to how to represent the current room we are in + // If we want to put down the item in the current room, we will successfully do that + // If we want to put down the item in another room, we need to walk to/crawl to that room first } /** - * Lets the user access history of an item - * @param s The item + * Print the ArrayList of player's inventory. */ - public void think(Item s) { - System.out.println("I am thinking..."); - // s.getHistory() //Placeholder for that as well + public void printInventory() { + System.out.println("Your inventory contains:"); + System.out.println(this.inventory.toString()); } /** - * User fights another existence for a specified number of times + * User fights another existence * @param e The other entity - * @param times The number of times to fight */ - public void fight(Existence e, int times) { + public void fight(Existence e) { + this.weaken(); System.out.println("I am fighting!"); } @@ -185,23 +254,15 @@ public void fight(Existence e, int times) { */ public void lookAround(Room r) { if (r == null) { - System.out.println("You’re not in a room."); + System.out.println("You're not in a room."); return; + } System.out.println("You look around the: " + r.getName() + r.getDescription()); } - System.out.println("You look around the room: " + r.getName()); - List items = r.getItems(); - if (items.isEmpty()) { - System.out.println("The room seems empty."); - } else { - System.out.println("You see the following items:"); - for (Item item : items) { - System.out.println("- " + item.getName()); - } - } - } - - + /** + * Inspect an item, see its description and the status of whether it can be grabbed + * @param s the item to be inspected + */ public void inspect(Item s) { if (s == null) { System.out.println("There is nothing to inspect."); @@ -209,53 +270,45 @@ public void inspect(Item s) { } System.out.println("Inspecting the " + s.getName() + "..."); - System.out.println("Description: " + s.getDescription()); - System.out.println("Can be grabbed? " + (s.getItemStatus() ? "Yes" : "No")); + System.out.println("Description: " + s.getDescription() + s.getItemStatus()); } - public void walkTo(Item s) { - if (s == null) { - System.out.println("There is nowhere to walk to."); - return; - } - - - if (currentTarget != null && currentTarget.equals(s)) { - System.out.println("You’re already near the " + s.getName() + "."); - return; - } - - if (currentRoom != null && !((Room) currentRoom).getItems().contains(s)) { - System.out.println("You can't walk to the " + s.getName() + " — it’s not in this room."); - return; + /** + * Walk to an item in a room (only with both legs) + * @param r the room to walk to + * @param s the item to walk to + */ + public void walkTo(Room r, Item s) { + if (this.canWalk = true) { + System.out.println("You can walk to these items in the current room" + r.getItems()); + if (r == null || s == null) { + System.out.println("There is nowhere to walk to."); + } else if (!r.getItems().contains(s)) { + System.out.println("You can't walk to the " + s.getName() + " because it's not in this room."); + } else { + System.out.println(" You walked to " + s.getName() + "."); + System.out.println("... Walking ..."); + System.out.println("You are now near the " + s.getName() + "."); + } + } else { + System.out.println("You don't have both legs yet. You can only crawl to somewhere."); } - - currentTarget = s; - System.out.println(" You walk to " + s.getName() + "."); - System.out.println("You are now near the " + s.getName() + "."); } - - - public void crawlTo(Item s) { - if (s == null) { - System.out.println("There is nowhere to crawl to."); - return; - } - - if (currentTarget != null && currentTarget.equals(s)) { - System.out.println("You’re already near the " + s.getName() + "."); - return; - } - - if (currentRoom != null && !((Room) currentRoom).getItems().contains(s)) { - System.out.println("You can't crawl to the " + s.getName() + " — it’s not in this room."); - return; + /** + * Crawl to an item in a room + * @param r the room to crawl to + * @param s the item to crawl to + */ + public void crawlTo(Room r, Item s) { + if (r.getItems().contains(s)) { + System.out.println("You crawled slowly toward the " + s.getName() + "."); + System.out.println("....... Crawling ...... \n ...... Crawling ......"); + System.out.println("..... Almost there ......"); + System.out.println("You reached the " + s.getName() + ", catching your breath."); + System.out.println("You are now near the " + s.getName() + "."); + } else { + System.out.println("You can't crawl to the " + s.getName() + " because it's not in this room."); } - - currentTarget = s; - System.out.println(this.name + " crawls slowly toward the " + s.getName() + "."); - System.out.println("You reach the " + s.getName() + ", catching your breath."); } - } From 7c3eb0f9a59656c443c8c2f5ee78c0b0aa8001e7 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 14:43:38 -0400 Subject: [PATCH 49/95] Added attribute isUnconscious, deleted die and fight methods The die method is not necessary because we won't let the player command themselves to die after they exchanged back to the human body. The fight method is also unnecessary because the player won't fight the robot anymore when they have exchanged back to the human body. --- Human.java | 50 ++++++++++++++++++++------------------------------ 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/Human.java b/Human.java index 5fe648fa..42df65eb 100644 --- a/Human.java +++ b/Human.java @@ -1,17 +1,32 @@ +import java.util.ArrayList; + +/** + * The Human class extends Existence class and has unique features of ???TO BE ADDED + */ public class Human extends Existence { // Attributes - + public Boolean isUnconscious; // Constructor /** * Default constructor for 'Human' * @param name - * @param health + * @param room * @param isAlive + * @param canGoToLab + * @param canWalk + * @param canInspect */ - public Human(String name, int health, Boolean isAlive) { - super(name, health, isAlive); + public Human(String name, Room room, Boolean isAlive, Boolean canGoToLab, Boolean canWalk, Boolean canInspect) { + super(name, room); + this.isAlive = true; + this.health = 1000; // Human has more health so that a robot can't fight over a human. + this.inventory = new ArrayList(); + this.canGoToLab = true; + this.canWalk = true; + this.canInspect = true; + this.isUnconscious = false; } @@ -19,31 +34,6 @@ public Human(String name, int health, Boolean isAlive) { // To overload - /** - * Immediately changes one's isAlive state to false, and health to 0. - * Often as a result of being electrocuted or hit by a laser beam. - */ - public void die() { - this.health = 0; - this.isAlive = false; - respawnChat(); - } - - /** - * User fights another existence - * @param e The robot to be fought - * @param times The number of times to fight - */ - public void fight(Robot e, int times) { - for(int i = 0; i <= times; i++) { - this.health -= 20; - System.out.println("I am fighting!"); - } - System.out.println("I am so tired, but I can keep going!"); - - - } - - + // To override } From 1de5272dc95b2a26c850da9fbf0fa99bd1e169d0 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 14:45:06 -0400 Subject: [PATCH 50/95] Added boolean attributes and `putOn` method Also updated electrocute method to set the human status to unconscious --- Robot.java | 50 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/Robot.java b/Robot.java index 8d400ba2..983b60ef 100644 --- a/Robot.java +++ b/Robot.java @@ -1,17 +1,51 @@ +import java.util.ArrayList; + +/** + * The Robot class extends Existence class and has the unique method of electrocute human + */ public class Robot extends Existence { + //Attributes + Boolean poweredOn; + Boolean reasoningOn; + Boolean memoryOn; + /** * Default constructor for 'Human' * @param name * @param health * @param isAlive */ - public Robot(String name, int health, Boolean isAlive) { - super(name, health, isAlive); + public Robot(String name, Room room, Boolean isAlive, Boolean canGoToLab, Boolean canWalk, Boolean canInspect) { + super(name, room); + this.isAlive = true; + this.health = 100; // Robot has less health than human. + this.inventory = new ArrayList(); + this.canGoToLab = false; // Will unlock after achieving the first four tasks in stage 1 + this.canWalk = false; // Will unlock after adding leg to the body + this.canInspect = true; // Will unlock after adding eye to the body + this.poweredOn = true; // Will be able to turn off after unlocking the control panel + this.reasoningOn = false; // Will be able to turn on after unlocking the control panel + this.memoryOn = false; // Will be able to turn on after unlocking the control panel } // Methods + /** + * The robot can put on items that are mechanical parts of its body + * @param item s + */ + public void putOn(Item s) { + if (this.inventory.contains(s) && s.getCanBePutOn() == true) { + System.out.println("You have put on " + s.getName() + "."); + this.inventory.remove(s); + } // To be contructed + } + + /** + * The robot can electrocute the human and make the human fall unconscious + */ public void electrocute(Human h) { + h.isUnconscious = true; System.out.println(h.getName() + " is temporarily unconscious."); } @@ -19,18 +53,6 @@ public void electrocute(Human h) { // To override - /** - * User fights another existence - */ - public void fight(Human h, int times) { - for(int i = 0; i <= 3; i++) { - this.health -= 20; - System.out.println("I am fighting!"); - } - System.out.println("I am so tired, maybe I need to try something else..."); - - } - } From 13815295eae8d214b66dc41d200bcaf6fc6f2c27 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 14:45:42 -0400 Subject: [PATCH 51/95] Updated according to changes in constructors --- Main.java | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Main.java b/Main.java index 53dc96c6..b27fb7f2 100644 --- a/Main.java +++ b/Main.java @@ -5,22 +5,20 @@ */ public class Main { public static void main(String[] args) { - // Create the player's existence - Robot player = new Robot("Teddy", 100, true); //Create all the items needed - Item bed = new Item("bed", "This is a bed.", false); - Item teddyBear = new Item("teddyBear", "This looks like a toy. It feels soft.", true); - Item firstSoul = new Item("firstSoul", "This is the first piece of my soul.", true); - Item box = new Item("box", "This is a box. Seems like there is something inside.", false); - Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true); - Item irisPot = new Item("irisPot", "This is a plantpot. Seems like there is something inside.", false); - Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true); - Item secondSoul = new Item("secondSoul","This is the second piece of my soul.", true); + Item bed = new Item("bed", "This is a bed.", false, false, false); + Item teddyBear = new Item("teddyBear", "This teddy bear feels soft.", true, true, false); + Item firstSoul = new Item("firstSoul", "This is the first piece of my soul.", true, false, false); + Item box = new Item("box", "This is a box. Seems like there is something inside.", false, true, false); + Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true, false, true); + Item irisPot = new Item("irisPot", "There is a label on the plantpot saying 'iris pot'. Seems like there is something inside.", false, true, false); + Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true, false, true); + Item secondSoul = new Item("secondSoul","This is the second piece of my soul.", true, false, false); //Create the Bedroom - Room bedroom = new Room("Bedroom", "This is a bedroom.", false); + Room bedroom = new Room("Bedroom", "This is a bedroom. I can see a bed, a teddy bear, a box and a plant pot.", false, false); bedroom.addItem(bed); bedroom.addItem(teddyBear); bedroom.addItem(firstSoul); @@ -33,12 +31,15 @@ public static void main(String[] args) { irisPot.storeItem(eye); //Create the Lab - Room lab = new Room("Lab", "This is a lab.", true); + Room lab = new Room("Lab", "This is a lab. I can see a computer.", true,true); lab.addItem(secondSoul); Computer computer = new Computer(); lab.addItem(computer); computer.storeItem(secondSoul); + // Create the player's existence + Robot player = new Robot("Teddy", bedroom, true, false, false, false); + // Messages: String basicInstructions = "\nType the command with any item to execute that command on that item. \nE.g: open door"; String cheatSheet1 = "\n- \"use\" to use something.\n" + // From 8b14f898203f5725b7cd8aec4d92e537b2b0f6f2 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Sun, 27 Apr 2025 15:12:22 -0400 Subject: [PATCH 52/95] Deleted uneccessary getter --- Existence.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Existence.java b/Existence.java index f9b39fef..0e8321dd 100644 --- a/Existence.java +++ b/Existence.java @@ -140,7 +140,6 @@ public void respawnChat() { */ public void open(Item s) { if (s.getCanBeOpened() == true){ - s.getContainedItem(); System.out.println("You have opened " + s + ". Inside it is " + s.getContainedItem() + " ."); } else { // To be constructed! A few scenorios: @@ -152,7 +151,7 @@ public void open(Item s) { } /** - * Overloaded oepn method for a computer + * Overloaded open method for a computer * @param computer to be opened */ public void open(Computer c) { From 0fd3a9152244a496efc355e1847ae9828938c0f9 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 27 Apr 2025 15:17:57 -0400 Subject: [PATCH 53/95] minor typo --- Existence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Existence.java b/Existence.java index 0e8321dd..0d13a07a 100644 --- a/Existence.java +++ b/Existence.java @@ -151,7 +151,7 @@ public void open(Item s) { } /** - * Overloaded open method for a computer + * Overloaded open() method for a computer * @param computer to be opened */ public void open(Computer c) { From 6b6089d9806d54c5b45ca75e8fdd196013e31235 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 27 Apr 2025 15:18:36 -0400 Subject: [PATCH 54/95] delete typo --- Existence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Existence.java b/Existence.java index 0d13a07a..0e8321dd 100644 --- a/Existence.java +++ b/Existence.java @@ -151,7 +151,7 @@ public void open(Item s) { } /** - * Overloaded open() method for a computer + * Overloaded open method for a computer * @param computer to be opened */ public void open(Computer c) { From 6858d05ae85dea1fb95f430abcfdea89c2686d44 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 27 Apr 2025 15:19:24 -0400 Subject: [PATCH 55/95] ee --- Existence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Existence.java b/Existence.java index 0e8321dd..0d13a07a 100644 --- a/Existence.java +++ b/Existence.java @@ -151,7 +151,7 @@ public void open(Item s) { } /** - * Overloaded open method for a computer + * Overloaded open() method for a computer * @param computer to be opened */ public void open(Computer c) { From 34b0f8e484473bb6e276e0de891fb965dd267694 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 27 Apr 2025 15:19:55 -0400 Subject: [PATCH 56/95] help --- Existence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Existence.java b/Existence.java index 0d13a07a..0e8321dd 100644 --- a/Existence.java +++ b/Existence.java @@ -151,7 +151,7 @@ public void open(Item s) { } /** - * Overloaded open() method for a computer + * Overloaded open method for a computer * @param computer to be opened */ public void open(Computer c) { From 316394c9870af4992f097e2a74c9f694ea7fcd6d Mon Sep 17 00:00:00 2001 From: tnphammy Date: Sun, 27 Apr 2025 16:18:57 -0400 Subject: [PATCH 57/95] Refactor control panel methods and added stage booleans --- Computer.java | 25 +++++++++++++++------ Existence.java | 61 +++++++++++++++++++++++++++++++++++++------------- Main.java | 21 ++++++++++------- 3 files changed, 76 insertions(+), 31 deletions(-) diff --git a/Computer.java b/Computer.java index 1e031632..c5b7b0aa 100644 --- a/Computer.java +++ b/Computer.java @@ -35,10 +35,13 @@ public void openHistory() { // trade body mechanism } - /** Displays the control panel with current switch states. */ + /** Displays the control panel with current switch states. + * @param r The robot whose controls are being toggled + * @param rm The room where the lasers are + */ public void openControlPanel(Robot r, Room rm) { System.out.println("\n=== Control Panel ==="); - System.out.println("\nReasoning: " + "On/Off" + "\nCurrent state: ReasoingOn?" + r.reasoningOn); + System.out.println("\nReasoning: " + "On/Off" + "\nCurrent state: ReasoningOn?" + r.reasoningOn); System.out.println("Power: " + "On/Off"+ "\nCurrent state: PoweredOn?" + r.poweredOn); System.out.println("Memory: " + "On/Off"+ "\nCurrent state: MemoryOn?" + r.memoryOn); System.out.println("Laser: " + "On/Off"+ "\nCurrent room: "+ rm.getName() + "\nCurrent state: LaserOn?" + rm.laserActive); @@ -46,7 +49,10 @@ public void openControlPanel(Robot r, Room rm) { System.out.println("SelfDestruct: " + "RESTRICTED"); } - /** Toggles reasoning on/off */ + + /** Toggles reasoning on/off + * @param r The robot + */ public void toggleReasoning(Robot r) { if (r.reasoningOn == false) { r.reasoningOn = true; @@ -57,7 +63,9 @@ public void toggleReasoning(Robot r) { } } - /** Attempts to toggle power off/on */ + /** Attempts to toggle power off/on + * @param r The robot + */ public void togglePower(Robot r) { if (r.poweredOn == true) { r.poweredOn = false; @@ -73,11 +81,10 @@ public void togglePower(Robot r) { * @param e The Existence whose memory is being toggled * @param s The Item being used to toggle the memory input */ - public void toggleMemory(Robot r, Item s) { + public void toggleMemory(Robot r) { if (r.memoryOn == false) { r.memoryOn = true; System.out.println("\n[MEMORIES ON] \nI'm starting to remember things...\n [ACHIEVEMENT UNLOCKED] You have unlocked the second piece of your soul."); - r.take(s); // Add the soul piece to player's inventory. if(r.reasoningOn == false) { System.out.println("\nI don't understand what these memories mean... How can I understand it?"); } else if (r.reasoningOn == true) { @@ -89,7 +96,9 @@ public void toggleMemory(Robot r, Item s) { } } - /** Toggles the lab’s lasers off/on */ + /** Toggles the lab’s lasers off/on + * @param r The room where the lasers are + */ public void toggleLaser(Room r) { if (r.laserEquipped == true && r.laserActive == true) { r.laserActive = false; @@ -104,6 +113,8 @@ public void toggleLaser(Room r) { /** * Attempt to trade bodies between two existences. * Always prints restriction because no second existence present. + * @param e1 The first Existence + * @param e2 The second Existence */ public void tradeBody(Existence e1, Existence e2) { System.out.println("\nYou can only trade bodies if there is at least another existence present."); diff --git a/Existence.java b/Existence.java index 0e8321dd..2e5bbc0c 100644 --- a/Existence.java +++ b/Existence.java @@ -16,6 +16,11 @@ public class Existence { protected Boolean canWalk; protected Boolean canInspect; + // Stages + public Boolean stageOne; + public Boolean stageTwo; + public Boolean stageThree; + // Constructor /** @@ -31,6 +36,9 @@ public Existence(String name, Room currentRoom) { this.canGoToLab = false; // Default to false this.canWalk = false; // Default to false because the player wake up with one lege missing this.canInspect = false; // Default to false because the player wake up with one eye missing + this.stageOne = true; + this.stageTwo = false; + this.stageThree = false; } @@ -152,38 +160,59 @@ public void open(Item s) { /** * Overloaded open method for a computer + * @param r The robot controlled on the computer * @param computer to be opened + * @param rm The room controlled on the computer */ - public void open(Computer c) { + public void open(Robot r, Computer c, Room rm) { if (c.locked == true) { c.locked = false; - System.out.println("\nYou opend the computer. Two folders appear: History and Control Panel."); + System.out.println("\nYou opened the computer. Two folders appear: History and Control Panel."); + + // Get user input Scanner scanner2 = new Scanner(System.in); System.out.println("Which folder do you want to see? Press H to open History folder and C to open Control Panel."); + String choice2 = scanner2.nextLine(); + if (choice2.equals("H")) { System.out.println("You opened the History Folder..."); c.openHistory(); } else if (choice2.equals("C")) { System.out.println("You opened the control Panel..."); - c.openControlPanel(Robot r, Room rm); - System.out.println("Do you want to toggle any controls? Enter the name of the control to toggle... "); - System.out.println("Do you want to toggle any controls? Enter the name of the control to toggle... "); - /** Scanner scanner3 = new Scanner(System.in); + c.openControlPanel(r,rm); + System.out.println("Do you want to toggle any controls? Enter a shorcut to toggle something... +"); + System.out.println("Control Panel Shortcuts:\n" + // + "\n" + // + "- \"r\" for reasoning.\n" + // + "- \"p\" for power.\n" + // + "- \"m\" for memory.\n" + // + "- \"l\" for laser.\n" + // + "- \"tr\" to trade bodies.\n" + // + "- \"de\" to destruct an *entity*\n" + // + ""); + + // Getting commands + Scanner scanner3 = new Scanner(System.in); + String choice3 = scanner3.nextLine(); - if (choice3.equals("Reasoning")) { - c.toggleReasoning(Robot r); - } else if (choice3.equals("Power")) { - c.togglePower(Robot r); - } else if (choice3.equals("Memory")) { - c.toggleMemory(Robot r); - } else if (choice3.equals("Laser")) { - c.toggleLaser(Room r); - } else if (choice3.equals("TradeBody") || choice3.equals("SelfDestruct")) { + + if (choice3.equals("r")) { + c.toggleReasoning(r); + + } else if (choice3.equals("p")) { + c.togglePower(r); + + } else if (choice3.equals("m")) { + c.toggleMemory(r); + + } else if (choice3.equals("l")) { + c.toggleLaser(rm); + } else if (choice3.equals("tr") || choice3.equals("de")) { System.out.println("\n[RESTRICTED ACTION FAILED]"); } else { System.out.println("[INVALID COMMAND]"); - } scanner3.close(); */ + } scanner3.close(); } else { System.out.println("[INVALID COMMAND]"); } scanner2.close(); diff --git a/Main.java b/Main.java index b27fb7f2..59b94eaf 100644 --- a/Main.java +++ b/Main.java @@ -8,21 +8,17 @@ public static void main(String[] args) { //Create all the items needed Item bed = new Item("bed", "This is a bed.", false, false, false); - Item teddyBear = new Item("teddyBear", "This teddy bear feels soft.", true, true, false); - Item firstSoul = new Item("firstSoul", "This is the first piece of my soul.", true, false, false); + Item teddyBear = new Item("teddyBear", "This teddy bear feels soft.", true, false, false); Item box = new Item("box", "This is a box. Seems like there is something inside.", false, true, false); Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true, false, true); Item irisPot = new Item("irisPot", "There is a label on the plantpot saying 'iris pot'. Seems like there is something inside.", false, true, false); Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true, false, true); - Item secondSoul = new Item("secondSoul","This is the second piece of my soul.", true, false, false); //Create the Bedroom Room bedroom = new Room("Bedroom", "This is a bedroom. I can see a bed, a teddy bear, a box and a plant pot.", false, false); bedroom.addItem(bed); bedroom.addItem(teddyBear); - bedroom.addItem(firstSoul); - teddyBear.storeItem(firstSoul); bedroom.addItem(box); bedroom.addItem(leg); box.storeItem(leg); @@ -32,17 +28,15 @@ public static void main(String[] args) { //Create the Lab Room lab = new Room("Lab", "This is a lab. I can see a computer.", true,true); - lab.addItem(secondSoul); Computer computer = new Computer(); lab.addItem(computer); - computer.storeItem(secondSoul); // Create the player's existence Robot player = new Robot("Teddy", bedroom, true, false, false, false); // Messages: String basicInstructions = "\nType the command with any item to execute that command on that item. \nE.g: open door"; - String cheatSheet1 = "\n- \"use\" to use something.\n" + // + String cheatSheet1 = "- \"take\" to take something, and add it to your inventory.\n" + // "- \"touch\" to touch an item and see its description.\n" + // "- \"inventory\" to see your inventory. \n" + // @@ -77,6 +71,17 @@ else if (player.getCanGoToLab() == true) { System.out.println(basicInstructions); System.out.println(cheatSheeet2); } + + + Scanner scanner1 = new Scanner(System.in); + + String command1 = scanner1.nextLine(); + + // if(player.stageOne == true) { + // if(command1.toLowerCase().equals("take")){ + // player.take(Item s); + // } + // } scanner.close(); } } From 1a1913bec05850963a7569b48a8af872d4a1000e Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 17:47:43 -0400 Subject: [PATCH 58/95] Updated tasks --- cheatsheet.md | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/cheatsheet.md b/cheatsheet.md index d27bb73e..ddf2fd33 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -1,14 +1,8 @@ -This file will contain documentation for all commands available in your game. - -Note: It's a good idea to also make this list available inside the game, in response to a `HELP` command. - - # SPOILER ALERT -**Commands available** +## Commands available **TO BE UPDATED** `use(Item s)`; `take(Item s)`; `printInventory()`; -`think()`; `fight(Existence e, int times)`; `lookAround(Room r)`; `inspect(Item s)`; @@ -29,19 +23,18 @@ Note: It's a good idea to also make this list available inside the game, in res `selfDestruct(Robot operator, Robot toBeDestroyed)`; `selfDestruct(Robot operator, Human toBeDestroyed)`; -If your game includes challenges that must be overcome to win, also list them below. -## Stage 1 -- [Task 1] Grab the teddy bear on the bed and get the first soul; -- [Task 2] Put on the leg hidden in a box; -- [Task 3] Stand up, find and put on the eye in an irisPot; -- [Task 4] Open the door leading to the lab; -## Stage 2 -- [Task 5] Crawl into the lab; -- [Task 6] Unlock the computer and see 2 folders; -- [Task 7] Click on the history folder, find the story, get the second soul; -- [Task 8] Click on the controls folder and play around with the control buttons; -## Stage 3 -- [Task 9] Have conversations with the “human”; -- [Task 10] Fight and electrocute the “human”; -- [Task 11] Exchange bodies; -- [Task 12] Choose to forgive or revenge; +## Tasks +**Stage 1** +- [Task 1] Put on the leg hidden in a box; +- [Task 2] Stand up, find and put on the eye in an irisPot; +- [Task 3] Look around, see the lab; +**Stage 2** +- [Task 4] Crawl into the lab; +- [Task 5] Unlock the computer and see 2 folders; +- [Task 6] Click on the history folder, find the story; +- [Task 7] Click on the controls folder and play around with the control buttons; +**Stage 3** +- [Task 8] Have conversations with the “human”; +- [Task 9] Fight and electrocute the “human”; +- [Task 10] Exchange bodies; +- [Task 11] Choose to forgive or revenge; From add532ea1dd7baa86b54451499530d7163cb6c0b Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 17:48:50 -0400 Subject: [PATCH 59/95] Changed several booleans to public, deleted accessors --- Existence.java | 69 +++++++++++++++----------------------------------- 1 file changed, 20 insertions(+), 49 deletions(-) diff --git a/Existence.java b/Existence.java index 2e5bbc0c..0ff505c6 100644 --- a/Existence.java +++ b/Existence.java @@ -12,9 +12,9 @@ public class Existence { protected ArrayList inventory = new ArrayList<>(); protected int health; // Imaginary health bar public Boolean isAlive; - protected Boolean canGoToLab; - protected Boolean canWalk; - protected Boolean canInspect; + public Boolean canGoToLab; + public Boolean canWalk; + public Boolean canInspect; // Stages public Boolean stageOne; @@ -60,34 +60,6 @@ public int getHealth() { return this.health; } - /** - * Accessor for user's isAlive value (true/false) - */ - public Boolean getIsAlive() { - return this.isAlive; - } - - /** - * Accessor for the player's state of whether they can go to the lab yet - */ - public Boolean getCanGoToLab() { - return this.canGoToLab; - } - - /** - * Accessor for the player's state of whether they can walk yet (only with both legs can) - */ - public Boolean getCanWalk() { - return this.canWalk; - } - - /** - * Accessor for the player's state of whether they can inspect yet (only with both eyes can) - */ - public Boolean getCanInspect() { - return this.canInspect; - } - /** * Decreases health (while fighting) */ @@ -100,11 +72,10 @@ public void weaken() { * Often as a result of being electrocuted or hit by a laser beam. */ public void die() { - if (this.health <= 0) { - this.isAlive = false; - System.out.println("You have died."); - respawnChat(); - } + this.health = 0; + this.isAlive = false; + System.out.println("You have died."); + respawnChat(); } /** @@ -147,7 +118,7 @@ public void respawnChat() { * @param item to be opened */ public void open(Item s) { - if (s.getCanBeOpened() == true){ + if (s.canBeOpened == true) { System.out.println("You have opened " + s + ". Inside it is " + s.getContainedItem() + " ."); } else { // To be constructed! A few scenorios: @@ -182,14 +153,14 @@ public void open(Robot r, Computer c, Room rm) { System.out.println("You opened the control Panel..."); c.openControlPanel(r,rm); System.out.println("Do you want to toggle any controls? Enter a shorcut to toggle something... +"); - System.out.println("Control Panel Shortcuts:\n" + // - "\n" + // - "- \"r\" for reasoning.\n" + // - "- \"p\" for power.\n" + // - "- \"m\" for memory.\n" + // - "- \"l\" for laser.\n" + // - "- \"tr\" to trade bodies.\n" + // - "- \"de\" to destruct an *entity*\n" + // + System.out.println("Control Panel Shortcuts:\n" + + "\n" + + "- \"r\" for reasoning.\n" + + "- \"p\" for power.\n" + + "- \"m\" for memory.\n" + + "- \"l\" for laser.\n" + + "- \"tr\" to trade bodies.\n" + + "- \"de\" to destruct an *entity*\n" + ""); // Getting commands @@ -237,7 +208,7 @@ public void touch(Item s) { */ public void take(Item s) { if(this.inventory.contains(s)) { - throw new RuntimeException("You already have " + s.getName() + "."); + System.out.println("You already have " + s.getName() + "."); } else { this.inventory.add(s); System.out.println(s.getName() + " successfully added to your inventory!"); @@ -273,7 +244,7 @@ public void printInventory() { */ public void fight(Existence e) { this.weaken(); - System.out.println("I am fighting!"); + System.out.println("Fighting!!!"); } /** @@ -283,7 +254,7 @@ public void fight(Existence e) { public void lookAround(Room r) { if (r == null) { System.out.println("You're not in a room."); - return; + } System.out.println("You look around the: " + r.getName() + r.getDescription()); } @@ -294,7 +265,6 @@ public void lookAround(Room r) { public void inspect(Item s) { if (s == null) { System.out.println("There is nothing to inspect."); - return; } System.out.println("Inspecting the " + s.getName() + "..."); @@ -339,4 +309,5 @@ public void crawlTo(Room r, Item s) { System.out.println("You can't crawl to the " + s.getName() + " because it's not in this room."); } } + } From 30d1f41f5d4d4e15541b912863f6401100912b1a Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 17:49:22 -0400 Subject: [PATCH 60/95] Changed several booleans to public, deleted accessors --- Item.java | 34 ++++------------------------------ 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/Item.java b/Item.java index c244bb3c..a930de47 100644 --- a/Item.java +++ b/Item.java @@ -7,10 +7,10 @@ public class Item { //Attributes private String name; private String description; - private Boolean canBeGrabbed; + public Boolean canBeGrabbed; private Item containedItem; - private Boolean canBeOpened; - private Boolean canBePutOn; + public Boolean canBeOpened; + public Boolean canBePutOn; /* Default Constructor */ public Item(String name, String description, Boolean canBeGrabbed, Boolean canBeOpened, Boolean canBePutOn) { @@ -49,30 +49,6 @@ public String getItemStatus() { "\n can be put on: " + this.canBePutOn); } - /** - * Accessor for canBeGrabbed - * We wrote a separate accessor for this because it will be used in the grab method for existence - */ - public Boolean getCanBeGrabbed() { - return this.canBeGrabbed; - } - - /** - * Accessor for canBeOpened - * We wrote a separate accessor for this because it will be use in the open method for existence - */ - public Boolean getCanBeOpened() { - return this.canBeOpened; - } - - /** - * Accessor for canBePutOn - * We wrote a separate accessor for this because it will be used in the putOn method for robots - */ - public Boolean getCanBePutOn() { - return this.canBePutOn; - } - /** * Accessor for the item contained inside * @return the item contained inside @@ -87,8 +63,6 @@ public void storeItem(Item item){ if (this.containedItem == null) { this.containedItem = item; this.canBeOpened = true; - } else { - throw new RuntimeException("This item already contains another item."); - } + } } } \ No newline at end of file From 7056b133d93d8131ec5e9252756b1dd1166f331a Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 17:49:55 -0400 Subject: [PATCH 61/95] Changed several booleans to public --- Robot.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Robot.java b/Robot.java index 983b60ef..4bc1714c 100644 --- a/Robot.java +++ b/Robot.java @@ -6,9 +6,9 @@ public class Robot extends Existence { //Attributes - Boolean poweredOn; - Boolean reasoningOn; - Boolean memoryOn; + public Boolean poweredOn; + public Boolean reasoningOn; + public Boolean memoryOn; /** * Default constructor for 'Human' @@ -35,11 +35,12 @@ public Robot(String name, Room room, Boolean isAlive, Boolean canGoToLab, Boolea * @param item s */ public void putOn(Item s) { - if (this.inventory.contains(s) && s.getCanBePutOn() == true) { + if (this.inventory.contains(s) && s.canBePutOn == true) { System.out.println("You have put on " + s.getName() + "."); this.inventory.remove(s); - } // To be contructed - } + } else { + System.out.println("INVALID COMMAND"); + } /** * The robot can electrocute the human and make the human fall unconscious From 49276841b0dfa3fab24d478dda7fd30ed9ad44fe Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 17:50:19 -0400 Subject: [PATCH 62/95] Updated README.md --- README.md | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index c1a995eb..78fa0bbf 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,35 @@ -# CSC120-FinalProject +# CSC120-FinalProject-ROBO Adventure🤖 +# Contributors: Clare, Joyce, Tammy, Yunxian + +## Deliverables CheckList: 🚧(in construction) ☑️(finished) + - Your final codebase 🚧 + - Your revised annotated architecture diagram 🚧 + - Design justification (including a brief discussion of at least one alternative you considered) 🚧 + - A map of your game's layout (if applicable) 🚧 + - `cheatsheet.md` 🚧 + - Completed `rubric.md` 🚧 + +## Design Justification 🚧 +**TO BE ADDED** + +## Layout Map 🚧 +**TO BE ADDED** -## Deliverables: - - Your final codebase - - Your revised annotated architecture diagram - - Design justification (including a brief discussion of at least one alternative you considered) - - A map of your game's layout (if applicable) - - `cheatsheet.md` - - Completed `rubric.md` - ## Additional Reflection Questions - - What was your **overall approach** to tackling this project? - - What **new thing(s)** did you learn / figure out in completing this project? - - Is there anything that you wish you had **implemented differently**? - - If you had **unlimited time**, what additional features would you implement? - - What was the most helpful **piece of feedback** you received while working on your project? Who gave it to you? - - If you could go back in time and give your past self some **advice** about this project, what hints would you give? - - _If you worked with a team:_ please comment on how your **team dynamics** influenced your experience working on this project. + 1. Our **overall approach** to tackling this project is coming up with a game plot first, then write the possible classes we need and their possible interations. After finishing the draft of the classes, we implement them in `Main.java` and write the game loop. 🕹️ + 2. We definitely learned so much **new thing(s)** in completing this project: 🤩 + * We learned about contructing an architecture diagram; + * We lerned about working how to effectively use Github for team projects; + * We leanred about how to implement a game loop; + 3. However, there are still many things we wish we had **implemented differently**: 👾 + * We wish we had implemented a `Soul` class and it would be an adventure of collecting the scattered souls along the way; + * We wish we had implemented a puzzle that players need to solve before they are able to unlock the computer; + * We wish we had implemented a display bar that displays the player's health bar and a help page that shows the commands available at each stage; + 4. If we had **unlimited time**, we would implement these additional features: 🧸 + * Add more rooms so that it will be a longer adventure; + * Make more commands available; + 5. The most helpful **piece of feedback** we received while working on our project was **TO BE ADDED** given by **TO BE ADDED**. 🚧 + 6. If we could go back in time and give our past selves some **advice** about this project, we would give these tips: 😃 + * Start Small! We came up with so many good ideas but it's hard to implement all of them into our game, so we are abandoing ideas along the way. It could be frustrated if we have a very complicated storyline in our mind but we can't bring them to real life due to limited time. + * Take advantage of github! Some features like opening an issue and assign people to work on it/ work on separate branches and merge later/reviewing each other's commit messages could be really useful working in a team! + 7. Our **team dynamics** really had a huge impact on our overall experience working on this project! Everyone was very devoted to our project and we learned so much new things, fixed so many problems together. It's very helpful to have our weekly meeting as we discuss what we've been doing throughout the week and we help each other out.🥰 From 862947248dd0be318d55c5f419281d94a0f7ea16 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 17:52:44 -0400 Subject: [PATCH 63/95] Started a while game loop We can split the user inputs, taking the first word as command --- Main.java | 135 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 91 insertions(+), 44 deletions(-) diff --git a/Main.java b/Main.java index 59b94eaf..6e3f4156 100644 --- a/Main.java +++ b/Main.java @@ -9,14 +9,14 @@ public static void main(String[] args) { //Create all the items needed Item bed = new Item("bed", "This is a bed.", false, false, false); Item teddyBear = new Item("teddyBear", "This teddy bear feels soft.", true, false, false); - Item box = new Item("box", "This is a box. Seems like there is something inside.", false, true, false); + Item box = new Item("box", "This is a box. There is a leg inside.", false, true, false); Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true, false, true); - Item irisPot = new Item("irisPot", "There is a label on the plantpot saying 'iris pot'. Seems like there is something inside.", false, true, false); + Item irisPot = new Item("irisPot", "There is a label on the plantpot saying 'iris pot'. There is an inside.", false, true, false); Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true, false, true); //Create the Bedroom - Room bedroom = new Room("Bedroom", "This is a bedroom. I can see a bed, a teddy bear, a box and a plant pot.", false, false); + Room bedroom = new Room("Bedroom", "This is a bedroom. I can see a bed and a toy.", false, false); bedroom.addItem(bed); bedroom.addItem(teddyBear); bedroom.addItem(box); @@ -35,53 +35,100 @@ public static void main(String[] args) { Robot player = new Robot("Teddy", bedroom, true, false, false, false); // Messages: - String basicInstructions = "\nType the command with any item to execute that command on that item. \nE.g: open door"; + String welcomeMessage = + "\n Welcome to ROBO Adventure! Get ready for your journey to discover hidden truths..."; + String basicInstructions = + "\n Here is the basic instruction: Type the command with any item to execute that command on that item." + + "(E.g: 'open door')" + + "\n Type 'help' to see available commands at current stage, 'exit' to exit the game."; + String enteringMessage = + "\n Now get ready for the game..." + + "\n......LOADING......" + + "\n......Entering Game ROBO Adventure......" + + "\n*****************" + + "\n ROBO Adventure" + + "\n*****************"; + String stageOneMessage = + "\n[STAGE 1]" + + "\n You wake up on a bed, having no idea who you are." + + "\n The only thing you know is that you possess a mechanical body" + + "with one leg and one eye missing." + + "\n 'Who am I? where am I? I should look around...'"; String cheatSheet1 = - "- \"take\" to take something, and add it to your inventory.\n" + // - "- \"touch\" to touch an item and see its description.\n" + // - "- \"inventory\" to see your inventory. \n" + // - "- \"look\" to look around.\n" + // - "- \"inspect\" to inspect something.\n" + // - "- \"crawl\" to crawl somewhere.\n" + // - "- \"walk\" to walk somewhere."; - String cheatSheeet2 = "\n- \"unlock\" to unlock something.\n" + // - "- \"click\" to click a folder.\n" + // - "- \"open\" to open something.\n" + // - "- \"toggle to toggle buttons on computer.\n" + // - "- \"trade\" to trade bodies with another existence.\n" + // - "- \"destroy *entity*\" - to attempt to destruct another existence\n" + // - "- \"electrocute\" to electrocute another existence\n" + // - "- \"fight *hentity* *n* times\" to fight another existence *n* number of times."; - - System.out.println("You wake up in a bedroom, discovering that you only have a broken mechanical body, missing one leg and an eye."); - System.out.println("Input anything. \nPress h for help"); + "- \"take item\" to take something and add it to your inventory.\n" + + "- \"touch item\" to touch an item and see its description.\n" + + "- \"inventory\" to see your inventory. \n" + + "- \"look around\" to look around.\n" + + "- \"inspect item\" to inspect something.\n" + + "- \"crawl to item\" to crawl to something.\n" + + "- \"walk to item\" to walk to something." + + "- \"open item\" to open something.\n" + + "- \"put on item\" to put on something.\n" + + "- \"put down item\" to put down something.\n" + + "- \"health\" to check your curent health status.\n"; + String cheatSheet2 = + "- \"unlock item\" to unlock something.\n" + + "- \"click folder\" to click a folder.\n" + + "- \"toggle control\" to toggle control buttons.\n"; + String cheatSheet3 = + "- \"trade\" to trade bodies with another existence.\n" + + "- \"electrocute\" to electrocute another existence\n" + + "- \"fight\" to fight another existence.\n"; + // Starting the game + System.out.println(welcomeMessage + basicInstructions + enteringMessage + stageOneMessage); + + // Open a scanner Scanner scanner = new Scanner(System.in); - - String command = scanner.nextLine(); - if(player.getCanGoToLab() == false) { - if (command.toLowerCase().equals("h")) { - System.out.println(basicInstructions); - System.out.println(cheatSheet1); - } else { - System.out.println("Command not understood."); - } - } - else if (player.getCanGoToLab() == true) { - System.out.println(basicInstructions); - System.out.println(cheatSheeet2); - } + + // game loop + while (true) { + + // Accept a string of player inputs and split them + String input = scanner.nextLine(); + String[] words = input.split(" "); + if (words.length > 0) { + String command = words[0]; // The first word is the command + + // If the command is asking for help, print out cheatsheets based on stages + if (command.equalsIgnoreCase("help")) { + if (player.stageOne == true) { + System.out.println(cheatSheet1); + } else if (player.stageTwo == true) { + System.out.println(cheatSheet1 + cheatSheet2); + } else if (player.stageThree == true) { + System.out.println(cheatSheet1 + cheatSheet2 + cheatSheet3); + } + } - Scanner scanner1 = new Scanner(System.in); - - String command1 = scanner1.nextLine(); + // If the command is exit, we break out of the loop + if (command.equalsIgnoreCase("exit") { + System.out.println("Goodbye! We hope you enjoyed the game!") + break; + }) - // if(player.stageOne == true) { - // if(command1.toLowerCase().equals("take")){ - // player.take(Item s); - // } - // } + // If the command is take, look for the next word to see what item to pick + else if (command.equalsIgnoreCase("take")) { + if (words.length == 2) { + String itemName = words[1]; // The second word is the item's name + + // The player can take the toy(teddyBear), the leg and the eye + if (itemName.equalsIgnoreCase("leg")) { + player.take(leg); + } else if (itemName.equalsIgnoreCase("eye")) { + player.take(eye); + } else if (itemName.equalsIgnoreCase("toy")) { + player.take(teddyBear); + } + } + + } + } else { + System.out.println("INVALID COMMAND"); + } scanner.close(); + } } } + From 3cf256e0e4f016b49a3f3152355e5b49a5482c8e Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 18:10:41 -0400 Subject: [PATCH 64/95] Fixed typos --- Main.java | 14 +++++++++----- Robot.java | 1 + 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Main.java b/Main.java index 6e3f4156..81b195cc 100644 --- a/Main.java +++ b/Main.java @@ -99,14 +99,14 @@ public static void main(String[] args) { System.out.println(cheatSheet1 + cheatSheet2); } else if (player.stageThree == true) { System.out.println(cheatSheet1 + cheatSheet2 + cheatSheet3); - } + } } // If the command is exit, we break out of the loop - if (command.equalsIgnoreCase("exit") { - System.out.println("Goodbye! We hope you enjoyed the game!") + if (command.equalsIgnoreCase("exit")) { + System.out.println("Goodbye! We hope you enjoyed the game!"); break; - }) + } // If the command is take, look for the next word to see what item to pick else if (command.equalsIgnoreCase("take")) { @@ -120,7 +120,11 @@ else if (command.equalsIgnoreCase("take")) { player.take(eye); } else if (itemName.equalsIgnoreCase("toy")) { player.take(teddyBear); - } + } else { + System.out.println("INVALID COMMAND"); + } + } else { + System.out.println("INVALID COMMAND"); } } diff --git a/Robot.java b/Robot.java index 4bc1714c..2696b70e 100644 --- a/Robot.java +++ b/Robot.java @@ -41,6 +41,7 @@ public void putOn(Item s) { } else { System.out.println("INVALID COMMAND"); } + } /** * The robot can electrocute the human and make the human fall unconscious From e29188f19a4d2cda3548fa522780c9debdc1ed22 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:14:57 -0400 Subject: [PATCH 65/95] Updated command available --- cheatsheet.md | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/cheatsheet.md b/cheatsheet.md index ddf2fd33..4c644f4b 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -1,33 +1,29 @@ # SPOILER ALERT + ## Commands available **TO BE UPDATED** -`use(Item s)`; -`take(Item s)`; -`printInventory()`; -`fight(Existence e, int times)`; -`lookAround(Room r)`; -`inspect(Item s)`; -`crawlTo(Item s)`; -`walkTo(Item s)`; -`electrocute(Human h)`; -`fight(Human h, int times)`; -`unlock(Computer c)`; -`clickFolder(String folderName)`; -`openHistory()`; -`openControlPanel()`; -`toggleReasoning()`; -`togglePower()`; -`toggleMemory(Existence e, Item s)`; -`toggleLaser()`; -`tradeBody(Existence e1, Existence e2)`; -`selfDestruct(Human operator, Robot toBeDestroyed)`; -`selfDestruct(Robot operator, Robot toBeDestroyed)`; -`selfDestruct(Robot operator, Human toBeDestroyed)`; +* `take item` to take something and add it to your inventory; +* `touch item` to touch an item and see its description; +* `inventory` to see your inventory; +* `look around` to look around; +* `inspect item` to inspect something; +* `crawl to item` to crawl to something; +* `walk to item` to walk to something; +* `open item` to open something; +* `put on item` to put on something; +* `put down item` to put down something; +* `health` to check your curent health status; +* `unlock item` to unlock something; +* `click folder` to click a folder; +* `toggle control` to toggle control buttons; +* `trade` to trade bodies with another existence; +* `electrocute` to electrocute another existence; +* `fight` to fight another existence; ## Tasks **Stage 1** - [Task 1] Put on the leg hidden in a box; - [Task 2] Stand up, find and put on the eye in an irisPot; -- [Task 3] Look around, see the lab; +- [Task 3] Look around, open the door to the lab; **Stage 2** - [Task 4] Crawl into the lab; - [Task 5] Unlock the computer and see 2 folders; From 5cb9adfab21e8a73233d8173e276aff652e85e5b Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:15:35 -0400 Subject: [PATCH 66/95] Updated formatting for return of `getItemStatus` --- Item.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Item.java b/Item.java index a930de47..3dfed8cf 100644 --- a/Item.java +++ b/Item.java @@ -43,7 +43,7 @@ public String getDescription() { * @return the statusof the item */ public String getItemStatus() { - return ("Item status for " + this.getName() + + return ("\n Item status for " + this.getName() + "\n can be grabbed: " + this.canBeGrabbed + "\n can be opened: " + this.canBeOpened + "\n can be put on: " + this.canBePutOn); From aa7652557a1bc6e0028e048d387fce575d2249e0 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:16:25 -0400 Subject: [PATCH 67/95] Overloaded open method to open a door --- Existence.java | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Existence.java b/Existence.java index 0ff505c6..bfdfa16b 100644 --- a/Existence.java +++ b/Existence.java @@ -121,11 +121,17 @@ public void open(Item s) { if (s.canBeOpened == true) { System.out.println("You have opened " + s + ". Inside it is " + s.getContainedItem() + " ."); } else { - // To be constructed! A few scenorios: - // 1. try to open an item that can't be opened - // 2. try to open an item that has already been opened - // 3. try to open an item when we are not near it's location - // Some more? + } + } + + /** + * Overloaded open method for opening a door leading to a room + * @param the door to be opened + * @param the room the door is leading to + */ + public void open(Item s, Room r) { + if (s.canBeOpened == true) { + System.out.println("You opened the " + s + " leading to the " + r + "."); } } @@ -234,8 +240,9 @@ public void putDown(Item s, Room r) { * Print the ArrayList of player's inventory. */ public void printInventory() { - System.out.println("Your inventory contains:"); + System.out.println("Your inventory currently contains:"); System.out.println(this.inventory.toString()); + // This method needs to be modified! It's not printing properly! } /** @@ -255,11 +262,11 @@ public void lookAround(Room r) { if (r == null) { System.out.println("You're not in a room."); - } System.out.println("You look around the: " + r.getName() + r.getDescription()); + } System.out.println("You look around the " + r.getName() + ". "+ r.getDescription()); } /** - * Inspect an item, see its description and the status of whether it can be grabbed + * Inspect an item, see its status * @param s the item to be inspected */ public void inspect(Item s) { @@ -268,7 +275,7 @@ public void inspect(Item s) { } System.out.println("Inspecting the " + s.getName() + "..."); - System.out.println("Description: " + s.getDescription() + s.getItemStatus()); + System.out.println(s.getItemStatus()); } /** From 731413e4515f3aa56b358db8a80e511f03e658b4 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:16:48 -0400 Subject: [PATCH 68/95] Deleted else statement --- Existence.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Existence.java b/Existence.java index bfdfa16b..75f363e8 100644 --- a/Existence.java +++ b/Existence.java @@ -120,7 +120,6 @@ public void respawnChat() { public void open(Item s) { if (s.canBeOpened == true) { System.out.println("You have opened " + s + ". Inside it is " + s.getContainedItem() + " ."); - } else { } } From a80ff8efa1cb4013e5361a37e1517ffa365f161a Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:17:06 -0400 Subject: [PATCH 69/95] Deleted unnecessary features --- Human.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Human.java b/Human.java index 42df65eb..297bf583 100644 --- a/Human.java +++ b/Human.java @@ -28,12 +28,4 @@ public Human(String name, Room room, Boolean isAlive, Boolean canGoToLab, Boolea this.canInspect = true; this.isUnconscious = false; } - - - // Methods - - - // To overload - - // To override } From f4a8904b6cfee0082f25d68664697a8eca879d26 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:17:32 -0400 Subject: [PATCH 70/95] Deleted unnecessary comments --- Robot.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Robot.java b/Robot.java index 2696b70e..15fbfded 100644 --- a/Robot.java +++ b/Robot.java @@ -50,11 +50,4 @@ public void electrocute(Human h) { h.isUnconscious = true; System.out.println(h.getName() + " is temporarily unconscious."); } - - // To overload - - // To override - - - } From 696ab2853437708db4efc6fb14803b84f6864e27 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:17:53 -0400 Subject: [PATCH 71/95] Delted stage1.md and stage2.md --- stage1.md | 7 ------- stage2.md | 8 -------- 2 files changed, 15 deletions(-) delete mode 100644 stage1.md delete mode 100644 stage2.md diff --git a/stage1.md b/stage1.md deleted file mode 100644 index 7532848f..00000000 --- a/stage1.md +++ /dev/null @@ -1,7 +0,0 @@ -- "use" to use something. -- "take" to take something. -- "inventory" to see your inventory. -- "look" to look around. -- "inspect" to inspect something. -- "crawl" to crawl somewhere. -- "walk" to walk somewhere. \ No newline at end of file diff --git a/stage2.md b/stage2.md deleted file mode 100644 index 53ffad94..00000000 --- a/stage2.md +++ /dev/null @@ -1,8 +0,0 @@ -- "unlock" to unlock something. -- "click" to click a folder. -- "open" to open something. -- "toggle to toggle buttons on computer. -- "trade" to trade bodies with another existence. -- "destroy *entity*" - to attempt to destruct another existence -- "electrocute" to electrocute another existence -- "fight *entity* *n* times" to fight another existence *n* number of times. \ No newline at end of file From 600db535ce25930fddc00fa6236cd93e23111ef5 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:23:22 -0400 Subject: [PATCH 72/95] Updated game loop 1. I updated the descriptions for the items and added the `door` item that connects the bedroom and the lab; 2. I Implemented`health`, `inventory`, `look`, `touch` and `inspect` in game loop 3. Still need to put the other commands inside game loop, as well as tasks, stages and endings 4. I closed scanner outside of the game loop so that it runs normally. 5. I've tested running the game loop and it looks decent. Still many things to be added, but at least we have something to run now!!! We are almost there! --- Main.java | 181 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 159 insertions(+), 22 deletions(-) diff --git a/Main.java b/Main.java index 81b195cc..b66e557f 100644 --- a/Main.java +++ b/Main.java @@ -7,16 +7,16 @@ public class Main { public static void main(String[] args) { //Create all the items needed - Item bed = new Item("bed", "This is a bed.", false, false, false); - Item teddyBear = new Item("teddyBear", "This teddy bear feels soft.", true, false, false); - Item box = new Item("box", "This is a box. There is a leg inside.", false, true, false); - Item leg = new Item("leg", "This looks like my leg. I'd better put it on to walk.", true, false, true); - Item irisPot = new Item("irisPot", "There is a label on the plantpot saying 'iris pot'. There is an inside.", false, true, false); - Item eye = new Item("eye", "This looks like my eye. I'd better put it on for better vision.", true, false, true); - + Item bed = new Item("bed", "'This is a bed.'", false, false, false); + Item teddyBear = new Item("teddyBear", "'This teddy bear feels soft.'", true, false, false); + Item box = new Item("box", "'This is a box. There is a leg inside.'", false, true, false); + Item leg = new Item("leg", "'This looks like my leg. I'd better put it on to walk.'", true, false, true); + Item irisPot = new Item("irisPot", "'There is a label on the plantpot saying 'iris pot'. There is an eye inside.'", false, true, false); + Item eye = new Item("eye", "'This looks like my eye. I'd better put it on for better vision.'", true, false, true); + Item door = new Item("door", "'This is a door connecting bedroom to another room. I wonder where is it leading to...'", false, true, false); //Create the Bedroom - Room bedroom = new Room("Bedroom", "This is a bedroom. I can see a bed and a toy.", false, false); + Room bedroom = new Room("Bedroom", "'This is a bedroom. I can see a bed and a teddy bear.'", false, false); bedroom.addItem(bed); bedroom.addItem(teddyBear); bedroom.addItem(box); @@ -25,6 +25,7 @@ public static void main(String[] args) { bedroom.addItem(irisPot); bedroom.addItem(eye); irisPot.storeItem(eye); + bedroom.addItem(door); //Create the Lab Room lab = new Room("Lab", "This is a lab. I can see a computer.", true,true); @@ -81,7 +82,7 @@ public static void main(String[] args) { // Open a scanner Scanner scanner = new Scanner(System.in); - // game loop + // Game loop while (true) { // Accept a string of player inputs and split them @@ -91,7 +92,7 @@ public static void main(String[] args) { if (words.length > 0) { String command = words[0]; // The first word is the command - // If the command is asking for help, print out cheatsheets based on stages + // If the command is help, we print out cheatsheets based on stages if (command.equalsIgnoreCase("help")) { if (player.stageOne == true) { System.out.println(cheatSheet1); @@ -108,31 +109,167 @@ public static void main(String[] args) { break; } + // If the command is health, we print out the current health of the player + if (command.equalsIgnoreCase("health")) { + System.out.println("Your current health is: " + player.getHealth() + " /100"); + } + + // If the command is inventory, we print out the player's inventory + if (command.equalsIgnoreCase("inventory")) { + player.printInventory(); + } + + // If the command is look, we let the player look around and print out the decription of the room + if (command.equalsIgnoreCase("look")) { + if (player.stageOne == true) { + player.lookAround(bedroom); + } else if (player.stageTwo == true || player.stageThree == true) { + player.lookAround(lab); + } else { + System.out.println("INVALID COMMAND"); + } + } + // If the command is take, look for the next word to see what item to pick - else if (command.equalsIgnoreCase("take")) { - if (words.length == 2) { + if (command.equalsIgnoreCase("take")) { + if (words.length >= 2) { String itemName = words[1]; // The second word is the item's name - // The player can take the toy(teddyBear), the leg and the eye + // The player can take the teddy bear, leg and eye if (itemName.equalsIgnoreCase("leg")) { player.take(leg); + System.out.println("'Let me try to put it on...'"); } else if (itemName.equalsIgnoreCase("eye")) { player.take(eye); - } else if (itemName.equalsIgnoreCase("toy")) { + System.out.println("'Let me try to put it on...'"); + } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { player.take(teddyBear); } else { System.out.println("INVALID COMMAND"); } - } else { - System.out.println("INVALID COMMAND"); - } - + } + } + + // If the command is touch, We let the player touch the item and return its description + if (command.equalsIgnoreCase("touch")) { + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name + + // The player can touch all the items: bed, teddy bear, box, leg, iris pot, eye and door + if (itemName.equalsIgnoreCase("bed")) { + player.touch(bed); + } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + player.touch(teddyBear); + } else if (itemName.equalsIgnoreCase("box")) { + player.touch(box); + } else if (itemName.equalsIgnoreCase("leg")) { + player.touch(leg); + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.touch(irisPot); + } else if (itemName.equalsIgnoreCase("eye")) { + player.touch(eye); + } else if (itemName.equalsIgnoreCase("door")) { + player.touch(door); + } else { + System.out.println("INVALID COMMAND"); + } + } + } + + // If the command is inspect, We let the player inspect the item and return its description and status + if (command.equalsIgnoreCase("inspect")) { + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name + + // The player can only inspect if this attribute is true + if (player.canInspect == true) { + // The player can inspect all the items: bed, teddy bear, box, leg, iris pot, eye and door + if (itemName.equalsIgnoreCase("bed")) { + player.inspect(bed); + } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + player.inspect(teddyBear); + } else if (itemName.equalsIgnoreCase("box")) { + player.inspect(box); + } else if (itemName.equalsIgnoreCase("leg")) { + player.inspect(leg); + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.inspect(irisPot); + } else if (itemName.equalsIgnoreCase("eye")) { + player.inspect(eye); + } else if (itemName.equalsIgnoreCase("door")) { + player.inspect(door); + } else { + System.out.println("INVALID COMMAND"); + } + } else { + System.out.println("You cannot inspect with one one eye missing!"); + } + } } - } else { - System.out.println("INVALID COMMAND"); + + // crawl to + + // walk to + + // open + + // put on + + // put down + + // unlock + + // click + + // toggle + + // trade + + // electrocute + + // fight + + // die (we should put the respawn chat here instead of inside the existence class) + + // Task 1 + + // Task 2 + + // Task 3 + + // Stage 2 + + // Task 4 + + // Task 5 + + // Task 6 + + // Task 7 + + // Stage 3 + + // Task 8 + + // Task 9 + + // Task 10 + + // Task 11 + + // Task 12 + + // Ending 1 (laser) + + // Ending 2 (power off) + + // Ending 3 (self destruct) + + // Ending 4 (forgive) + + // Ending 5 (revenge) } - scanner.close(); - } + } scanner.close(); // close the scanner outside of the while loop } } From c05fbadc82c24b90aab22ecc114e2057e65a2be0 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Mon, 28 Apr 2025 21:23:45 -0400 Subject: [PATCH 73/95] Updated rubric.md at current status --- rubric.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rubric.md b/rubric.md index 8bb8f4c8..6a5573c4 100644 --- a/rubric.md +++ b/rubric.md @@ -1,33 +1,33 @@ ## Front-End Design (10 pts) -_____ 2 pts: Game has a **robust, understandable text-based interface** that allows the player to control their movement through the game. Player should be able to enter any command at any time, and if it makes sense in the current context it will be carried out. +**Yes** 2 pts: Game has a **robust, understandable text-based interface** that allows the player to control their movement through the game. Player should be able to enter any command at any time, and if it makes sense in the current context it will be carried out. _____ 2 pts: Submission includes a **cheat sheet** (`cheatsheet.md`) documenting all of the available commands, as well as a **description of the layout** of your game world's underlying physical layout; this can be described in words, or included as a separate image file if you prefer to sketch a map by hand. If your game includes **challenges** that must be overcome to win, also describe them here. -_____ 2 pts: Storyline driving the game is **engaging**, and individual elements of play make sense within the context of the story. +**Yes** 2 pts: Storyline driving the game is **engaging**, and individual elements of play make sense within the context of the story. _____ 2 pts: Game has **multiple possible paths / outcomes** (i.e. gameplay depends on player's choices and is not the same every time). _____ 1 pt: Gameplay supports **reversible moves** where reasonable (e.g., if you pick up an object, you should be able to put it back down again later, possibly in a different place; if you go north then you should be able to return to the previous location by going south unless something has blocked your return path). -_____ 1 pt: Some paths through the game have **restricted access** until the player has completed a task or acquired a specific item (i.e. a key to open a door, etc.). +**Yes** 1 pt: Some paths through the game have **restricted access** until the player has completed a task or acquired a specific item (i.e. a key to open a door, etc.). ## Back-End Design (10 pts) -_____ 2 pts: Selected classes(s) are **effective, efficient** at supporting the desired operations and program behavior. +**Yes** 2 pts: Selected classes(s) are **effective, efficient** at supporting the desired operations and program behavior. _____ 2 pts: Design justification includes a discussion of at least one (reasonable) **alternative design** that could have been used, and the reasons why you decided against this alternative. -_____ 2 pts: The project makes effective use of **Java built-in classes** whenever they are appropriate. +**Yes** 2 pts: The project makes effective use of **Java built-in classes** whenever they are appropriate. -_____ 2 pts: The project's design is **extensible** (i.e. someone else could pick up where you left off, adding on or modifying the game without requiring a total rewrite). +**Yes** 2 pts: The project's design is **extensible** (i.e. someone else could pick up where you left off, adding on or modifying the game without requiring a total rewrite). _____ 2 pts: Submission includes an **architecture diagram** describing the relationships between all classes. ## General Items (10 pts): -_____ 4 pts: Program compiles without errors or warnings. +**Yes** 4 pts: Program compiles without errors or warnings. _____ 2 pts: Executes fully & consistently without crashing (exception/freeze). @@ -45,4 +45,4 @@ _____ 2 pt: Complies with style guidelines (missing items 1 pt each): _____ 1 pt: All required files included with submission (including completed checklist file). -_____ 1 pt: `readme.md` contains your reflection on the project and responses to all prompts . +**Yes** 1 pt: `readme.md` contains your reflection on the project and responses to all prompts . From 39cfc73cc40eb1315b41f74711c9a5b4d5adf8e7 Mon Sep 17 00:00:00 2001 From: Clare Wanjiru Njoroge Date: Tue, 29 Apr 2025 10:56:05 -0400 Subject: [PATCH 74/95] Added History --- Computer.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Computer.java b/Computer.java index c5b7b0aa..2aa4edf2 100644 --- a/Computer.java +++ b/Computer.java @@ -26,7 +26,22 @@ public void openHistory() { + "grabbing things and walk around." + "\n Today, April 23, 2006, it's been a year and teddy seems to be developing intelligence." + "\n Today, June 27, 2006, deep neural network is a good idea!" - + "\n Today, September 12, 2006, Teddy's artificial intelligence is developing fast." ); + + "\n Today, September 12, 2006, Teddy's artificial intelligence is developing fast." + + "\n Today, January 2, 2007, Teddy didn't respond when I called." + +"\n Today, January 31, 2007, Teddy is still ignoring me and now won't listen to me when I instruct him" + + "\n Today, February 14, 2007, I brought Teddy roses for valentines and he destroyed them and burst all the balloons" + +"\n March 1, 2007, I have a conversation with Teddy and ask him about his weird behaviour" + +"\n 'I want to be like you!' He shouts. 'I want to be a human and not a robot!' I try conviencing him that there is no way that could happen but he gets more and more violent" + +"\n Today, March 10, 2007, I walk into my Lab and find Teddy in my secret chamber. I'm gagged. 'I hope he has not found the red file'" + +"\n I walk into Teddy reading from what appears to be red file. Oops! My goose is cooked." + +"\n Teddy looks at me hysterically. That file contained all my notes about Teddy; how I had build him and how to make him human" + +"\n 'Why?'Teddy asks.'Why did you lie to me?' 'Listen Teddy, the only way we can make you human is if we find another human whom you can trade bodies and souls with. Possible as it may sound, who will be willing to trade bodies and souls with a robot?'" + +"\n Teddy throws the red file at me and storms out of the lab" + +"\n I am in the lab, updating my diary. Teddy walks in" + +"\n 'Hey Teddy!' Again he ignores my greeting. 'I'm sorry Peter.'" + +"\n 'Sorry for what?'I'm confused. Based on his approach, this looks like the last entry I shall make on this diary." + +"\n Oh no! Dear diary, he is walking towards me; face oozing with anger. In case he knocks me out and trade bodies with me, I shall wake up eventually and get everything back. Till then goodbye" + +"\n Teddy knocks the scientist down trades the body and soul. The places Peter on a lab bench and disassembles his leg and eyes"); // more history to be added! // added reasoning feature // implemented control panals From e4be693d673dbbe523ebececa4aece6ec7582eb8 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Tue, 29 Apr 2025 11:12:59 -0400 Subject: [PATCH 75/95] changed if's to switch -case --- Main.java | 212 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 111 insertions(+), 101 deletions(-) diff --git a/Main.java b/Main.java index b66e557f..0bc00d63 100644 --- a/Main.java +++ b/Main.java @@ -6,6 +6,9 @@ public class Main { public static void main(String[] args) { + // Set game status + Boolean gameOn = true; + //Create all the items needed Item bed = new Item("bed", "'This is a bed.'", false, false, false); Item teddyBear = new Item("teddyBear", "'This teddy bear feels soft.'", true, false, false); @@ -83,129 +86,136 @@ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Game loop - while (true) { + while (gameOn == true) { // Accept a string of player inputs and split them String input = scanner.nextLine(); String[] words = input.split(" "); if (words.length > 0) { - String command = words[0]; // The first word is the command - - // If the command is help, we print out cheatsheets based on stages - if (command.equalsIgnoreCase("help")) { - if (player.stageOne == true) { - System.out.println(cheatSheet1); - } else if (player.stageTwo == true) { - System.out.println(cheatSheet1 + cheatSheet2); - } else if (player.stageThree == true) { - System.out.println(cheatSheet1 + cheatSheet2 + cheatSheet3); - } - } - - // If the command is exit, we break out of the loop - if (command.equalsIgnoreCase("exit")) { - System.out.println("Goodbye! We hope you enjoyed the game!"); - break; - } - - // If the command is health, we print out the current health of the player - if (command.equalsIgnoreCase("health")) { - System.out.println("Your current health is: " + player.getHealth() + " /100"); - } - - // If the command is inventory, we print out the player's inventory - if (command.equalsIgnoreCase("inventory")) { - player.printInventory(); - } - - // If the command is look, we let the player look around and print out the decription of the room - if (command.equalsIgnoreCase("look")) { - if (player.stageOne == true) { - player.lookAround(bedroom); - } else if (player.stageTwo == true || player.stageThree == true) { - player.lookAround(lab); - } else { - System.out.println("INVALID COMMAND"); - } - } - - // If the command is take, look for the next word to see what item to pick - if (command.equalsIgnoreCase("take")) { - if (words.length >= 2) { - String itemName = words[1]; // The second word is the item's name + String command = words[0].toLowerCase(); // The first word is the command + + // Trying switch case + switch(command) { + + // Print cheatsheets based on current stage + case "help": + if (player.stageOne == true) { + System.out.println(cheatSheet1); + } else if (player.stageTwo == true) { + System.out.println(cheatSheet1 + cheatSheet2); + } else if (player.stageThree == true) { + System.out.println(cheatSheet1 + cheatSheet2 + cheatSheet3); + } + break; - // The player can take the teddy bear, leg and eye - if (itemName.equalsIgnoreCase("leg")) { - player.take(leg); - System.out.println("'Let me try to put it on...'"); - } else if (itemName.equalsIgnoreCase("eye")) { - player.take(eye); - System.out.println("'Let me try to put it on...'"); - } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { - player.take(teddyBear); - } else { - System.out.println("INVALID COMMAND"); - } - } - } - - // If the command is touch, We let the player touch the item and return its description - if (command.equalsIgnoreCase("touch")) { - if (words.length >= 2) { - String itemName = words[1]; // The second word is the item's name + // Let the player exit at any point in the game + case "exit": + System.out.println("Goodbye! We hope you enjoyed the game!"); + gameOn = false; // Change game state to break out the user input loop (because the game ended) + break; - // The player can touch all the items: bed, teddy bear, box, leg, iris pot, eye and door - if (itemName.equalsIgnoreCase("bed")) { - player.touch(bed); - } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { - player.touch(teddyBear); - } else if (itemName.equalsIgnoreCase("box")) { - player.touch(box); - } else if (itemName.equalsIgnoreCase("leg")) { - player.touch(leg); - } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { - player.touch(irisPot); - } else if (itemName.equalsIgnoreCase("eye")) { - player.touch(eye); - } else if (itemName.equalsIgnoreCase("door")) { - player.touch(door); + // Print current health + case "health": + System.out.println("Your current health is: " + player.getHealth() + " /100"); + break; + + // Print inventory + case "inventory": + player.printInventory(); + break; + + // Look around -> Print description of Room (based on current stage) + case "look": + if (player.stageOne == true) { + player.lookAround(bedroom); + } else if (player.stageTwo == true || player.stageThree == true) { + player.lookAround(lab); } else { System.out.println("INVALID COMMAND"); } - } - } + break; - // If the command is inspect, We let the player inspect the item and return its description and status - if (command.equalsIgnoreCase("inspect")) { - if (words.length >= 2) { - String itemName = words[1]; // The second word is the item's name + // Take items => Look for user's next word to specify the Item being taken + case "take": + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name - // The player can only inspect if this attribute is true - if (player.canInspect == true) { - // The player can inspect all the items: bed, teddy bear, box, leg, iris pot, eye and door + // Allow 3 items to be taken: the teddyBear, leg and eye + if (itemName.equalsIgnoreCase("leg")) { + player.take(leg); + System.out.println("'Let me try to put it on...'"); + } else if (itemName.equalsIgnoreCase("eye")) { + player.take(eye); + System.out.println("'Let me try to put it on...'"); + } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + player.take(teddyBear); + } else { + System.out.println("INVALID COMMAND"); + } + } + break; + + // Touch things to get their descriptions + case "touch": + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name + + // The player can touch: bed, teddyBear, box, leg, irisPot, eye and door if (itemName.equalsIgnoreCase("bed")) { - player.inspect(bed); + player.touch(bed); } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { - player.inspect(teddyBear); + player.touch(teddyBear); } else if (itemName.equalsIgnoreCase("box")) { - player.inspect(box); + player.touch(box); } else if (itemName.equalsIgnoreCase("leg")) { - player.inspect(leg); + player.touch(leg); } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { - player.inspect(irisPot); + player.touch(irisPot); } else if (itemName.equalsIgnoreCase("eye")) { - player.inspect(eye); + player.touch(eye); } else if (itemName.equalsIgnoreCase("door")) { - player.inspect(door); + player.touch(door); } else { - System.out.println("INVALID COMMAND"); + System.out.println("INVALID COMMAND"); } - } else { - System.out.println("You cannot inspect with one one eye missing!"); - } - } - } + } + break; + + // Inspect items to get its description, and status + case "inspect": + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name + + // The player can only inspect if this attribute is true + if (player.canInspect == true) { + // The player can inspect all the items: bed, teddy bear, box, leg, iris pot, eye and door + if (itemName.equalsIgnoreCase("bed")) { + player.inspect(bed); + } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + player.inspect(teddyBear); + } else if (itemName.equalsIgnoreCase("box")) { + player.inspect(box); + } else if (itemName.equalsIgnoreCase("leg")) { + player.inspect(leg); + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.inspect(irisPot); + } else if (itemName.equalsIgnoreCase("eye")) { + player.inspect(eye); + } else if (itemName.equalsIgnoreCase("door")) { + player.inspect(door); + } else { + System.out.println("INVALID COMMAND"); + } + } else { + System.out.println("You cannot inspect with one one eye missing!"); + } + } + break; + + } + + // crawl to From 703c3b3ebf6b51877804c3dcc9adf333a3ba4df8 Mon Sep 17 00:00:00 2001 From: tnphammy Date: Tue, 29 Apr 2025 11:13:23 -0400 Subject: [PATCH 76/95] changed ifs to switch-case --- Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Main.java b/Main.java index 0bc00d63..f915bc13 100644 --- a/Main.java +++ b/Main.java @@ -44,7 +44,7 @@ public static void main(String[] args) { String basicInstructions = "\n Here is the basic instruction: Type the command with any item to execute that command on that item." + "(E.g: 'open door')" + - "\n Type 'help' to see available commands at current stage, 'exit' to exit the game."; + "\n Type 'help' to see available commands at current stage, 'exit' to exit the game at any point."; String enteringMessage = "\n Now get ready for the game..." + "\n......LOADING......" + From 344144322f35faec358c8653fe52aa14833f320f Mon Sep 17 00:00:00 2001 From: Clare Wanjiru Njoroge Date: Tue, 29 Apr 2025 11:15:18 -0400 Subject: [PATCH 77/95] Updated History --- Computer.java | 12 ++++++------ README.md | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Computer.java b/Computer.java index 2aa4edf2..db235966 100644 --- a/Computer.java +++ b/Computer.java @@ -28,20 +28,20 @@ public void openHistory() { + "\n Today, June 27, 2006, deep neural network is a good idea!" + "\n Today, September 12, 2006, Teddy's artificial intelligence is developing fast." + "\n Today, January 2, 2007, Teddy didn't respond when I called." - +"\n Today, January 31, 2007, Teddy is still ignoring me and now won't listen to me when I instruct him" - + "\n Today, February 14, 2007, I brought Teddy roses for valentines and he destroyed them and burst all the balloons" - +"\n March 1, 2007, I have a conversation with Teddy and ask him about his weird behaviour" + +"\n Today, January 31, 2007, Teddy is still ignoring me and now won't listen to me when I instruct him. I've run diagnostics twice. Sensors, logic units — everything checks out fine." + + "\n Today, February 14, 2007, I brought Teddy roses for Valentine's Day. He ripped them apart the moment I held them out. Popped the balloons too." + +"\n March 1, 2007, I finally asked him why. Why the coldness" +"\n 'I want to be like you!' He shouts. 'I want to be a human and not a robot!' I try conviencing him that there is no way that could happen but he gets more and more violent" +"\n Today, March 10, 2007, I walk into my Lab and find Teddy in my secret chamber. I'm gagged. 'I hope he has not found the red file'" +"\n I walk into Teddy reading from what appears to be red file. Oops! My goose is cooked." +"\n Teddy looks at me hysterically. That file contained all my notes about Teddy; how I had build him and how to make him human" +"\n 'Why?'Teddy asks.'Why did you lie to me?' 'Listen Teddy, the only way we can make you human is if we find another human whom you can trade bodies and souls with. Possible as it may sound, who will be willing to trade bodies and souls with a robot?'" +"\n Teddy throws the red file at me and storms out of the lab" - +"\n I am in the lab, updating my diary. Teddy walks in" - +"\n 'Hey Teddy!' Again he ignores my greeting. 'I'm sorry Peter.'" + +"\n I am in my bedroom, updating my diary. Teddy walks in" + +"\n 'Hey Teddy!' Again he ignores my greeting. 'I'm sorry Teddy.'" +"\n 'Sorry for what?'I'm confused. Based on his approach, this looks like the last entry I shall make on this diary." +"\n Oh no! Dear diary, he is walking towards me; face oozing with anger. In case he knocks me out and trade bodies with me, I shall wake up eventually and get everything back. Till then goodbye" - +"\n Teddy knocks the scientist down trades the body and soul. The places Peter on a lab bench and disassembles his leg and eyes"); + +"\n Teddy knocks the scientist down trades the body and soul. He places Teddy on a lab bench and disassembles his leg and eyes"); // more history to be added! // added reasoning feature // implemented control panals diff --git a/README.md b/README.md index 78fa0bbf..beff0a62 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## Design Justification 🚧 **TO BE ADDED** - +Our game is basically about this Scientist who created a robot and in pursuit of having a best friend. The setting involves two rooms; a bedroom and a laboratory. This ## Layout Map 🚧 **TO BE ADDED** @@ -19,8 +19,8 @@ 1. Our **overall approach** to tackling this project is coming up with a game plot first, then write the possible classes we need and their possible interations. After finishing the draft of the classes, we implement them in `Main.java` and write the game loop. 🕹️ 2. We definitely learned so much **new thing(s)** in completing this project: 🤩 * We learned about contructing an architecture diagram; - * We lerned about working how to effectively use Github for team projects; - * We leanred about how to implement a game loop; + * We learned about working how to effectively use Github for team projects; + * We learned about how to implement a game loop; 3. However, there are still many things we wish we had **implemented differently**: 👾 * We wish we had implemented a `Soul` class and it would be an adventure of collecting the scattered souls along the way; * We wish we had implemented a puzzle that players need to solve before they are able to unlock the computer; From b88f8162feeb7b3d03c633ba533698f900328ef6 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 11:16:43 -0400 Subject: [PATCH 78/95] Changed name and description to public --- Room.java | 35 ++++++----------------------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/Room.java b/Room.java index 79e945b8..2e6e06f6 100644 --- a/Room.java +++ b/Room.java @@ -9,11 +9,11 @@ public class Room { // Attributes - private String name = ""; - private String description = ""; + public String name = ""; + public String description = ""; public Boolean laserEquipped; public Boolean laserActive; - private List items; + public List itemsInRoom; /* Default Constructor */ public Room(String name, String description, Boolean laserEquipped, Boolean laserActive){ @@ -25,23 +25,7 @@ public Room(String name, String description, Boolean laserEquipped, Boolean lase } this.laserEquipped = laserEquipped; this.laserActive = laserActive; - this.items = new ArrayList<>(); - } - - /** - * Accessor for the name of the room - * @return name of the room - */ - public String getName() { - return this.name; - } - - /** - * Accessor for the description of the room - * @return description of the room - */ - public String getDescription(){ - return this.description; + this.itemsInRoom = new ArrayList<>(); } /** @@ -49,7 +33,7 @@ public String getDescription(){ */ public void addItem(Item item) { if (item != null) { - items.add(item); + itemsInRoom.add(item); } } @@ -58,14 +42,7 @@ public void addItem(Item item) { */ public void removeItem(Item item) { if (item != null) { - items.remove(item); + itemsInRoom.remove(item); } } - - /** - * Accessor for the items arraylist - */ - public List getItems() { - return items; - } } From 7bd22ddd1430cceb9c339b743e0870e891851b85 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 11:18:09 -0400 Subject: [PATCH 79/95] Updated `walkTo` --- Existence.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/Existence.java b/Existence.java index 75f363e8..8a73174e 100644 --- a/Existence.java +++ b/Existence.java @@ -228,7 +228,7 @@ public void take(Item s) { public void putDown(Item s, Room r) { if (this.inventory.contains(s) && r != null) { this.inventory.remove(s); - System.out.println("You put down the " + s.getName() + " in the " + r.getName() + "."); + System.out.println("You put down the " + s.getName() + " in the " + r.name + "."); } // This method need to be modified. // We need to figure out how to how to represent the current room we are in // If we want to put down the item in the current room, we will successfully do that @@ -261,7 +261,7 @@ public void lookAround(Room r) { if (r == null) { System.out.println("You're not in a room."); - } System.out.println("You look around the " + r.getName() + ". "+ r.getDescription()); + } System.out.println("You look around the " + r.name + ". "+ r.description); } /** @@ -282,18 +282,11 @@ public void inspect(Item s) { * @param r the room to walk to * @param s the item to walk to */ - public void walkTo(Room r, Item s) { + public void walkTo(Room rm, Item s) { if (this.canWalk = true) { - System.out.println("You can walk to these items in the current room" + r.getItems()); - if (r == null || s == null) { - System.out.println("There is nowhere to walk to."); - } else if (!r.getItems().contains(s)) { - System.out.println("You can't walk to the " + s.getName() + " because it's not in this room."); - } else { System.out.println(" You walked to " + s.getName() + "."); System.out.println("... Walking ..."); System.out.println("You are now near the " + s.getName() + "."); - } } else { System.out.println("You don't have both legs yet. You can only crawl to somewhere."); } @@ -304,9 +297,9 @@ public void walkTo(Room r, Item s) { * @param r the room to crawl to * @param s the item to crawl to */ - public void crawlTo(Room r, Item s) { - if (r.getItems().contains(s)) { - System.out.println("You crawled slowly toward the " + s.getName() + "."); + public void crawlTo(Room rm, Item s) { + if (rm.itemsInRoom.contains(s)) { + System.out.println("You crawled slowly toward the " + s.getName() + "in the " + rm.name + "."); System.out.println("....... Crawling ...... \n ...... Crawling ......"); System.out.println("..... Almost there ......"); System.out.println("You reached the " + s.getName() + ", catching your breath."); From dd6bbe70b8d2b2b2efe9ccf8387648bd7841ece5 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 11:18:27 -0400 Subject: [PATCH 80/95] Added `crawlTo` --- Main.java | 71 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/Main.java b/Main.java index b66e557f..77efabd4 100644 --- a/Main.java +++ b/Main.java @@ -125,9 +125,7 @@ public static void main(String[] args) { player.lookAround(bedroom); } else if (player.stageTwo == true || player.stageThree == true) { player.lookAround(lab); - } else { - System.out.println("INVALID COMMAND"); - } + } } // If the command is take, look for the next word to see what item to pick @@ -145,12 +143,14 @@ public static void main(String[] args) { } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { player.take(teddyBear); } else { - System.out.println("INVALID COMMAND"); + System.out.println("[INVALID COMMAND]"); } - } + } else { + System.out.println("What do you want to take?"); + } } - // If the command is touch, We let the player touch the item and return its description + // If the command is touch, we let the player touch the item and return its description if (command.equalsIgnoreCase("touch")) { if (words.length >= 2) { String itemName = words[1]; // The second word is the item's name @@ -171,12 +171,14 @@ public static void main(String[] args) { } else if (itemName.equalsIgnoreCase("door")) { player.touch(door); } else { - System.out.println("INVALID COMMAND"); + System.out.println("[INVALID COMMAND]"); } - } + } else { + System.out.println("What do you want to touch?"); + } } - // If the command is inspect, We let the player inspect the item and return its description and status + // If the command is inspect, we let the player inspect the item and return its description and status if (command.equalsIgnoreCase("inspect")) { if (words.length >= 2) { String itemName = words[1]; // The second word is the item's name @@ -199,15 +201,60 @@ public static void main(String[] args) { } else if (itemName.equalsIgnoreCase("door")) { player.inspect(door); } else { - System.out.println("INVALID COMMAND"); + System.out.println("[INVALID COMMAND]"); } - } else { + } else if (player.canInspect == false) { System.out.println("You cannot inspect with one one eye missing!"); } } + else { + System.out.println("What do you want to inspect?"); + } } - // crawl to + // If the command is crawl to, we let the player crawl to an item + if (command.equalsIgnoreCase("crawl")) { + if (words.length >= 2) { + String itemName = words[2]; // The third word is the item's name + + // The player can crawl to these fixed items: + // bedroom: (bed, box, iris pot, door), lab: (computer) + if (itemName.equalsIgnoreCase("bed")) { + player.crawlTo(bedroom, bed); + } else if (itemName.equalsIgnoreCase("box")) { + player.crawlTo(bedroom, box); + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.crawlTo(bedroom, irisPot); + } else if (itemName.equalsIgnoreCase("door")) { + player.crawlTo(bedroom, door); + } else if (itemName.equalsIgnoreCase("computer")) { + player.crawlTo(lab, computer); + } + + // The player can crawl to these transportable items: + // teddy bear + // The player can't crawl to leg and eye because they are stored inside another item + else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + if (player.stageOne == true) { + player.crawlTo(bedroom, teddyBear); + } else if (player.stageTwo == true || player.stageThree == true) { + if (bedroom.itemsInRoom.contains(teddyBear)) { + player.crawlTo(bedroom, teddyBear); + } else if (lab.itemsInRoom.contains(teddyBear)) { + player.crawlTo(lab, teddyBear); + } + } + } + + // If the third word is none of the names of the items, we print out "[INVALID COMMAND]" + else { + System.out.println("[INVALID COMMAND]"); + } + + } else { + System.out.println("What do you want to crawl to?"); + } + } // walk to From 2d90f672c73e535875076bd7103a74d117879083 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 11:27:30 -0400 Subject: [PATCH 81/95] Fixed typo --- Computer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Computer.java b/Computer.java index c5b7b0aa..3d4518a3 100644 --- a/Computer.java +++ b/Computer.java @@ -44,7 +44,7 @@ public void openControlPanel(Robot r, Room rm) { System.out.println("\nReasoning: " + "On/Off" + "\nCurrent state: ReasoningOn?" + r.reasoningOn); System.out.println("Power: " + "On/Off"+ "\nCurrent state: PoweredOn?" + r.poweredOn); System.out.println("Memory: " + "On/Off"+ "\nCurrent state: MemoryOn?" + r.memoryOn); - System.out.println("Laser: " + "On/Off"+ "\nCurrent room: "+ rm.getName() + "\nCurrent state: LaserOn?" + rm.laserActive); + System.out.println("Laser: " + "On/Off"+ "\nCurrent room: "+ rm.name + "\nCurrent state: LaserOn?" + rm.laserActive); System.out.println("TradeBody: " + "RESTRICTED"); System.out.println("SelfDestruct: " + "RESTRICTED"); } From c1959ead14495e8c91cd01acccb78d263ea7cbef Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 19:56:00 -0400 Subject: [PATCH 82/95] Updated tasks --- cheatsheet.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/cheatsheet.md b/cheatsheet.md index 4c644f4b..26566200 100644 --- a/cheatsheet.md +++ b/cheatsheet.md @@ -12,25 +12,23 @@ * `put on item` to put on something; * `put down item` to put down something; * `health` to check your curent health status; -* `unlock item` to unlock something; -* `click folder` to click a folder; * `toggle control` to toggle control buttons; -* `trade` to trade bodies with another existence; +* `trade` to trade bodies; * `electrocute` to electrocute another existence; * `fight` to fight another existence; +* `destruct` to initiate the self-destruct program of a robot; ## Tasks -**Stage 1** +## Stage 1 - [Task 1] Put on the leg hidden in a box; - [Task 2] Stand up, find and put on the eye in an irisPot; - [Task 3] Look around, open the door to the lab; -**Stage 2** +## Stage 2 - [Task 4] Crawl into the lab; - [Task 5] Unlock the computer and see 2 folders; - [Task 6] Click on the history folder, find the story; - [Task 7] Click on the controls folder and play around with the control buttons; -**Stage 3** -- [Task 8] Have conversations with the “human”; -- [Task 9] Fight and electrocute the “human”; -- [Task 10] Exchange bodies; -- [Task 11] Choose to forgive or revenge; +## Stage 3 +- [Task 8] Electrocute the scientist; +- [Task 9] Trade bodies; +- [Task 10] Choose to forgive or revenge; From 7c3d1ba91affafefc98fa1065cc29f7880439ae1 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 19:57:19 -0400 Subject: [PATCH 83/95] Deleted `toggleReasoning`, `toggleMemory`, `selfDestruct` --- Computer.java | 126 +++++++++++++------------------------------------- 1 file changed, 33 insertions(+), 93 deletions(-) diff --git a/Computer.java b/Computer.java index 3d4518a3..be8be8bc 100644 --- a/Computer.java +++ b/Computer.java @@ -12,27 +12,40 @@ public class Computer extends Item { */ public Computer() { super("computer", - "This is a lab computer with two folders: History and Control Panel.", + "'This is a lab computer. I should try to unlock it to see what's inside...'", false, true, false); this.locked = true; } /** Prints the history. Not completed */ public void openHistory() { - System.out.println("\nHistory: \n Today, April 13, 2005, I created the first Teddy prototype." - + "This is looking great, I'm hoping that we can be best friends!" - + "\n Today, May 15, 2005, I started building neural network for teddy." - + "\n Today, July 28, 2005, I observed that Teddy has learned basic tasks like" + System.out.println("\n=== History ==="); + System.out.println( "\n This is robotics scientist Teddy. Today is March 13, 2005, and I'm starting on building the first Teddy robot prototype." + + "I want to build Teddy robot as a functional lab assistant and emotional companion." + + "I gave him the same name as me-I'm hoping that we can be best friends!" + + "\n April 22, 2005, I finished assembling Teddy's body. He looks so cute just like my favorite teddy bear." + + "\n May 15, 2005, I started building neural network for teddy." + + "\n July 28, 2005, I observed that Teddy has learned basic tasks like" + "grabbing things and walk around." - + "\n Today, April 23, 2006, it's been a year and teddy seems to be developing intelligence." - + "\n Today, June 27, 2006, deep neural network is a good idea!" - + "\n Today, September 12, 2006, Teddy's artificial intelligence is developing fast." ); - // more history to be added! - // added reasoning feature - // implemented control panals - // self-destroy - // electrocute - // trade body mechanism + + "\n March 13, 2006, Happy birthday Teddy! It's been a year and you are developing intelligence so fast." + + "\n April 30, 2006, I added electrode to Teddy so that he can help me electrocute chemical solutions." + + "\n May 25, 2006, Electrocuting function is way more powerful than I thought, I was accidently electrocuted to unconscious today. But it's not Teddy's fault, I should have been more careful." + + "\n June 16, 2006, I added a self explode device on Teddy just in case programs run out of control." + + "\n June 27, 2006, Deep neural network is enabling Teddy to have his own reasoning." + + "\n September 12, 2006, Teddy's artificial intelligence is developing fast and he began to exhibit 'emotions' like human." + + "\n October 27, 2006, 'I'm a boy named Teddy.' Teddy told me. I smiled and nodded.'You are my favorite boy.'" + + "\n January 2, 2007, Teddy didn't respond when I called." + +"\n January 31, 2007, Teddy is still ignoring me and now won't listen to me when I instruct him. I've run diagnostics twice. Sensors, logic units — everything checks out fine." + + "\n February 14, 2007, I brought Teddy roses for Valentine's Day. He ripped them apart the moment I held them out. Popped the balloons too." + +"\n March 1, 2007, I asked him why. Why the coldness? 'You lied to me! I want to be like you!' He shouts. Teddy has dicovered he is not a human." + +"\n March 10, 2007, I think Teddy has found my secret chamber. I hope he has not found the red file." + +"\n March 11, 2007, I walked into Teddy reading from what appears to be red file. My goose is cooked." + +"\n March 12, 2007, Teddy asked me about trading body with me. He must have read the red file. I refused because the technology is still not mature yet." + +"\n March 13, 2007, Happy birthday Teddy! I'm updating my diary and Teddy walks in. Again he ignores my greetin" + +"\n TEDDY2EDWA7NHTS21TO8EWFTRA27DDE92JBODY19" + +"\n March 14, 2007, This is new robotics scientist Teddy. Trading body is successful. From today, I'm the real human Teddy." + + "Possessing a human body feels different. But finally...my dream comes true." + + "I powered off robot Teddy, disassembled his robot leg and eye and put him in the bedroom."); } /** Displays the control panel with current switch states. @@ -41,26 +54,11 @@ public void openHistory() { */ public void openControlPanel(Robot r, Room rm) { System.out.println("\n=== Control Panel ==="); - System.out.println("\nReasoning: " + "On/Off" + "\nCurrent state: ReasoningOn?" + r.reasoningOn); - System.out.println("Power: " + "On/Off"+ "\nCurrent state: PoweredOn?" + r.poweredOn); - System.out.println("Memory: " + "On/Off"+ "\nCurrent state: MemoryOn?" + r.memoryOn); - System.out.println("Laser: " + "On/Off"+ "\nCurrent room: "+ rm.name + "\nCurrent state: LaserOn?" + rm.laserActive); - System.out.println("TradeBody: " + "RESTRICTED"); - System.out.println("SelfDestruct: " + "RESTRICTED"); - } - - - /** Toggles reasoning on/off - * @param r The robot - */ - public void toggleReasoning(Robot r) { - if (r.reasoningOn == false) { - r.reasoningOn = true; - System.out.println("\n[REASONING ON]"); - } else { - r.reasoningOn = false; - System.out.println("\n[REASONING OFF]"); - } + System.out.println("power: " + "On/Off"+ "\nCurrent state: PoweredOn?" + r.poweredOn); + System.out.println("laser: " + "On/Off"+ "\nCurrent room: "+ rm.name + "\nCurrent state: LaserOn?" + rm.laserActive); + System.out.println("trade body: " + "RESTRICTED"); + System.out.println("self destruct: " + "RESTRICTED"); + System.out.println("Toggle the buttons to change states"); } /** Attempts to toggle power off/on @@ -76,26 +74,6 @@ public void togglePower(Robot r) { } } - /** - * Toggles memory restoration on; cannot be turned off once on. - * @param e The Existence whose memory is being toggled - * @param s The Item being used to toggle the memory input - */ - public void toggleMemory(Robot r) { - if (r.memoryOn == false) { - r.memoryOn = true; - System.out.println("\n[MEMORIES ON] \nI'm starting to remember things...\n [ACHIEVEMENT UNLOCKED] You have unlocked the second piece of your soul."); - if(r.reasoningOn == false) { - System.out.println("\nI don't understand what these memories mean... How can I understand it?"); - } else if (r.reasoningOn == true) { - System.out.println("\nHmmm... \nThis is MY memory! I AM Teddy!\n [ACHIEVEMENT UNLOCKED] You found out about your true identity.\n Truth is: You used to be a scientist, who tried to make a robot called Teddy, but it outsmarted you and has traded bodies with you. Go get your body back!"); - } - } else { - r.memoryOn = false; - System.out.println("\n[MEMORIES OFF]"); - } - } - /** Toggles the lab’s lasers off/on * @param r The room where the lasers are */ @@ -104,48 +82,10 @@ public void toggleLaser(Room r) { r.laserActive = false; System.out.println("\n[LASER OFF]"); } else if (r.laserEquipped == true && r.laserActive == false){ + r.laserActive = true; System.out.println("\n[LASER ON]"); } else { System.out.println("\n[ACTION FAILED]-ROOM NOT EQUIPPED WITH LASER"); } } - - /** - * Attempt to trade bodies between two existences. - * Always prints restriction because no second existence present. - * @param e1 The first Existence - * @param e2 The second Existence - */ - public void tradeBody(Existence e1, Existence e2) { - System.out.println("\nYou can only trade bodies if there is at least another existence present."); - // TO be contructed!! - } - - /** - * Attempts self-destruction. Only a human operator may trigger it. - * @param operator the one pressing the button - * @param toBeDestroyed the robot body to destroy - */ - public void selfDestruct(Human operator, Robot toBeDestroyed) { - System.out.println("\nSelf-destruct sequence initiated! Boom!"); - toBeDestroyed.die(); - } - - /** - * (Overloaded) Robot tries to destroy another Robot - * @param operator the one pressing the button - * @param toBeDestroyed the one being destroyed - */ - public void selfDestruct(Robot operator, Robot toBeDestroyed) { - throw new RuntimeException("\nFAILED: A robot cannot do that to another robot."); - } - - /** - * (Overloaded)Robot tries to destroy a Human - * @param operator the one pressing the button - * @param toBeDestroyed the one being destroyed - */ - public void selfDestruct(Robot operator, Human toBeDestroyed) { - throw new RuntimeException("\nFAILED: Only a human can do this to a robot."); - } } From 14ed971c33a947c6b20f4b37ae2e1ea15b3f0331 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 19:58:38 -0400 Subject: [PATCH 84/95] Rewrote `open(c)`, `putDown(s)`, added `tradeBody` --- Existence.java | 129 ++++++++++++++++--------------------------------- 1 file changed, 42 insertions(+), 87 deletions(-) diff --git a/Existence.java b/Existence.java index 8a73174e..85044d47 100644 --- a/Existence.java +++ b/Existence.java @@ -7,7 +7,7 @@ public class Existence { // Attributes public String name; - public Room currentRoom; // To be discussed! Do we need this? + public Room currentRoom; // Should we also have an attribute for currentLocation? Like near some item? protected ArrayList inventory = new ArrayList<>(); protected int health; // Imaginary health bar @@ -44,20 +44,12 @@ public Existence(String name, Room currentRoom) { // Methods - /** - * Accessor for an exsitence's name - * @return name of the existence - */ - public String getName() { - return this.name; - } - /** * Accessor for one's health bar * @return Current health bar number */ - public int getHealth() { - return this.health; + public String getHealth() { + return ("Your current health is: " + this.health + " /100"); } /** @@ -74,7 +66,6 @@ public void weaken() { public void die() { this.health = 0; this.isAlive = false; - System.out.println("You have died."); respawnChat(); } @@ -136,65 +127,12 @@ public void open(Item s, Room r) { /** * Overloaded open method for a computer - * @param r The robot controlled on the computer * @param computer to be opened - * @param rm The room controlled on the computer */ - public void open(Robot r, Computer c, Room rm) { - if (c.locked == true) { - c.locked = false; - System.out.println("\nYou opened the computer. Two folders appear: History and Control Panel."); - - // Get user input - Scanner scanner2 = new Scanner(System.in); - System.out.println("Which folder do you want to see? Press H to open History folder and C to open Control Panel."); - - String choice2 = scanner2.nextLine(); - - if (choice2.equals("H")) { - System.out.println("You opened the History Folder..."); - c.openHistory(); - } else if (choice2.equals("C")) { - System.out.println("You opened the control Panel..."); - c.openControlPanel(r,rm); - System.out.println("Do you want to toggle any controls? Enter a shorcut to toggle something... +"); - System.out.println("Control Panel Shortcuts:\n" + - "\n" + - "- \"r\" for reasoning.\n" + - "- \"p\" for power.\n" + - "- \"m\" for memory.\n" + - "- \"l\" for laser.\n" + - "- \"tr\" to trade bodies.\n" + - "- \"de\" to destruct an *entity*\n" + - ""); - - // Getting commands - Scanner scanner3 = new Scanner(System.in); - - String choice3 = scanner3.nextLine(); - - if (choice3.equals("r")) { - c.toggleReasoning(r); - - } else if (choice3.equals("p")) { - c.togglePower(r); - - } else if (choice3.equals("m")) { - c.toggleMemory(r); - - } else if (choice3.equals("l")) { - c.toggleLaser(rm); - } else if (choice3.equals("tr") || choice3.equals("de")) { - System.out.println("\n[RESTRICTED ACTION FAILED]"); - } else { - System.out.println("[INVALID COMMAND]"); - } scanner3.close(); - } else { - System.out.println("[INVALID COMMAND]"); - } scanner2.close(); - } else { - System.out.println("\nThe computer is unlocked and opened."); - } //Much to do with this overloaded method!! + public void open(Computer c) { + c.locked =false; + System.out.println("You opened the computer and two folders appear: History and Control Panel." + + "\n 'I want to try opening one of the folders...'"); } @@ -204,7 +142,7 @@ public void open(Robot r, Computer c, Room rm) { * @param s The item */ public void touch(Item s) { - System.out.println(s.getDescription()); + System.out.println(s.description); } /** @@ -213,10 +151,13 @@ public void touch(Item s) { */ public void take(Item s) { if(this.inventory.contains(s)) { - System.out.println("You already have " + s.getName() + "."); + System.out.println("You already have " + s.name + "."); } else { this.inventory.add(s); - System.out.println(s.getName() + " successfully added to your inventory!"); + System.out.println(s.name + " successfully added to your inventory!"); + if (s.canBePutOn == true) { + System.out.println(s.description); + } } } @@ -225,14 +166,14 @@ public void take(Item s) { * @param s the item * @param r the room */ - public void putDown(Item s, Room r) { - if (this.inventory.contains(s) && r != null) { + public void putDown(Item s) { + if (this.inventory.contains(s) && s.canBeGrabbed == true) { this.inventory.remove(s); - System.out.println("You put down the " + s.getName() + " in the " + r.name + "."); - } // This method need to be modified. - // We need to figure out how to how to represent the current room we are in - // If we want to put down the item in the current room, we will successfully do that - // If we want to put down the item in another room, we need to walk to/crawl to that room first + this.currentRoom.itemsInRoom.add(s); + System.out.println("You put down the " + s.name + " in the " + this.currentRoom + "."); + } else { + System.out.println("[INVALID COMMAND]"); + } } /** @@ -250,7 +191,8 @@ public void printInventory() { */ public void fight(Existence e) { this.weaken(); - System.out.println("Fighting!!!"); + e.weaken(); + System.out.println("Fighting!!!" + this.getHealth()); } /** @@ -273,7 +215,7 @@ public void inspect(Item s) { System.out.println("There is nothing to inspect."); } - System.out.println("Inspecting the " + s.getName() + "..."); + System.out.println("Inspecting the " + s.name + "..."); System.out.println(s.getItemStatus()); } @@ -284,9 +226,9 @@ public void inspect(Item s) { */ public void walkTo(Room rm, Item s) { if (this.canWalk = true) { - System.out.println(" You walked to " + s.getName() + "."); + System.out.println(" You walked to " + s.name + "."); System.out.println("... Walking ..."); - System.out.println("You are now near the " + s.getName() + "."); + System.out.println("You are now near the " + s.name + "."); } else { System.out.println("You don't have both legs yet. You can only crawl to somewhere."); } @@ -299,14 +241,27 @@ public void walkTo(Room rm, Item s) { */ public void crawlTo(Room rm, Item s) { if (rm.itemsInRoom.contains(s)) { - System.out.println("You crawled slowly toward the " + s.getName() + "in the " + rm.name + "."); + System.out.println("You crawled slowly toward the " + s.name + "in the " + rm.name + "."); System.out.println("....... Crawling ...... \n ...... Crawling ......"); System.out.println("..... Almost there ......"); - System.out.println("You reached the " + s.getName() + ", catching your breath."); - System.out.println("You are now near the " + s.getName() + "."); + System.out.println("You reached the " + s.name + ", catching your breath."); + System.out.println("You are now near the " + s.name + "."); } else { - System.out.println("You can't crawl to the " + s.getName() + " because it's not in this room."); + System.out.println("You can't crawl to the " + s.name + " because it's not in this room."); } } + /** + * trade bodies between robot and human + * @param r robot + * @param h human + */ + public void tradeBody(Robot r, Human h) { + System.out.println("\n Detecting surrounding existences......" + + "\n There are currently two existence: Robot " + r.name + " and Human" + h.name + " ." + + "\n -------------------------Trading Body-------------------------" + + "\n Robo t" + r.name + " has successfully traded body with human " + h.name + " ." + ); + } + } From f37844944874c47ac0e4f0ac13be81ef915015e5 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 19:59:13 -0400 Subject: [PATCH 85/95] Added `selfDestruct` --- Human.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Human.java b/Human.java index 297bf583..56277f4a 100644 --- a/Human.java +++ b/Human.java @@ -28,4 +28,13 @@ public Human(String name, Room room, Boolean isAlive, Boolean canGoToLab, Boolea this.canInspect = true; this.isUnconscious = false; } + + /** + * start the self-destruct program of the robot + * @param r the robot body to destroy + */ + public void selfDestruct(Robot r) { + System.out.println("\nSelf-destruct sequence initiated! Boom!"); + r.die(); + } } From d3db3e53733654c6e5d60370190e843aa98cebc1 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 19:59:55 -0400 Subject: [PATCH 86/95] Changed attributes name and description to public --- Item.java | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/Item.java b/Item.java index 3dfed8cf..e1d3d1a3 100644 --- a/Item.java +++ b/Item.java @@ -5,8 +5,8 @@ public class Item { //Attributes - private String name; - private String description; + public String name; + public String description; public Boolean canBeGrabbed; private Item containedItem; public Boolean canBeOpened; @@ -22,28 +22,12 @@ public Item(String name, String description, Boolean canBeGrabbed, Boolean canBe this.canBePutOn = false; } - /** - * Accessor for item's name - * @return name of the item - */ - public String getName() { - return this.name; - } - - /** - * Accessor for item's description - * @return description of the item - */ - public String getDescription() { - return this.description; - } - /** * Accessor for item's status(whether it can be grabbed/opened/put on) * @return the statusof the item */ public String getItemStatus() { - return ("\n Item status for " + this.getName() + + return ("\n Item status for " + this.name + "\n can be grabbed: " + this.canBeGrabbed + "\n can be opened: " + this.canBeOpened + "\n can be put on: " + this.canBePutOn); @@ -56,6 +40,7 @@ public String getItemStatus() { public Item getContainedItem(){ return this.containedItem; } + /** * Method for an item to store another item */ From 480cd19f28750c4f8658a8c0d9b001318a6c8a41 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 20:00:58 -0400 Subject: [PATCH 87/95] Updated game name and feedback --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 78fa0bbf..1067ea7f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# CSC120-FinalProject-ROBO Adventure🤖 -# Contributors: Clare, Joyce, Tammy, Yunxian +# CSC120-FinalProject-Teddy Bot🤖 +## Contributors: Clare, Joyce, Tammy, Yunxian ## Deliverables CheckList: 🚧(in construction) ☑️(finished) - Your final codebase 🚧 @@ -28,7 +28,8 @@ 4. If we had **unlimited time**, we would implement these additional features: 🧸 * Add more rooms so that it will be a longer adventure; * Make more commands available; - 5. The most helpful **piece of feedback** we received while working on our project was **TO BE ADDED** given by **TO BE ADDED**. 🚧 + 5. The most helpful **piece of feedback** we received: 🚧 + * "Yunxian": The most useful feedback I got is from Tammy. She told me we can use `switch-case` instead of many `if-else`statements in the main game loop. 6. If we could go back in time and give our past selves some **advice** about this project, we would give these tips: 😃 * Start Small! We came up with so many good ideas but it's hard to implement all of them into our game, so we are abandoing ideas along the way. It could be frustrated if we have a very complicated storyline in our mind but we can't bring them to real life due to limited time. * Take advantage of github! Some features like opening an issue and assign people to work on it/ work on separate branches and merge later/reviewing each other's commit messages could be really useful working in a team! From ebf0f20f28afdd2dd58796aa7500607b789566bc Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 20:01:52 -0400 Subject: [PATCH 88/95] Updated javadoc --- Room.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Room.java b/Room.java index 2e6e06f6..5c0c0c0f 100644 --- a/Room.java +++ b/Room.java @@ -15,7 +15,13 @@ public class Room { public Boolean laserActive; public List itemsInRoom; - /* Default Constructor */ + /** + * Default Constructor + * @param name of the room + * @param description of the room + * @param boolean of whether it's laser equipped + * @param boolean of whether it's laser active + */ public Room(String name, String description, Boolean laserEquipped, Boolean laserActive){ if (name != null){ this.name = name; @@ -30,6 +36,7 @@ public Room(String name, String description, Boolean laserEquipped, Boolean lase /** * Add an item to the items arraylist + * @param item to be added */ public void addItem(Item item) { if (item != null) { @@ -39,6 +46,7 @@ public void addItem(Item item) { /** * Remove an item from the items arraylist + * @param ietm to be removed */ public void removeItem(Item item) { if (item != null) { From 425c47192683a2493b3367d1ba24b0008dc50685 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 20:02:39 -0400 Subject: [PATCH 89/95] Deleted attributes `reasoningOn` and `memoryOn` --- Robot.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Robot.java b/Robot.java index 15fbfded..47822206 100644 --- a/Robot.java +++ b/Robot.java @@ -7,9 +7,7 @@ public class Robot extends Existence { //Attributes public Boolean poweredOn; - public Boolean reasoningOn; - public Boolean memoryOn; - + /** * Default constructor for 'Human' * @param name @@ -25,8 +23,6 @@ public Robot(String name, Room room, Boolean isAlive, Boolean canGoToLab, Boolea this.canWalk = false; // Will unlock after adding leg to the body this.canInspect = true; // Will unlock after adding eye to the body this.poweredOn = true; // Will be able to turn off after unlocking the control panel - this.reasoningOn = false; // Will be able to turn on after unlocking the control panel - this.memoryOn = false; // Will be able to turn on after unlocking the control panel } // Methods @@ -36,10 +32,10 @@ public Robot(String name, Room room, Boolean isAlive, Boolean canGoToLab, Boolea */ public void putOn(Item s) { if (this.inventory.contains(s) && s.canBePutOn == true) { - System.out.println("You have put on " + s.getName() + "."); + System.out.println("You have put on " + s.name + "."); this.inventory.remove(s); } else { - System.out.println("INVALID COMMAND"); + System.out.println("[INVALID COMMAND]"); } } @@ -48,6 +44,6 @@ public void putOn(Item s) { */ public void electrocute(Human h) { h.isUnconscious = true; - System.out.println(h.getName() + " is temporarily unconscious."); + System.out.println("You electrocuted " + h.name + " and they temporarily fall unconscious."); } } From 67abd64b00afe9864dbf51c78d768cb71058e978 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 20:03:25 -0400 Subject: [PATCH 90/95] Updated game loop --- Main.java | 586 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 384 insertions(+), 202 deletions(-) diff --git a/Main.java b/Main.java index 77efabd4..526e609e 100644 --- a/Main.java +++ b/Main.java @@ -6,6 +6,19 @@ public class Main { public static void main(String[] args) { + // Set game status + Boolean gameOn = true; + Boolean task1 = false; + Boolean task2 = false; + Boolean task3 = false; + Boolean task4 = false; + Boolean task5 = false; + Boolean task6 = false; + Boolean task7 = false; + Boolean task8 = false; + Boolean task9 = false; + Boolean task10 = false; + //Create all the items needed Item bed = new Item("bed", "'This is a bed.'", false, false, false); Item teddyBear = new Item("teddyBear", "'This teddy bear feels soft.'", true, false, false); @@ -34,10 +47,11 @@ public static void main(String[] args) { // Create the player's existence Robot player = new Robot("Teddy", bedroom, true, false, false, false); + Human scientist = new Human("Teddy", lab, true, true, true, true); // Messages: String welcomeMessage = - "\n Welcome to ROBO Adventure! Get ready for your journey to discover hidden truths..."; + "\n Welcome to Teddy Bot! Get ready for your journey to discover hidden truths..."; String basicInstructions = "\n Here is the basic instruction: Type the command with any item to execute that command on that item." + "(E.g: 'open door')" + @@ -45,9 +59,9 @@ public static void main(String[] args) { String enteringMessage = "\n Now get ready for the game..." + "\n......LOADING......" + - "\n......Entering Game ROBO Adventure......" + + "\n......Entering Game Teddy Bot......" + "\n*****************" + - "\n ROBO Adventure" + + "\n Teddy Bot" + "\n*****************"; String stageOneMessage = "\n[STAGE 1]" + @@ -55,6 +69,18 @@ public static void main(String[] args) { "\n The only thing you know is that you possess a mechanical body" + "with one leg and one eye missing." + "\n 'Who am I? where am I? I should look around...'"; + String stageTwoMessage = + "\n[STAGE 2]" + + "\n In front of you is a relatively empty lab with a giant computer." + + "\n However, red laser is all over the lab, blocking your way to get to the computer." + + "\n 'The red laser looks dangerous, I need to figure out a safe to get in...'"; + String stageThreeMessage = + "\n[STAGE 3]" + + "\n Crrreeeaaak...You heard sound of door opening." + + "\n You turned your head to the direction of the sound and was surprised to see" + + "a scientist entered the lab through another door you didn't notice before." + + "\n 'Teddy???''Teddy???'" + + "[CONVERSATION TO BE ADDED]"; String cheatSheet1 = "- \"take item\" to take something and add it to your inventory.\n" + "- \"touch item\" to touch an item and see its description.\n" + @@ -68,12 +94,11 @@ public static void main(String[] args) { "- \"put down item\" to put down something.\n" + "- \"health\" to check your curent health status.\n"; String cheatSheet2 = - "- \"unlock item\" to unlock something.\n" + - "- \"click folder\" to click a folder.\n" + "- \"toggle control\" to toggle control buttons.\n"; String cheatSheet3 = - "- \"trade\" to trade bodies with another existence.\n" + + "- \"trade\" to trade bodies.\n" + "- \"electrocute\" to electrocute another existence\n" + + "- \"destruct\" to initiate the self-destruct program of a robot.\n" + "- \"fight\" to fight another existence.\n"; // Starting the game @@ -83,7 +108,7 @@ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Game loop - while (true) { + while (gameOn == true) { // Accept a string of player inputs and split them String input = scanner.nextLine(); @@ -92,231 +117,388 @@ public static void main(String[] args) { if (words.length > 0) { String command = words[0]; // The first word is the command - // If the command is help, we print out cheatsheets based on stages - if (command.equalsIgnoreCase("help")) { - if (player.stageOne == true) { - System.out.println(cheatSheet1); - } else if (player.stageTwo == true) { - System.out.println(cheatSheet1 + cheatSheet2); - } else if (player.stageThree == true) { - System.out.println(cheatSheet1 + cheatSheet2 + cheatSheet3); - } - } - - // If the command is exit, we break out of the loop - if (command.equalsIgnoreCase("exit")) { - System.out.println("Goodbye! We hope you enjoyed the game!"); - break; - } - - // If the command is health, we print out the current health of the player - if (command.equalsIgnoreCase("health")) { - System.out.println("Your current health is: " + player.getHealth() + " /100"); - } - - // If the command is inventory, we print out the player's inventory - if (command.equalsIgnoreCase("inventory")) { - player.printInventory(); - } - - // If the command is look, we let the player look around and print out the decription of the room - if (command.equalsIgnoreCase("look")) { - if (player.stageOne == true) { - player.lookAround(bedroom); - } else if (player.stageTwo == true || player.stageThree == true) { - player.lookAround(lab); - } - } - - // If the command is take, look for the next word to see what item to pick - if (command.equalsIgnoreCase("take")) { - if (words.length >= 2) { - String itemName = words[1]; // The second word is the item's name + // Trying switch case + switch(command) { + + // Print cheatsheets based on current stage + case "help": + if (player.stageOne == true) { + System.out.println(cheatSheet1); + } else if (player.stageTwo == true) { + System.out.println(cheatSheet1 + cheatSheet2); + } else if (player.stageThree == true) { + System.out.println(cheatSheet1 + cheatSheet2 + cheatSheet3); + } + break; + + // Let the player exit at any point in the game + case "exit": + System.out.println("Goodbye! We hope you enjoyed the game!"); + gameOn = false; // Change game state to break out the user input loop (because the game ended) + break; - // The player can take the teddy bear, leg and eye - if (itemName.equalsIgnoreCase("leg")) { - player.take(leg); - System.out.println("'Let me try to put it on...'"); - } else if (itemName.equalsIgnoreCase("eye")) { - player.take(eye); - System.out.println("'Let me try to put it on...'"); - } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { - player.take(teddyBear); + // Print current health + case "health": + player.getHealth(); + break; + + // Print inventory + case "inventory": + player.printInventory(); + break; + + // Look around -> Print description of Room (based on current stage) + case "look": + if (player.stageOne == true) { + player.lookAround(bedroom); + } else if (player.stageTwo == true || player.stageThree == true) { + player.lookAround(lab); } else { System.out.println("[INVALID COMMAND]"); } - } else { - System.out.println("What do you want to take?"); - } - } - - // If the command is touch, we let the player touch the item and return its description - if (command.equalsIgnoreCase("touch")) { - if (words.length >= 2) { - String itemName = words[1]; // The second word is the item's name - - // The player can touch all the items: bed, teddy bear, box, leg, iris pot, eye and door - if (itemName.equalsIgnoreCase("bed")) { - player.touch(bed); - } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { - player.touch(teddyBear); - } else if (itemName.equalsIgnoreCase("box")) { - player.touch(box); - } else if (itemName.equalsIgnoreCase("leg")) { - player.touch(leg); - } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { - player.touch(irisPot); - } else if (itemName.equalsIgnoreCase("eye")) { - player.touch(eye); - } else if (itemName.equalsIgnoreCase("door")) { - player.touch(door); + break; + + // fight the scientist (body occupied by the initial robot) + case "fight": + player.fight(scientist); + break; + + // electrocute the scientist + case "electrocute": + player.electrocute(scientist); + task8 = true; + break; + + // Take items -> Look for user's next word to specify the Item being taken + case "take": + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name + + // Allow 3 items to be taken: the teddy bear, leg and eye + if (itemName.equalsIgnoreCase("leg")) { + player.take(leg); + System.out.println("'Let me try to put it on...'"); + } else if (itemName.equalsIgnoreCase("eye")) { + player.take(eye); + System.out.println("'Let me try to put it on...'"); + } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + player.take(teddyBear); + } else { + System.out.println("[INVALID COMMAND]"); + } } else { - System.out.println("[INVALID COMMAND]"); + System.out.println("What do you want to take?"); } - } else { - System.out.println("What do you want to touch?"); - } - } - - // If the command is inspect, we let the player inspect the item and return its description and status - if (command.equalsIgnoreCase("inspect")) { - if (words.length >= 2) { - String itemName = words[1]; // The second word is the item's name + break; + + // Touch things to get their descriptions + case "touch": + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name - // The player can only inspect if this attribute is true - if (player.canInspect == true) { - // The player can inspect all the items: bed, teddy bear, box, leg, iris pot, eye and door + // The player can touch: bed, teddy bear, box, leg, iris pot, eye, door and computer if (itemName.equalsIgnoreCase("bed")) { - player.inspect(bed); + player.touch(bed); } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { - player.inspect(teddyBear); + player.touch(teddyBear); } else if (itemName.equalsIgnoreCase("box")) { - player.inspect(box); + player.touch(box); } else if (itemName.equalsIgnoreCase("leg")) { - player.inspect(leg); + player.touch(leg); } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { - player.inspect(irisPot); + player.touch(irisPot); } else if (itemName.equalsIgnoreCase("eye")) { - player.inspect(eye); + player.touch(eye); + } else if (itemName.equalsIgnoreCase("door")) { + player.touch(door); + } else if (itemName.equalsIgnoreCase("computer")) { + player.touch(computer); + } else { + System.out.println("[INVALID COMMAND]"); + } + } else { + System.out.println("What do you want to touch?"); + } + break; + + // Open items + case "open": + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name + + // The player can open the box and the iris pot + if (itemName.equalsIgnoreCase("box")) { + player.open(box); + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.open(irisPot); } else if (itemName.equalsIgnoreCase("door")) { - player.inspect(door); + player.open(door, lab); + task3 = true; + } else if (itemName.equalsIgnoreCase("computer")) { + player.open(computer); + task5 = true; + } else if (itemName.equalsIgnoreCase("history")) { + computer.openHistory(); + task6 = true; + } else if (itemName.equalsIgnoreCase("control")) { + computer.openControlPanel(player, lab); + task7 = true; } else { System.out.println("[INVALID COMMAND]"); + } + } else { + System.out.println("What do you want to open?"); + } + break; + + // Inspect items to get its description and status + case "inspect": + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name + + // The player can only inspect if this attribute is true + if (player.canInspect == true) { + // The player can inspect all the items: bed, teddy bear, box, leg, iris pot, eye, door and computer + if (itemName.equalsIgnoreCase("bed")) { + player.inspect(bed); + } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + player.inspect(teddyBear); + } else if (itemName.equalsIgnoreCase("box")) { + player.inspect(box); + } else if (itemName.equalsIgnoreCase("leg")) { + player.inspect(leg); + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.inspect(irisPot); + } else if (itemName.equalsIgnoreCase("eye")) { + player.inspect(eye); + } else if (itemName.equalsIgnoreCase("door")) { + player.inspect(door); + } else if (itemName.equalsIgnoreCase("computer")) { + player.inspect(computer); + } else { + System.out.println("[INVALID COMMAND]"); + } + } else if (player.canInspect == false) { + System.out.println("You cannot inspect with one one eye missing!"); } - } else if (player.canInspect == false) { - System.out.println("You cannot inspect with one one eye missing!"); + } else { + System.out.println("What do you want to inspect?"); } - } - else { - System.out.println("What do you want to inspect?"); - } - } - - // If the command is crawl to, we let the player crawl to an item - if (command.equalsIgnoreCase("crawl")) { - if (words.length >= 2) { - String itemName = words[2]; // The third word is the item's name + break; + + // Crawl to an item in a room + case "crawl" : + if (words.length > 2) { + String itemName = words[2]; // The third word is the item's name - // The player can crawl to these fixed items: - // bedroom: (bed, box, iris pot, door), lab: (computer) - if (itemName.equalsIgnoreCase("bed")) { - player.crawlTo(bedroom, bed); - } else if (itemName.equalsIgnoreCase("box")) { - player.crawlTo(bedroom, box); - } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { - player.crawlTo(bedroom, irisPot); - } else if (itemName.equalsIgnoreCase("door")) { - player.crawlTo(bedroom, door); - } else if (itemName.equalsIgnoreCase("computer")) { - player.crawlTo(lab, computer); - } + // The player can crawl to these fixed items: + // bedroom: (bed, box, iris pot, door), lab: (computer) + if (itemName.equalsIgnoreCase("bed")) { + player.crawlTo(bedroom, bed); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("box")) { + player.crawlTo(bedroom, box); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.crawlTo(bedroom, irisPot); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("door")) { + player.crawlTo(bedroom, door); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("computer")) { + player.crawlTo(lab, computer); + player.currentRoom = lab; + task4 = true; + } - // The player can crawl to these transportable items: - // teddy bear - // The player can't crawl to leg and eye because they are stored inside another item - else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { - if (player.stageOne == true) { - player.crawlTo(bedroom, teddyBear); - } else if (player.stageTwo == true || player.stageThree == true) { + // The player can crawl to these transportable items: + // teddy bear + // The player can't crawl to leg and eye because they are stored inside another item + else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + if (bedroom.itemsInRoom.contains(teddyBear)) { player.crawlTo(bedroom, teddyBear); + player.currentRoom = bedroom; } else if (lab.itemsInRoom.contains(teddyBear)) { player.crawlTo(lab, teddyBear); - } - } - } + player.currentRoom = lab; + } else if (player.inventory.contains(teddyBear)) { + System.out.println("You can't crawl to the teddy bear because it's in your inventory!"); + } + + } - // If the third word is none of the names of the items, we print out "[INVALID COMMAND]" - else { - System.out.println("[INVALID COMMAND]"); - } + // If the third word is none of the names of the items, we print out "[INVALID COMMAND]" + else { + System.out.println("[INVALID COMMAND]"); + } - } else { - System.out.println("What do you want to crawl to?"); - } - } - - // walk to - - // open - - // put on - - // put down - - // unlock - - // click - - // toggle - - // trade - - // electrocute - - // fight - - // die (we should put the respawn chat here instead of inside the existence class) - - // Task 1 - - // Task 2 - - // Task 3 - - // Stage 2 - - // Task 4 - - // Task 5 - - // Task 6 - - // Task 7 - - // Stage 3 - - // Task 8 - - // Task 9 - - // Task 10 - - // Task 11 - - // Task 12 - - // Ending 1 (laser) + } else { + System.out.println("What do you want to crawl to?"); + } + break; + + // walk to an item in a room + case "walk": + if (words.length > 2) { + String itemName = words[2]; // The third word is the item's name + + // The player can only walk if this attribute is true + if (player.canWalk == true) { + + // The player can walk to these fixed items: + // bedroom: (bed, box, iris pot, door), lab: (computer) + if (itemName.equalsIgnoreCase("bed")) { + player.walkTo(bedroom, bed); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("box")) { + player.walkTo(bedroom, box); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.walkTo(bedroom, irisPot); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("door")) { + player.walkTo(bedroom, door); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("computer")) { + player.walkTo(lab, computer); + player.currentRoom = lab; + } + + // The player can walk to these transportable items: + // teddy bear + // The player can't walk to leg because it's put on and eye because it's stored inside another item + else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + + if (bedroom.itemsInRoom.contains(teddyBear)) { + player.walkTo(bedroom, teddyBear); + player.currentRoom = bedroom; + } else if (lab.itemsInRoom.contains(teddyBear)) { + player.walkTo(lab, teddyBear); + player.currentRoom = lab; + } else if (player.inventory.contains(teddyBear)) { + System.out.println("You can't walk to the teddy bear because it's in your inventory!"); + } + + } + + // If the third word is none of the names of the items, we print out "[INVALID COMMAND]" + else { + System.out.println("[INVALID COMMAND]"); + } + + } else if (player.canWalk == false) { + System.out.println("You cannot walk with one one leg missing!"); + } + } else { + System.out.println("What do you want to walk to?"); + } + break; + + // put on an item or put down an item + case "put": + if (words.length > 2) { + String preposition = words[1]; // The second word is the preposition: on/down + String itemName = words[2]; // The third word is the item's name + + // If the preposition is on, we perform `putOn` + if (preposition.equalsIgnoreCase("on")) { + + // The player can put on these fixed items: + // leg and eye + if (itemName.equalsIgnoreCase("leg")) { + player.putOn(leg); + player.canWalk = true; // The player can walk after putting on the leg + task1 = true; // [Task 1] completed + } else if (itemName.equalsIgnoreCase("eye")) { + player.putOn(eye); + player.canInspect = true; // The player can inspect after putting on the eye + task2 = true; // [Task 2] completed + } else { + System.out.println("[INVALID COMMAND]"); + } + } - // Ending 2 (power off) + // If the preposition is down, we perform `putDown` + if (preposition.equalsIgnoreCase("down")) { + + // The player can put down these transportable items: + // leg, eye, teddy bear + if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + player.putDown(teddyBear); + } else if (itemName.equalsIgnoreCase("leg")) { + player.putDown(leg); + player.canWalk = false; + } else if (itemName.equalsIgnoreCase("eye")) { + player.putDown(eye); + player.canInspect = false; + } else { + System.out.println("[INVALID COMMAND]"); + } + } - // Ending 3 (self destruct) + // If the preposition is neither on or down, we print out "[INVALID COMMAND]" + else { + System.out.println("[INVALID COMMAND]"); + } - // Ending 4 (forgive) + } else { + System.out.println("What do you want to put on/down?"); + } + break; + + // toggle a control button on the control panel + case "toggle": + if (words.length >= 2) { + String control = words[1]; // The second word is the control + + // The player can toggle these control items: + // power and laser + if (control.equalsIgnoreCase("power")) { + computer.togglePower(player); + } else if (control.equalsIgnoreCase("laser")) { + computer.toggleLaser(lab); + } else { + System.out.println("[INVALID COMMAND]"); + } + } else { + System.out.println("What do you want to toggle?"); + } + break; + + // trade bodies + case "trade": + player.tradeBody(player, scientist); + task9 = true; + break; + + // initiate the self-destrcuct program in the robot + case "destruct": + // If task 10 is done, can perform destruct + scientist.selfDestruct(player); + // Completed task 11 + // Print ending message + break; + } // close parenthesis for switch(command) + } // close parenthesis for if(words.length > 0) + + // When Task 1, 2, 3 are finished, enter stage 2 + if ((task1 == true) && (task2 == true) && (task3 == true)) { + player.stageOne = false; + player.stageTwo = true; + player.stageThree = false; + System.out.println(stageTwoMessage); + } - // Ending 5 (revenge) + // When Task 4, 5, 6, 7 are finished, enter stage 3 + if ((task4 == true) && (task5 == true) && (task6 == true) && (task7 == true)) { + player.stageOne = false; + player.stageTwo = false; + player.stageThree = true; } + + } scanner.close(); // close the scanner outside of the while loop - } -} + } // close parenthesis for public static void main(String[] args) +} // close parenthesis for public Class Main From 32a8e994223440f0d167f1f0010b343ccf64c15d Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 20:56:43 -0400 Subject: [PATCH 91/95] Updated println message for control panel --- Computer.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Computer.java b/Computer.java index be8be8bc..ab58faae 100644 --- a/Computer.java +++ b/Computer.java @@ -54,10 +54,8 @@ public void openHistory() { */ public void openControlPanel(Robot r, Room rm) { System.out.println("\n=== Control Panel ==="); - System.out.println("power: " + "On/Off"+ "\nCurrent state: PoweredOn?" + r.poweredOn); - System.out.println("laser: " + "On/Off"+ "\nCurrent room: "+ rm.name + "\nCurrent state: LaserOn?" + rm.laserActive); - System.out.println("trade body: " + "RESTRICTED"); - System.out.println("self destruct: " + "RESTRICTED"); + System.out.println("power: " + "On/Off"+ " current state: Powered On? " + r.poweredOn); + System.out.println("laser: " + "On/Off"+ " current room: "+ rm.name + " current state: Laser On" + rm.laserActive); System.out.println("Toggle the buttons to change states"); } From efd0b3d0b5a35a0044495d12532fdb194aba8683 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 20:57:07 -0400 Subject: [PATCH 92/95] Fixed typo --- Existence.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Existence.java b/Existence.java index 85044d47..f697cc29 100644 --- a/Existence.java +++ b/Existence.java @@ -110,7 +110,7 @@ public void respawnChat() { */ public void open(Item s) { if (s.canBeOpened == true) { - System.out.println("You have opened " + s + ". Inside it is " + s.getContainedItem() + " ."); + System.out.println("You have opened " + s.name + ". Inside it is a " + s.getContainedItem().name + "."); } } @@ -121,7 +121,7 @@ public void open(Item s) { */ public void open(Item s, Room r) { if (s.canBeOpened == true) { - System.out.println("You opened the " + s + " leading to the " + r + "."); + System.out.println("You opened the " + s.name + " leading to the " + r.name + "."); } } @@ -260,7 +260,7 @@ public void tradeBody(Robot r, Human h) { System.out.println("\n Detecting surrounding existences......" + "\n There are currently two existence: Robot " + r.name + " and Human" + h.name + " ." + "\n -------------------------Trading Body-------------------------" + - "\n Robo t" + r.name + " has successfully traded body with human " + h.name + " ." + "\n Robot" + r.name + " has successfully traded body with human " + h.name + " ." ); } From 6e4eb87eaba58accfd90fdab5b7232cc1dbd748b Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 20:57:30 -0400 Subject: [PATCH 93/95] Fixed typo --- Main.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Main.java b/Main.java index 526e609e..81c45111 100644 --- a/Main.java +++ b/Main.java @@ -29,7 +29,7 @@ public static void main(String[] args) { Item door = new Item("door", "'This is a door connecting bedroom to another room. I wonder where is it leading to...'", false, true, false); //Create the Bedroom - Room bedroom = new Room("Bedroom", "'This is a bedroom. I can see a bed and a teddy bear.'", false, false); + Room bedroom = new Room("Bedroom", "'This is a bedroom. I can see a bed, a teddy bear and a box.'", false, false); bedroom.addItem(bed); bedroom.addItem(teddyBear); bedroom.addItem(box); @@ -139,7 +139,7 @@ public static void main(String[] args) { // Print current health case "health": - player.getHealth(); + System.out.println(player.getHealth()); break; // Print inventory From ddc5000ccff294c9a7c19bb7f4d1aa4556408f42 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 21:11:03 -0400 Subject: [PATCH 94/95] Updated game loop --- Main.java | 381 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 300 insertions(+), 81 deletions(-) diff --git a/Main.java b/Main.java index f915bc13..81c45111 100644 --- a/Main.java +++ b/Main.java @@ -8,6 +8,16 @@ public static void main(String[] args) { // Set game status Boolean gameOn = true; + Boolean task1 = false; + Boolean task2 = false; + Boolean task3 = false; + Boolean task4 = false; + Boolean task5 = false; + Boolean task6 = false; + Boolean task7 = false; + Boolean task8 = false; + Boolean task9 = false; + Boolean task10 = false; //Create all the items needed Item bed = new Item("bed", "'This is a bed.'", false, false, false); @@ -19,7 +29,7 @@ public static void main(String[] args) { Item door = new Item("door", "'This is a door connecting bedroom to another room. I wonder where is it leading to...'", false, true, false); //Create the Bedroom - Room bedroom = new Room("Bedroom", "'This is a bedroom. I can see a bed and a teddy bear.'", false, false); + Room bedroom = new Room("Bedroom", "'This is a bedroom. I can see a bed, a teddy bear and a box.'", false, false); bedroom.addItem(bed); bedroom.addItem(teddyBear); bedroom.addItem(box); @@ -37,20 +47,21 @@ public static void main(String[] args) { // Create the player's existence Robot player = new Robot("Teddy", bedroom, true, false, false, false); + Human scientist = new Human("Teddy", lab, true, true, true, true); // Messages: String welcomeMessage = - "\n Welcome to ROBO Adventure! Get ready for your journey to discover hidden truths..."; + "\n Welcome to Teddy Bot! Get ready for your journey to discover hidden truths..."; String basicInstructions = "\n Here is the basic instruction: Type the command with any item to execute that command on that item." + "(E.g: 'open door')" + - "\n Type 'help' to see available commands at current stage, 'exit' to exit the game at any point."; + "\n Type 'help' to see available commands at current stage, 'exit' to exit the game."; String enteringMessage = "\n Now get ready for the game..." + "\n......LOADING......" + - "\n......Entering Game ROBO Adventure......" + + "\n......Entering Game Teddy Bot......" + "\n*****************" + - "\n ROBO Adventure" + + "\n Teddy Bot" + "\n*****************"; String stageOneMessage = "\n[STAGE 1]" + @@ -58,6 +69,18 @@ public static void main(String[] args) { "\n The only thing you know is that you possess a mechanical body" + "with one leg and one eye missing." + "\n 'Who am I? where am I? I should look around...'"; + String stageTwoMessage = + "\n[STAGE 2]" + + "\n In front of you is a relatively empty lab with a giant computer." + + "\n However, red laser is all over the lab, blocking your way to get to the computer." + + "\n 'The red laser looks dangerous, I need to figure out a safe to get in...'"; + String stageThreeMessage = + "\n[STAGE 3]" + + "\n Crrreeeaaak...You heard sound of door opening." + + "\n You turned your head to the direction of the sound and was surprised to see" + + "a scientist entered the lab through another door you didn't notice before." + + "\n 'Teddy???''Teddy???'" + + "[CONVERSATION TO BE ADDED]"; String cheatSheet1 = "- \"take item\" to take something and add it to your inventory.\n" + "- \"touch item\" to touch an item and see its description.\n" + @@ -71,12 +94,11 @@ public static void main(String[] args) { "- \"put down item\" to put down something.\n" + "- \"health\" to check your curent health status.\n"; String cheatSheet2 = - "- \"unlock item\" to unlock something.\n" + - "- \"click folder\" to click a folder.\n" + "- \"toggle control\" to toggle control buttons.\n"; String cheatSheet3 = - "- \"trade\" to trade bodies with another existence.\n" + + "- \"trade\" to trade bodies.\n" + "- \"electrocute\" to electrocute another existence\n" + + "- \"destruct\" to initiate the self-destruct program of a robot.\n" + "- \"fight\" to fight another existence.\n"; // Starting the game @@ -93,8 +115,8 @@ public static void main(String[] args) { String[] words = input.split(" "); if (words.length > 0) { - String command = words[0].toLowerCase(); // The first word is the command - + String command = words[0]; // The first word is the command + // Trying switch case switch(command) { @@ -117,7 +139,7 @@ public static void main(String[] args) { // Print current health case "health": - System.out.println("Your current health is: " + player.getHealth() + " /100"); + System.out.println(player.getHealth()); break; // Print inventory @@ -132,16 +154,27 @@ public static void main(String[] args) { } else if (player.stageTwo == true || player.stageThree == true) { player.lookAround(lab); } else { - System.out.println("INVALID COMMAND"); + System.out.println("[INVALID COMMAND]"); } break; - // Take items => Look for user's next word to specify the Item being taken + // fight the scientist (body occupied by the initial robot) + case "fight": + player.fight(scientist); + break; + + // electrocute the scientist + case "electrocute": + player.electrocute(scientist); + task8 = true; + break; + + // Take items -> Look for user's next word to specify the Item being taken case "take": if (words.length >= 2) { String itemName = words[1]; // The second word is the item's name - // Allow 3 items to be taken: the teddyBear, leg and eye + // Allow 3 items to be taken: the teddy bear, leg and eye if (itemName.equalsIgnoreCase("leg")) { player.take(leg); System.out.println("'Let me try to put it on...'"); @@ -151,9 +184,11 @@ public static void main(String[] args) { } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { player.take(teddyBear); } else { - System.out.println("INVALID COMMAND"); + System.out.println("[INVALID COMMAND]"); } - } + } else { + System.out.println("What do you want to take?"); + } break; // Touch things to get their descriptions @@ -161,7 +196,7 @@ public static void main(String[] args) { if (words.length >= 2) { String itemName = words[1]; // The second word is the item's name - // The player can touch: bed, teddyBear, box, leg, irisPot, eye and door + // The player can touch: bed, teddy bear, box, leg, iris pot, eye, door and computer if (itemName.equalsIgnoreCase("bed")) { player.touch(bed); } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { @@ -176,20 +211,54 @@ public static void main(String[] args) { player.touch(eye); } else if (itemName.equalsIgnoreCase("door")) { player.touch(door); + } else if (itemName.equalsIgnoreCase("computer")) { + player.touch(computer); } else { - System.out.println("INVALID COMMAND"); - } - } + System.out.println("[INVALID COMMAND]"); + } + } else { + System.out.println("What do you want to touch?"); + } break; - // Inspect items to get its description, and status + // Open items + case "open": + if (words.length >= 2) { + String itemName = words[1]; // The second word is the item's name + + // The player can open the box and the iris pot + if (itemName.equalsIgnoreCase("box")) { + player.open(box); + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.open(irisPot); + } else if (itemName.equalsIgnoreCase("door")) { + player.open(door, lab); + task3 = true; + } else if (itemName.equalsIgnoreCase("computer")) { + player.open(computer); + task5 = true; + } else if (itemName.equalsIgnoreCase("history")) { + computer.openHistory(); + task6 = true; + } else if (itemName.equalsIgnoreCase("control")) { + computer.openControlPanel(player, lab); + task7 = true; + } else { + System.out.println("[INVALID COMMAND]"); + } + } else { + System.out.println("What do you want to open?"); + } + break; + + // Inspect items to get its description and status case "inspect": if (words.length >= 2) { String itemName = words[1]; // The second word is the item's name // The player can only inspect if this attribute is true if (player.canInspect == true) { - // The player can inspect all the items: bed, teddy bear, box, leg, iris pot, eye and door + // The player can inspect all the items: bed, teddy bear, box, leg, iris pot, eye, door and computer if (itemName.equalsIgnoreCase("bed")) { player.inspect(bed); } else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { @@ -204,82 +273,232 @@ public static void main(String[] args) { player.inspect(eye); } else if (itemName.equalsIgnoreCase("door")) { player.inspect(door); + } else if (itemName.equalsIgnoreCase("computer")) { + player.inspect(computer); } else { - System.out.println("INVALID COMMAND"); + System.out.println("[INVALID COMMAND]"); } - } else { + } else if (player.canInspect == false) { System.out.println("You cannot inspect with one one eye missing!"); } - } - break; - - } - - - - // crawl to - - // walk to - - // open - - // put on - - // put down - - // unlock - - // click - - // toggle - - // trade - - // electrocute - - // fight - - // die (we should put the respawn chat here instead of inside the existence class) - - // Task 1 - - // Task 2 - - // Task 3 - - // Stage 2 - - // Task 4 - - // Task 5 + } else { + System.out.println("What do you want to inspect?"); + } + break; - // Task 6 + // Crawl to an item in a room + case "crawl" : + if (words.length > 2) { + String itemName = words[2]; // The third word is the item's name + + // The player can crawl to these fixed items: + // bedroom: (bed, box, iris pot, door), lab: (computer) + if (itemName.equalsIgnoreCase("bed")) { + player.crawlTo(bedroom, bed); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("box")) { + player.crawlTo(bedroom, box); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.crawlTo(bedroom, irisPot); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("door")) { + player.crawlTo(bedroom, door); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("computer")) { + player.crawlTo(lab, computer); + player.currentRoom = lab; + task4 = true; + } + + // The player can crawl to these transportable items: + // teddy bear + // The player can't crawl to leg and eye because they are stored inside another item + else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + + if (bedroom.itemsInRoom.contains(teddyBear)) { + player.crawlTo(bedroom, teddyBear); + player.currentRoom = bedroom; + } else if (lab.itemsInRoom.contains(teddyBear)) { + player.crawlTo(lab, teddyBear); + player.currentRoom = lab; + } else if (player.inventory.contains(teddyBear)) { + System.out.println("You can't crawl to the teddy bear because it's in your inventory!"); + } + + } - // Task 7 + // If the third word is none of the names of the items, we print out "[INVALID COMMAND]" + else { + System.out.println("[INVALID COMMAND]"); + } + + } else { + System.out.println("What do you want to crawl to?"); + } + break; + + // walk to an item in a room + case "walk": + if (words.length > 2) { + String itemName = words[2]; // The third word is the item's name + + // The player can only walk if this attribute is true + if (player.canWalk == true) { - // Stage 3 + // The player can walk to these fixed items: + // bedroom: (bed, box, iris pot, door), lab: (computer) + if (itemName.equalsIgnoreCase("bed")) { + player.walkTo(bedroom, bed); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("box")) { + player.walkTo(bedroom, box); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("iris") || itemName.equalsIgnoreCase("pot")) { + player.walkTo(bedroom, irisPot); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("door")) { + player.walkTo(bedroom, door); + player.currentRoom = bedroom; + } else if (itemName.equalsIgnoreCase("computer")) { + player.walkTo(lab, computer); + player.currentRoom = lab; + } + + // The player can walk to these transportable items: + // teddy bear + // The player can't walk to leg because it's put on and eye because it's stored inside another item + else if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + + if (bedroom.itemsInRoom.contains(teddyBear)) { + player.walkTo(bedroom, teddyBear); + player.currentRoom = bedroom; + } else if (lab.itemsInRoom.contains(teddyBear)) { + player.walkTo(lab, teddyBear); + player.currentRoom = lab; + } else if (player.inventory.contains(teddyBear)) { + System.out.println("You can't walk to the teddy bear because it's in your inventory!"); + } + + } - // Task 8 + // If the third word is none of the names of the items, we print out "[INVALID COMMAND]" + else { + System.out.println("[INVALID COMMAND]"); + } - // Task 9 + } else if (player.canWalk == false) { + System.out.println("You cannot walk with one one leg missing!"); + } + } else { + System.out.println("What do you want to walk to?"); + } + break; - // Task 10 + // put on an item or put down an item + case "put": + if (words.length > 2) { + String preposition = words[1]; // The second word is the preposition: on/down + String itemName = words[2]; // The third word is the item's name + + // If the preposition is on, we perform `putOn` + if (preposition.equalsIgnoreCase("on")) { + + // The player can put on these fixed items: + // leg and eye + if (itemName.equalsIgnoreCase("leg")) { + player.putOn(leg); + player.canWalk = true; // The player can walk after putting on the leg + task1 = true; // [Task 1] completed + } else if (itemName.equalsIgnoreCase("eye")) { + player.putOn(eye); + player.canInspect = true; // The player can inspect after putting on the eye + task2 = true; // [Task 2] completed + } else { + System.out.println("[INVALID COMMAND]"); + } + } - // Task 11 + // If the preposition is down, we perform `putDown` + if (preposition.equalsIgnoreCase("down")) { - // Task 12 + // The player can put down these transportable items: + // leg, eye, teddy bear + if (itemName.equalsIgnoreCase("teddy") || itemName.equalsIgnoreCase("bear")) { + player.putDown(teddyBear); + } else if (itemName.equalsIgnoreCase("leg")) { + player.putDown(leg); + player.canWalk = false; + } else if (itemName.equalsIgnoreCase("eye")) { + player.putDown(eye); + player.canInspect = false; + } else { + System.out.println("[INVALID COMMAND]"); + } + } - // Ending 1 (laser) + // If the preposition is neither on or down, we print out "[INVALID COMMAND]" + else { + System.out.println("[INVALID COMMAND]"); + } - // Ending 2 (power off) + } else { + System.out.println("What do you want to put on/down?"); + } + break; - // Ending 3 (self destruct) + // toggle a control button on the control panel + case "toggle": + if (words.length >= 2) { + String control = words[1]; // The second word is the control + + // The player can toggle these control items: + // power and laser + if (control.equalsIgnoreCase("power")) { + computer.togglePower(player); + } else if (control.equalsIgnoreCase("laser")) { + computer.toggleLaser(lab); + } else { + System.out.println("[INVALID COMMAND]"); + } + } else { + System.out.println("What do you want to toggle?"); + } + break; + + // trade bodies + case "trade": + player.tradeBody(player, scientist); + task9 = true; + break; - // Ending 4 (forgive) + // initiate the self-destrcuct program in the robot + case "destruct": + // If task 10 is done, can perform destruct + scientist.selfDestruct(player); + // Completed task 11 + // Print ending message + break; + } // close parenthesis for switch(command) + } // close parenthesis for if(words.length > 0) + + // When Task 1, 2, 3 are finished, enter stage 2 + if ((task1 == true) && (task2 == true) && (task3 == true)) { + player.stageOne = false; + player.stageTwo = true; + player.stageThree = false; + System.out.println(stageTwoMessage); + } - // Ending 5 (revenge) + // When Task 4, 5, 6, 7 are finished, enter stage 3 + if ((task4 == true) && (task5 == true) && (task6 == true) && (task7 == true)) { + player.stageOne = false; + player.stageTwo = false; + player.stageThree = true; } + + } scanner.close(); // close the scanner outside of the while loop - } -} + } // close parenthesis for public static void main(String[] args) +} // close parenthesis for public Class Main From 2c7d64ec96ab0dd44d53e6827d73d210e2dbf847 Mon Sep 17 00:00:00 2001 From: yunxiann Date: Tue, 29 Apr 2025 21:15:24 -0400 Subject: [PATCH 95/95] Updated to merge branch --- Computer.java | 141 ++++++++++++-------------------------------------- 1 file changed, 32 insertions(+), 109 deletions(-) diff --git a/Computer.java b/Computer.java index db235966..d44de068 100644 --- a/Computer.java +++ b/Computer.java @@ -12,42 +12,40 @@ public class Computer extends Item { */ public Computer() { super("computer", - "This is a lab computer with two folders: History and Control Panel.", + "'This is a lab computer. I should try to unlock it to see what's inside...'", false, true, false); this.locked = true; } /** Prints the history. Not completed */ public void openHistory() { - System.out.println("\nHistory: \n Today, April 13, 2005, I created the first Teddy prototype." - + "This is looking great, I'm hoping that we can be best friends!" - + "\n Today, May 15, 2005, I started building neural network for teddy." - + "\n Today, July 28, 2005, I observed that Teddy has learned basic tasks like" + System.out.println("\n=== History ==="); + System.out.println( "\n This is robotics scientist Teddy. Today is March 13, 2005, and I'm starting on building the first Teddy robot prototype." + + "I want to build Teddy robot as a functional lab assistant and emotional companion." + + "I gave him the same name as me-I'm hoping that we can be best friends!" + + "\n April 22, 2005, I finished assembling Teddy's body. He looks so cute just like my favorite teddy bear." + + "\n May 15, 2005, I started building neural network for teddy." + + "\n July 28, 2005, I observed that Teddy has learned basic tasks like" + "grabbing things and walk around." - + "\n Today, April 23, 2006, it's been a year and teddy seems to be developing intelligence." - + "\n Today, June 27, 2006, deep neural network is a good idea!" - + "\n Today, September 12, 2006, Teddy's artificial intelligence is developing fast." - + "\n Today, January 2, 2007, Teddy didn't respond when I called." - +"\n Today, January 31, 2007, Teddy is still ignoring me and now won't listen to me when I instruct him. I've run diagnostics twice. Sensors, logic units — everything checks out fine." - + "\n Today, February 14, 2007, I brought Teddy roses for Valentine's Day. He ripped them apart the moment I held them out. Popped the balloons too." - +"\n March 1, 2007, I finally asked him why. Why the coldness" - +"\n 'I want to be like you!' He shouts. 'I want to be a human and not a robot!' I try conviencing him that there is no way that could happen but he gets more and more violent" - +"\n Today, March 10, 2007, I walk into my Lab and find Teddy in my secret chamber. I'm gagged. 'I hope he has not found the red file'" - +"\n I walk into Teddy reading from what appears to be red file. Oops! My goose is cooked." - +"\n Teddy looks at me hysterically. That file contained all my notes about Teddy; how I had build him and how to make him human" - +"\n 'Why?'Teddy asks.'Why did you lie to me?' 'Listen Teddy, the only way we can make you human is if we find another human whom you can trade bodies and souls with. Possible as it may sound, who will be willing to trade bodies and souls with a robot?'" - +"\n Teddy throws the red file at me and storms out of the lab" - +"\n I am in my bedroom, updating my diary. Teddy walks in" - +"\n 'Hey Teddy!' Again he ignores my greeting. 'I'm sorry Teddy.'" - +"\n 'Sorry for what?'I'm confused. Based on his approach, this looks like the last entry I shall make on this diary." - +"\n Oh no! Dear diary, he is walking towards me; face oozing with anger. In case he knocks me out and trade bodies with me, I shall wake up eventually and get everything back. Till then goodbye" - +"\n Teddy knocks the scientist down trades the body and soul. He places Teddy on a lab bench and disassembles his leg and eyes"); - // more history to be added! - // added reasoning feature - // implemented control panals - // self-destroy - // electrocute - // trade body mechanism + + "\n March 13, 2006, Happy birthday Teddy! It's been a year and you are developing intelligence so fast." + + "\n April 30, 2006, I added electrode to Teddy so that he can help me electrocute chemical solutions." + + "\n May 25, 2006, Electrocuting function is way more powerful than I thought, I was accidently electrocuted to unconscious today. But it's not Teddy's fault, I should have been more careful." + + "\n June 16, 2006, I added a self explode device on Teddy just in case programs run out of control." + + "\n June 27, 2006, Deep neural network is enabling Teddy to have his own reasoning." + + "\n September 12, 2006, Teddy's artificial intelligence is developing fast and he began to exhibit 'emotions' like human." + + "\n October 27, 2006, 'I'm a boy named Teddy.' Teddy told me. I smiled and nodded.'You are my favorite boy.'" + + "\n January 2, 2007, Teddy didn't respond when I called." + +"\n January 31, 2007, Teddy is still ignoring me and now won't listen to me when I instruct him. I've run diagnostics twice. Sensors, logic units — everything checks out fine." + + "\n February 14, 2007, I brought Teddy roses for Valentine's Day. He ripped them apart the moment I held them out. Popped the balloons too." + +"\n March 1, 2007, I asked him why. Why the coldness? 'You lied to me! I want to be like you!' He shouts. Teddy has dicovered he is not a human." + +"\n March 10, 2007, I think Teddy has found my secret chamber. I hope he has not found the red file." + +"\n March 11, 2007, I walked into Teddy reading from what appears to be red file. My goose is cooked." + +"\n March 12, 2007, Teddy asked me about trading body with me. He must have read the red file. I refused because the technology is still not mature yet." + +"\n March 13, 2007, Happy birthday Teddy! I'm updating my diary and Teddy walks in. Again he ignores my greetin" + +"\n TEDDY2EDWA7NHTS21TO8EWFTRA27DDE92JBODY19" + +"\n March 14, 2007, This is new robotics scientist Teddy. Trading body is successful. From today, I'm the real human Teddy." + + "Possessing a human body feels different. But finally...my dream comes true." + + "I powered off robot Teddy, disassembled his robot leg and eye and put him in the bedroom."); } /** Displays the control panel with current switch states. @@ -56,26 +54,9 @@ public void openHistory() { */ public void openControlPanel(Robot r, Room rm) { System.out.println("\n=== Control Panel ==="); - System.out.println("\nReasoning: " + "On/Off" + "\nCurrent state: ReasoningOn?" + r.reasoningOn); - System.out.println("Power: " + "On/Off"+ "\nCurrent state: PoweredOn?" + r.poweredOn); - System.out.println("Memory: " + "On/Off"+ "\nCurrent state: MemoryOn?" + r.memoryOn); - System.out.println("Laser: " + "On/Off"+ "\nCurrent room: "+ rm.getName() + "\nCurrent state: LaserOn?" + rm.laserActive); - System.out.println("TradeBody: " + "RESTRICTED"); - System.out.println("SelfDestruct: " + "RESTRICTED"); - } - - - /** Toggles reasoning on/off - * @param r The robot - */ - public void toggleReasoning(Robot r) { - if (r.reasoningOn == false) { - r.reasoningOn = true; - System.out.println("\n[REASONING ON]"); - } else { - r.reasoningOn = false; - System.out.println("\n[REASONING OFF]"); - } + System.out.println("power: " + "On/Off"+ " current state: Powered On? " + r.poweredOn); + System.out.println("laser: " + "On/Off"+ " current room: "+ rm.name + " current state: Laser On" + rm.laserActive); + System.out.println("Toggle the buttons to change states"); } /** Attempts to toggle power off/on @@ -91,26 +72,6 @@ public void togglePower(Robot r) { } } - /** - * Toggles memory restoration on; cannot be turned off once on. - * @param e The Existence whose memory is being toggled - * @param s The Item being used to toggle the memory input - */ - public void toggleMemory(Robot r) { - if (r.memoryOn == false) { - r.memoryOn = true; - System.out.println("\n[MEMORIES ON] \nI'm starting to remember things...\n [ACHIEVEMENT UNLOCKED] You have unlocked the second piece of your soul."); - if(r.reasoningOn == false) { - System.out.println("\nI don't understand what these memories mean... How can I understand it?"); - } else if (r.reasoningOn == true) { - System.out.println("\nHmmm... \nThis is MY memory! I AM Teddy!\n [ACHIEVEMENT UNLOCKED] You found out about your true identity.\n Truth is: You used to be a scientist, who tried to make a robot called Teddy, but it outsmarted you and has traded bodies with you. Go get your body back!"); - } - } else { - r.memoryOn = false; - System.out.println("\n[MEMORIES OFF]"); - } - } - /** Toggles the lab’s lasers off/on * @param r The room where the lasers are */ @@ -119,48 +80,10 @@ public void toggleLaser(Room r) { r.laserActive = false; System.out.println("\n[LASER OFF]"); } else if (r.laserEquipped == true && r.laserActive == false){ + r.laserActive = true; System.out.println("\n[LASER ON]"); } else { System.out.println("\n[ACTION FAILED]-ROOM NOT EQUIPPED WITH LASER"); } } - - /** - * Attempt to trade bodies between two existences. - * Always prints restriction because no second existence present. - * @param e1 The first Existence - * @param e2 The second Existence - */ - public void tradeBody(Existence e1, Existence e2) { - System.out.println("\nYou can only trade bodies if there is at least another existence present."); - // TO be contructed!! - } - - /** - * Attempts self-destruction. Only a human operator may trigger it. - * @param operator the one pressing the button - * @param toBeDestroyed the robot body to destroy - */ - public void selfDestruct(Human operator, Robot toBeDestroyed) { - System.out.println("\nSelf-destruct sequence initiated! Boom!"); - toBeDestroyed.die(); - } - - /** - * (Overloaded) Robot tries to destroy another Robot - * @param operator the one pressing the button - * @param toBeDestroyed the one being destroyed - */ - public void selfDestruct(Robot operator, Robot toBeDestroyed) { - throw new RuntimeException("\nFAILED: A robot cannot do that to another robot."); - } - - /** - * (Overloaded)Robot tries to destroy a Human - * @param operator the one pressing the button - * @param toBeDestroyed the one being destroyed - */ - public void selfDestruct(Robot operator, Human toBeDestroyed) { - throw new RuntimeException("\nFAILED: Only a human can do this to a robot."); - } -} +} \ No newline at end of file