summaryrefslogtreecommitdiff
path: root/base/src/bjc/dicelang/dice/FudgeDie.java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2017-10-25 12:10:14 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2017-10-25 12:10:14 -0300
commit7bda9de511a5642efb297eae98c6ea7c42b27754 (patch)
treedff1aa772b9ac088c5bd07b8d10d944cbff89f96 /base/src/bjc/dicelang/dice/FudgeDie.java
parentf028ea6dc555fc5192a96b00b8e96e90dbf6de55 (diff)
Start switch to maven modules
Diffstat (limited to 'base/src/bjc/dicelang/dice/FudgeDie.java')
-rw-r--r--base/src/bjc/dicelang/dice/FudgeDie.java67
1 files changed, 67 insertions, 0 deletions
diff --git a/base/src/bjc/dicelang/dice/FudgeDie.java b/base/src/bjc/dicelang/dice/FudgeDie.java
new file mode 100644
index 0000000..23951b2
--- /dev/null
+++ b/base/src/bjc/dicelang/dice/FudgeDie.java
@@ -0,0 +1,67 @@
+package bjc.dicelang.dice;
+
+/**
+ * A fudge die, one that has -1, 0 and 1 as its sides.
+ *
+ * @author EVE
+ *
+ */
+public class FudgeDie implements Die {
+ /* The number of dice to roll. */
+ private final Die numDice;
+
+ /**
+ * Create a new fudge die.
+ *
+ * @param nDice
+ * The number of dice to roll.
+ */
+ public FudgeDie(final long nDice) {
+ numDice = new ScalarDie(nDice);
+ }
+
+ /**
+ * Create a new fudge die.
+ *
+ * @param nDice
+ * The number of dice to roll.
+ */
+ public FudgeDie(final Die nDice) {
+ numDice = nDice;
+ }
+
+ @Override
+ public boolean canOptimize() {
+ return numDice.canOptimize() && numDice.optimize() == 0;
+ }
+
+ @Override
+ public long optimize() {
+ return 0;
+ }
+
+ @Override
+ public long roll() {
+ long res = 0;
+
+ final long nDice = numDice.roll();
+
+ for (int i = 0; i < nDice; i++) {
+ res += rollSingle();
+ }
+
+ return res;
+ }
+
+ @Override
+ public long rollSingle() {
+ return DiceBox.rng.nextInt(3) - 1;
+ }
+
+ @Override
+ public String toString() {
+ String dieString = numDice.toString();
+
+ return String.format("%sdF", dieString);
+ }
+}