diff --git a/src/main/java/com/github/dtschust/zork/repl/Action.java b/src/main/java/com/github/dtschust/zork/repl/Action.java index 2751b62..4da1d62 100644 --- a/src/main/java/com/github/dtschust/zork/repl/Action.java +++ b/src/main/java/com/github/dtschust/zork/repl/Action.java @@ -15,5 +15,5 @@ public interface Action { return Integer.MAX_VALUE; } - void run(final ZorkGame game, final List arguments); + boolean run(final ZorkGame game, final List arguments); } diff --git a/src/main/java/com/github/dtschust/zork/repl/ActionDispatcher.java b/src/main/java/com/github/dtschust/zork/repl/ActionDispatcher.java index e3d574d..3a485a3 100644 --- a/src/main/java/com/github/dtschust/zork/repl/ActionDispatcher.java +++ b/src/main/java/com/github/dtschust/zork/repl/ActionDispatcher.java @@ -44,10 +44,8 @@ public class ActionDispatcher { final List arguments = Arrays.asList(input.split(" ")); final Optional action = findAction(arguments); - if (action.isEmpty()) { + if (action.isEmpty() || !action.get().run(game, arguments)) { System.out.println("Error"); - } else { - action.get().run(game, arguments); } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/AddAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/AddAction.java index 2e3a3e7..24ccc30 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/AddAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/AddAction.java @@ -24,7 +24,7 @@ public class AddAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String object = arguments.get(1); final String destination = arguments.get(3); @@ -35,7 +35,8 @@ public class AddAction implements Action { ((HasSetOfCollectable) tempObject).getSetFromType(objType).add(object); game.put(destType, tempObject); } catch (Exception e) { - System.out.println("Error"); + return false; } + return true; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/AttackAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/AttackAction.java index ba0e6c5..1d19454 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/AttackAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/AttackAction.java @@ -23,7 +23,7 @@ public class AttackAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String tempString = arguments.get(1); final String weapon = arguments.get(3); @@ -32,10 +32,9 @@ public class AttackAction implements Action { if (tempCreature != null && game.inventory.contains(weapon) && tempCreature.isAttackSuccessful(game, weapon)) { System.out.println("You assault the " + tempString + " with the " + weapon + "."); tempCreature.printAndExecuteActions(game); - return; + return true; } } - - System.out.println("Error"); + return false; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/DeleteAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/DeleteAction.java index fe9f95e..904f6e2 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/DeleteAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/DeleteAction.java @@ -37,7 +37,7 @@ public class DeleteAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String object = arguments.get(1); switch (game.getTypeFromLookup(object)) { @@ -58,5 +58,6 @@ public class DeleteAction implements Action { deleteElementFromSpace(game, ROOM, CREATURE, object); break; } + return true; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/DropItemAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/DropItemAction.java index 081c948..4719738 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/DropItemAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/DropItemAction.java @@ -20,7 +20,7 @@ public class DropItemAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String what = arguments.get(1); if (game.inventory.contains(what)) { @@ -30,7 +30,8 @@ public class DropItemAction implements Action { game.inventory.remove(what); System.out.println(what + " dropped."); } else { - System.out.println("Error"); + return false; } + return true; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/GameOverAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/GameOverAction.java index 294dd5e..87e1d59 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/GameOverAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/GameOverAction.java @@ -20,8 +20,9 @@ public class GameOverAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { System.out.println("Victory!"); game.setGameOver(); + return true; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/InventoryAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/InventoryAction.java index 34fc1b2..3521ad3 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/InventoryAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/InventoryAction.java @@ -12,12 +12,13 @@ public class InventoryAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { if (game.inventory.isEmpty()) { System.out.println("Inventory: empty"); } else { final String output = "Inventory: " + String.join(", ", game.inventory); System.out.println(output); } + return true; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/MoveAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/MoveAction.java index 98130c6..831ea93 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/MoveAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/MoveAction.java @@ -25,7 +25,7 @@ public class MoveAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { // we are guaranteed to have a valid short direction name by matchesInput final ZorkDirection direction = ZorkDirection.fromShort(arguments.get(0)).orElseThrow(() -> new IllegalStateException("unreachable")); @@ -37,5 +37,6 @@ public class MoveAction implements Action { } else { System.out.println("Can't go that way."); } + return true; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/OpenAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/OpenAction.java index ebf7c36..8e5537c 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/OpenAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/OpenAction.java @@ -15,7 +15,7 @@ public class OpenAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String what = arguments.get(1); if (what.equals("exit")) { @@ -23,7 +23,7 @@ public class OpenAction implements Action { System.out.println("Game Over"); game.setGameOver(); } else { - System.out.println("Error"); + return false; } } else { ZorkContainer tempContainer; @@ -32,8 +32,9 @@ public class OpenAction implements Action { tempContainer.open(); System.out.println(tempContainer.getContents()); } else { - System.out.println("Error"); + return false; } } + return true; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/PutAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/PutAction.java index 309646a..025e632 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/PutAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/PutAction.java @@ -20,7 +20,7 @@ public class PutAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String what = arguments.get(1); final String destination = arguments.get(3); @@ -30,9 +30,9 @@ public class PutAction implements Action { tempContainer.addItem(what); game.inventory.remove(what); System.out.println("Item " + what + " added to " + destination + "."); - return; + return true; } } - System.out.println("Error"); + return false; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/ReadAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/ReadAction.java index 04982fc..c736c6c 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/ReadAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/ReadAction.java @@ -20,14 +20,14 @@ public class ReadAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String what = arguments.get(1); if (game.inventory.contains(what)) { ZorkItem tempItem = (ZorkItem) game.get(ITEM, what); System.out.println(tempItem.getWriting()); - } else { - System.out.println("Error"); + return true; } + return false; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/TakeAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/TakeAction.java index 6b09ce4..c1ab8b1 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/TakeAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/TakeAction.java @@ -22,7 +22,7 @@ public class TakeAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String tempString = arguments.get(1); if ((game.getCurrentRoom()).getItem().contains(tempString)) { @@ -31,6 +31,7 @@ public class TakeAction implements Action { tempRoom.getItem().remove(tempString); game.put(ROOM, tempRoom); System.out.println("Item " + tempString + " added to inventory."); + return true; } else { /* Search all containers in the current room for the item! */ for (String key : game.getCurrentRoom().getContainer()) { @@ -40,10 +41,10 @@ public class TakeAction implements Action { tempContainer.removeItem(tempString); game.put(CONTAINER, tempContainer); System.out.println("Item " + tempString + " added to inventory."); - return; + return true; } } - System.out.println("Error"); + return false; } } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/TurnOnAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/TurnOnAction.java index 7869399..f5f32da 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/TurnOnAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/TurnOnAction.java @@ -23,7 +23,7 @@ public class TurnOnAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String what = arguments.get(2); if (game.inventory.contains(what)) { @@ -31,9 +31,9 @@ public class TurnOnAction implements Action { System.out.println("You activate the " + what + "."); if (tempItem != null) { tempItem.printAndExecuteActions(game); - return; + return true; } } - System.out.println("Error"); + return false; } } diff --git a/src/main/java/com/github/dtschust/zork/repl/actions/UpdateAction.java b/src/main/java/com/github/dtschust/zork/repl/actions/UpdateAction.java index 201fb24..baec12c 100644 --- a/src/main/java/com/github/dtschust/zork/repl/actions/UpdateAction.java +++ b/src/main/java/com/github/dtschust/zork/repl/actions/UpdateAction.java @@ -22,7 +22,7 @@ public class UpdateAction implements Action { } @Override - public void run(ZorkGame game, List arguments) { + public boolean run(ZorkGame game, List arguments) { final String object = arguments.get(1); final String newStatus = arguments.get(3); @@ -30,5 +30,6 @@ public class UpdateAction implements Action { ZorkObject tempObject = collection.get(object); tempObject.updateStatus(newStatus); collection.put(tempObject); + return true; } }