From 3ddd062d60d621971af59b480ba70e8bf9e705f1 Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Sat, 21 Nov 2020 18:04:20 -0500 Subject: Rudimentary CLI for new die implementation --- .../bjc/dicelang/neodice/commands/RollCommand.java | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 dice/src/example/java/bjc/dicelang/neodice/commands/RollCommand.java (limited to 'dice/src/example/java/bjc/dicelang/neodice/commands/RollCommand.java') diff --git a/dice/src/example/java/bjc/dicelang/neodice/commands/RollCommand.java b/dice/src/example/java/bjc/dicelang/neodice/commands/RollCommand.java new file mode 100644 index 0000000..eb7b597 --- /dev/null +++ b/dice/src/example/java/bjc/dicelang/neodice/commands/RollCommand.java @@ -0,0 +1,43 @@ +package bjc.dicelang.neodice.commands; + +import static bjc.dicelang.neodice.statements.StatementValue.Type.*; + +import java.util.*; + +import bjc.dicelang.neodice.*; +import bjc.dicelang.neodice.statements.*; + +public class RollCommand implements Command { + @Override + public StatementValue execute(Iterator words, DieBoxCLI state) { + if (!words.hasNext()) { + throw new DieBoxException("Roll must be provided an argument to roll"); + } else { + StatementValue toRoll = state.runStatement(words); + + if (toRoll.type == DIE) { + DieStatementValue die = (DieStatementValue) toRoll; + + return new IntegerStatementValue(die.value.roll(state.rng)); + } else if (toRoll.type == DIEPOOL) { + DiePoolStatementValue pool = (DiePoolStatementValue) toRoll; + + return new IntArrayStatementValue(pool.value.roll(state.rng)); + } else { + throw new DieBoxException("Roll was provided something that wasn't rollable (only DIE and DIEPOOL objects are rollable) (was %s, of type %s)", + toRoll, toRoll.type); + } + } + } + + @Override + public String shortHelp() { + return "rolls a die-like object"; + } + + @Override + public String longHelp() { + return "Rolls a die-like object, and yields the result of rolling it." + + " What is returned can differ based on what is rolled"; + } +} \ No newline at end of file -- cgit v1.2.3