summaryrefslogtreecommitdiff
path: root/base/src/bjc/dicelang/dice/SimpleDie.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/SimpleDie.java
parentf028ea6dc555fc5192a96b00b8e96e90dbf6de55 (diff)
Start switch to maven modules
Diffstat (limited to 'base/src/bjc/dicelang/dice/SimpleDie.java')
-rw-r--r--base/src/bjc/dicelang/dice/SimpleDie.java119
1 files changed, 119 insertions, 0 deletions
diff --git a/base/src/bjc/dicelang/dice/SimpleDie.java b/base/src/bjc/dicelang/dice/SimpleDie.java
new file mode 100644
index 0000000..6cae423
--- /dev/null
+++ b/base/src/bjc/dicelang/dice/SimpleDie.java
@@ -0,0 +1,119 @@
+package bjc.dicelang.dice;
+
+/**
+ * A simple group of dice.
+ *
+ * @author EVE
+ *
+ */
+public class SimpleDie implements Die {
+ /* The number of dice to roll. */
+ private final Die numDice;
+ /*
+ * The size of each dice to roll.
+ *
+ * Rolled once per role, not once for each dice rolled.
+ *
+ * @NOTE
+ * Would having some way to roll it once for each dice rolled be
+ * useful in any sort of case?
+ */
+ private final Die diceSize;
+
+ /**
+ * Create a new dice group.
+ *
+ * @param nDice
+ * The number of dice.
+ *
+ * @param size
+ * The size of the dice.
+ */
+ public SimpleDie(final long nDice, final long size) {
+ this(new ScalarDie(nDice), new ScalarDie(size));
+ }
+
+ /**
+ * Create a new dice group.
+ *
+ * @param nDice
+ * The number of dice.
+ *
+ * @param size
+ * The size of the dice.
+ */
+ public SimpleDie(final Die nDice, final long size) {
+ this(nDice, new ScalarDie(size));
+ }
+
+ /**
+ * Create a new dice group.
+ *
+ * @param nDice
+ * The number of dice.
+ *
+ * @param size
+ * The size of the dice.
+ */
+ public SimpleDie(final long nDice, final Die size) {
+ this(new ScalarDie(nDice), size);
+ }
+
+ /**
+ * Create a new dice group.
+ *
+ * @param nDice
+ * The number of dice.
+ *
+ * @param size
+ * The size of the dice.
+ */
+ public SimpleDie(final Die nDice, final Die size) {
+ numDice = nDice;
+ diceSize = size;
+ }
+
+ @Override
+ public boolean canOptimize() {
+ if (diceSize.canOptimize() && diceSize.optimize() <= 1) {
+ return numDice.canOptimize();
+ }
+
+ return false;
+ }
+
+ @Override
+ public long optimize() {
+ final long optSize = diceSize.optimize();
+
+ if (optSize == 0) {
+ return 0;
+ }
+
+ return numDice.optimize();
+ }
+
+ @Override
+ public long roll() {
+ long total = 0;
+
+ final long nDice = numDice.roll();
+ final long dSize = diceSize.roll();
+
+ for (int i = 0; i < nDice; i++) {
+ total += Math.abs(DiceBox.rng.nextLong()) % dSize + 1;
+ }
+
+ return total;
+ }
+
+ @Override
+ public long rollSingle() {
+ return Math.abs(DiceBox.rng.nextLong()) % diceSize.roll() + 1;
+ }
+
+ @Override
+ public String toString() {
+ return numDice + "d" + diceSize;
+ }
+}