diff --git a/src/main/java/com/github/dtschust/zork/Zork.java b/src/main/java/com/github/dtschust/zork/Zork.java index d27ab3f..bcb7465 100644 --- a/src/main/java/com/github/dtschust/zork/Zork.java +++ b/src/main/java/com/github/dtschust/zork/Zork.java @@ -61,7 +61,6 @@ public class Zork { } - /* I love how basic java main functions are sometimes.*/ public static void main(String[] args) { if (args.length != 1) { diff --git a/src/main/java/com/github/dtschust/zork/ZorkCommand.java b/src/main/java/com/github/dtschust/zork/ZorkCommand.java index c092c2a..9c15394 100644 --- a/src/main/java/com/github/dtschust/zork/ZorkCommand.java +++ b/src/main/java/com/github/dtschust/zork/ZorkCommand.java @@ -1,13 +1,14 @@ package com.github.dtschust.zork; -/* Special Command condition*/ -public class ZorkCommand extends ZorkCondition { +/* Special Command condition */ +public class ZorkCommand implements ZorkEvaluatable { public final String command; public ZorkCommand(String command) { this.command = command; } + @Override public boolean evaluate(Zork zork) { return command.equals(zork.userInput); } diff --git a/src/main/java/com/github/dtschust/zork/ZorkCondition.java b/src/main/java/com/github/dtschust/zork/ZorkCondition.java index e9fba56..1a1fcac 100644 --- a/src/main/java/com/github/dtschust/zork/ZorkCondition.java +++ b/src/main/java/com/github/dtschust/zork/ZorkCondition.java @@ -1,8 +1,10 @@ package com.github.dtschust.zork; /* Generic condition*/ -public abstract class ZorkCondition { - public String object; +public abstract class ZorkCondition implements ZorkEvaluatable { + public final String object; - public abstract boolean evaluate(Zork zork); + protected ZorkCondition(String object) { + this.object = object; + } } diff --git a/src/main/java/com/github/dtschust/zork/ZorkConditionHas.java b/src/main/java/com/github/dtschust/zork/ZorkConditionHas.java index cad4e45..161aa11 100644 --- a/src/main/java/com/github/dtschust/zork/ZorkConditionHas.java +++ b/src/main/java/com/github/dtschust/zork/ZorkConditionHas.java @@ -2,9 +2,16 @@ package com.github.dtschust.zork; /* Has conditions*/ public class ZorkConditionHas extends ZorkCondition { - public String has; - public String owner; + private final String has; + private final String owner; + public ZorkConditionHas(String has, String object, String owner) { + super(object); + this.has = has; + this.owner = owner; + } + + @Override public boolean evaluate(Zork zork) { /*Inventory is a special case as it isn't the name of any object in the game, check for it specifically*/ if (owner.equals("inventory")) { diff --git a/src/main/java/com/github/dtschust/zork/ZorkConditionStatus.java b/src/main/java/com/github/dtschust/zork/ZorkConditionStatus.java index 48d66c2..033af71 100644 --- a/src/main/java/com/github/dtschust/zork/ZorkConditionStatus.java +++ b/src/main/java/com/github/dtschust/zork/ZorkConditionStatus.java @@ -2,8 +2,14 @@ package com.github.dtschust.zork; /* Status conditions*/ public class ZorkConditionStatus extends ZorkCondition { - public String status; + private final String status; + public ZorkConditionStatus(String status, String object) { + super(object); + this.status = status; + } + + @Override public boolean evaluate(Zork zork) { ZorkObject tested = zork.game.Objects.get(object); return tested != null && tested.status.equals(status); diff --git a/src/main/java/com/github/dtschust/zork/ZorkEvaluatable.java b/src/main/java/com/github/dtschust/zork/ZorkEvaluatable.java new file mode 100644 index 0000000..f9aba99 --- /dev/null +++ b/src/main/java/com/github/dtschust/zork/ZorkEvaluatable.java @@ -0,0 +1,5 @@ +package com.github.dtschust.zork; + +public interface ZorkEvaluatable { + boolean evaluate(Zork zork); +} diff --git a/src/main/java/com/github/dtschust/zork/ZorkTrigger.java b/src/main/java/com/github/dtschust/zork/ZorkTrigger.java index a021cb8..31dd8d3 100644 --- a/src/main/java/com/github/dtschust/zork/ZorkTrigger.java +++ b/src/main/java/com/github/dtschust/zork/ZorkTrigger.java @@ -4,14 +4,14 @@ import java.util.ArrayList; /*Trigger*/ public class ZorkTrigger { - public ArrayList conditions = new ArrayList<>(); + public ArrayList conditions = new ArrayList<>(); public ArrayList print = new ArrayList<>(); public ArrayList action = new ArrayList<>(); public String type = "single"; /*By default, single*/ public boolean hasCommand = false; public boolean evaluate(Zork zork) { - for (ZorkCondition condition : conditions) { + for (ZorkEvaluatable condition : conditions) { if (!condition.evaluate(zork)) { return false; } diff --git a/src/main/java/com/github/dtschust/zork/parser/ZorkReader.java b/src/main/java/com/github/dtschust/zork/parser/ZorkReader.java index 987dfae..f975c5f 100644 --- a/src/main/java/com/github/dtschust/zork/parser/ZorkReader.java +++ b/src/main/java/com/github/dtschust/zork/parser/ZorkReader.java @@ -2,10 +2,7 @@ package com.github.dtschust.zork.parser; import com.github.dtschust.zork.*; import org.w3c.dom.CharacterData; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; +import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -19,7 +16,17 @@ public class ZorkReader { this.filename = filename; } - public ZorkGame build(){ + /* Get a string from an element (XML parsing stuff)*/ + public static String getString(Element e) { + Node child = e.getFirstChild(); + if (child instanceof CharacterData) { + CharacterData cd = (CharacterData) child; + return cd.getData(); + } + return "?"; + } + + public ZorkGame build() { int j, k, l; ZorkGame data = new ZorkGame(); @@ -100,18 +107,19 @@ public class ZorkReader { NodeList object = condition.getElementsByTagName("object"); NodeList has = condition.getElementsByTagName("has"); if (has.getLength() > 0) { - ZorkConditionHas tempConditionHas = new ZorkConditionHas(); - tempConditionHas.has = getString((Element) has.item(0)); - tempConditionHas.object = getString((Element) object.item(0)); NodeList owner = condition.getElementsByTagName("owner"); - tempConditionHas.owner = getString((Element) owner.item(0)); + ZorkConditionHas tempConditionHas = new ZorkConditionHas( + getString((Element) has.item(0)), + getString((Element) object.item(0)), + getString((Element) owner.item(0)) + ); tempTrigger.conditions.add(tempConditionHas); - } else { - ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus(); - tempConditionStatus.object = getString((Element) object.item(0)); NodeList sstatus = condition.getElementsByTagName("status"); - tempConditionStatus.status = getString((Element) sstatus.item(0)); + ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus( + getString((Element) sstatus.item(0)), + getString((Element) object.item(0)) + ); tempTrigger.conditions.add(tempConditionStatus); } @@ -211,18 +219,18 @@ public class ZorkReader { NodeList object = condition.getElementsByTagName("object"); NodeList has = condition.getElementsByTagName("has"); if (has.getLength() > 0) { - ZorkConditionHas tempConditionHas = new ZorkConditionHas(); - tempConditionHas.has = getString((Element) has.item(0)); - tempConditionHas.object = getString((Element) object.item(0)); NodeList owner = condition.getElementsByTagName("owner"); - tempConditionHas.owner = getString((Element) owner.item(0)); + ZorkConditionHas tempConditionHas = new ZorkConditionHas( + getString((Element) has.item(0)), + getString((Element) object.item(0)), + getString((Element) owner.item(0))); tempTrigger.conditions.add(tempConditionHas); - } else { - ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus(); - tempConditionStatus.object = getString((Element) object.item(0)); NodeList sstatus = condition.getElementsByTagName("status"); - tempConditionStatus.status = getString((Element) sstatus.item(0)); + ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus( + getString((Element) sstatus.item(0)), + getString((Element) object.item(0)) + ); tempTrigger.conditions.add(tempConditionStatus); } @@ -305,18 +313,19 @@ public class ZorkReader { NodeList object = condition.getElementsByTagName("object"); NodeList has = condition.getElementsByTagName("has"); if (has.getLength() > 0) { - ZorkConditionHas tempConditionHas = new ZorkConditionHas(); - tempConditionHas.has = getString((Element) has.item(0)); - tempConditionHas.object = getString((Element) object.item(0)); NodeList owner = condition.getElementsByTagName("owner"); - tempConditionHas.owner = getString((Element) owner.item(0)); + ZorkConditionHas tempConditionHas = new ZorkConditionHas( + getString((Element) has.item(0)), + getString((Element) object.item(0)), + getString((Element) owner.item(0)) + ); tempTrigger.conditions.add(tempConditionHas); - } else { - ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus(); - tempConditionStatus.object = getString((Element) object.item(0)); NodeList sstatus = condition.getElementsByTagName("status"); - tempConditionStatus.status = getString((Element) sstatus.item(0)); + ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus( + getString((Element) sstatus.item(0)), + getString((Element) object.item(0)) + ); tempTrigger.conditions.add(tempConditionStatus); } @@ -380,18 +389,18 @@ public class ZorkReader { NodeList object = condition.getElementsByTagName("object"); NodeList has = condition.getElementsByTagName("has"); if (has.getLength() > 0) { - ZorkConditionHas tempConditionHas = new ZorkConditionHas(); - tempConditionHas.has = getString((Element) has.item(0)); - tempConditionHas.object = getString((Element) object.item(0)); NodeList owner = condition.getElementsByTagName("owner"); - tempConditionHas.owner = getString((Element) owner.item(0)); + ZorkConditionHas tempConditionHas = new ZorkConditionHas( + getString((Element) has.item(0)), + getString((Element) object.item(0)), + getString((Element) owner.item(0))); tempCreature.conditions.add(tempConditionHas); - } else { - ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus(); - tempConditionStatus.object = getString((Element) object.item(0)); NodeList sstatus = condition.getElementsByTagName("status"); - tempConditionStatus.status = getString((Element) sstatus.item(0)); + ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus( + getString((Element) sstatus.item(0)), + getString((Element) object.item(0)) + ); tempCreature.conditions.add(tempConditionStatus); } @@ -406,7 +415,6 @@ public class ZorkReader { Element action = (Element) actions.item(l); tempCreature.action.add(getString(action)); } - } NodeList triggers = element.getElementsByTagName("trigger"); @@ -426,18 +434,18 @@ public class ZorkReader { NodeList object = condition.getElementsByTagName("object"); NodeList has = condition.getElementsByTagName("has"); if (has.getLength() > 0) { - ZorkConditionHas tempConditionHas = new ZorkConditionHas(); - tempConditionHas.has = getString((Element) has.item(0)); - tempConditionHas.object = getString((Element) object.item(0)); NodeList owner = condition.getElementsByTagName("owner"); - tempConditionHas.owner = getString((Element) owner.item(0)); + ZorkConditionHas tempConditionHas = new ZorkConditionHas( + getString((Element) has.item(0)), + getString((Element) object.item(0)), + getString((Element) owner.item(0))); tempTrigger.conditions.add(tempConditionHas); - } else { - ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus(); - tempConditionStatus.object = getString((Element) object.item(0)); NodeList sstatus = condition.getElementsByTagName("status"); - tempConditionStatus.status = getString((Element) sstatus.item(0)); + ZorkConditionStatus tempConditionStatus = new ZorkConditionStatus( + getString((Element) sstatus.item(0)), + getString((Element) object.item(0)) + ); tempTrigger.conditions.add(tempConditionStatus); } @@ -479,15 +487,4 @@ public class ZorkReader { return data; } - - /* Get a string from an element (XML parsing stuff)*/ - public static String getString(Element e) { - Node child = e.getFirstChild(); - if (child instanceof CharacterData) { - CharacterData cd = (CharacterData) child; - return cd.getData(); - } - return "?"; - } - }