diff options
Diffstat (limited to 'dice-lang/src/bjc/dicelang/dice')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/CompoundDie.java | 4 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/CompoundingDie.java | 13 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/DiceBox.java | 74 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/Die.java | 2 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/DieExpression.java | 10 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/ExplodingDice.java | 18 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/FudgeDie.java | 7 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/MathDie.java | 14 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/ScalarDie.java | 5 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/SimpleDie.java | 21 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/dice/SimpleDieList.java | 17 |
11 files changed, 103 insertions, 82 deletions
diff --git a/dice-lang/src/bjc/dicelang/dice/CompoundDie.java b/dice-lang/src/bjc/dicelang/dice/CompoundDie.java index d4bb4b5..adbd102 100644 --- a/dice-lang/src/bjc/dicelang/dice/CompoundDie.java +++ b/dice-lang/src/bjc/dicelang/dice/CompoundDie.java @@ -9,8 +9,8 @@ public class CompoundDie implements Die { /*
* The dice that form this die
*/
- private Die left;
- private Die right;
+ private Die left;
+ private Die right;
/**
* Create a new compound die.
diff --git a/dice-lang/src/bjc/dicelang/dice/CompoundingDie.java b/dice-lang/src/bjc/dicelang/dice/CompoundingDie.java index 28badf4..a25696a 100644 --- a/dice-lang/src/bjc/dicelang/dice/CompoundingDie.java +++ b/dice-lang/src/bjc/dicelang/dice/CompoundingDie.java @@ -13,8 +13,8 @@ import java.util.function.Predicate; public class CompoundingDie implements Die {
private Die source;
- private Predicate<Long> compoundOn;
- private String compoundPattern;
+ private Predicate<Long> compoundOn;
+ private String compoundPattern;
/**
* Create a new compounding die with no pattern.
@@ -61,7 +61,7 @@ public class CompoundingDie implements Die { long res = source.roll();
long oldRes = res;
- while (compoundOn.test(oldRes)) {
+ while(compoundOn.test(oldRes)) {
oldRes = source.rollSingle();
res += oldRes;
@@ -78,7 +78,7 @@ public class CompoundingDie implements Die { long res = source.rollSingle();
long oldRes = res;
- while (compoundOn.test(oldRes)) {
+ while(compoundOn.test(oldRes)) {
oldRes = source.rollSingle();
res += oldRes;
@@ -89,10 +89,9 @@ public class CompoundingDie implements Die { @Override
public String toString() {
- if (compoundPattern == null) {
+ if(compoundPattern == null)
return source + "!!";
- } else {
+ else
return source + "!!" + compoundPattern;
- }
}
}
diff --git a/dice-lang/src/bjc/dicelang/dice/DiceBox.java b/dice-lang/src/bjc/dicelang/dice/DiceBox.java index 85edc77..7a7e7c4 100644 --- a/dice-lang/src/bjc/dicelang/dice/DiceBox.java +++ b/dice-lang/src/bjc/dicelang/dice/DiceBox.java @@ -21,24 +21,23 @@ public class DiceBox { /* * Only bother will valid expressions */ - if (!isValidExpression(exp)) - return null; + if(!isValidExpression(exp)) return null; - if (scalarDiePattern.matcher(exp).matches()) { + if(scalarDiePattern.matcher(exp).matches()) { /* * Parse scalar die */ Die scal = new ScalarDie(Long.parseLong(exp.substring(0, exp.indexOf('s')))); return new DieExpression(scal); - } else if (simpleDiePattern.matcher(exp).matches()) { + } else if(simpleDiePattern.matcher(exp).matches()) { /* * Parse simple die groups */ String[] dieParts = exp.split("d"); long right = Long.parseLong(dieParts[1]); - if (dieParts[0].equals("")) { + if(dieParts[0].equals("")) { /* * Handle short-form expressions. */ @@ -48,14 +47,14 @@ public class DiceBox { Die scal = new SimpleDie(Long.parseLong(dieParts[0]), right); return new DieExpression(scal); } - } else if (fudgeDiePattern.matcher(exp).matches()) { + } else if(fudgeDiePattern.matcher(exp).matches()) { /* * Parse fudge dice */ String nDice = exp.substring(0, exp.indexOf('d')); return new DieExpression(new FudgeDie(Long.parseLong(nDice))); - } else if (compoundDiePattern.matcher(exp).matches()) { + } else if(compoundDiePattern.matcher(exp).matches()) { /* * Parse compound die expressions */ @@ -65,7 +64,7 @@ public class DiceBox { DieExpression right = parseExpression(dieParts[1]); return new DieExpression(new CompoundDie(left.scalar, right.scalar)); - } else if (compoundingDiePattern.matcher(exp).matches()) { + } else if(compoundingDiePattern.matcher(exp).matches()) { /* * Parse compounding die expressions */ @@ -76,7 +75,7 @@ public class DiceBox { Die scal = new CompoundingDie(left.scalar, right, dieParts[1]); return new DieExpression(scal); - } else if (explodingDiePattern.matcher(exp).matches()) { + } else if(explodingDiePattern.matcher(exp).matches()) { /* * Parse exploding die expressions */ @@ -87,7 +86,7 @@ public class DiceBox { DieList lst = new ExplodingDice(left.scalar, right, dieParts[1], false); return new DieExpression(lst); - } else if (penetratingDiePattern.matcher(exp).matches()) { + } else if(penetratingDiePattern.matcher(exp).matches()) { /* * Parse penetrating die expressions */ @@ -98,7 +97,7 @@ public class DiceBox { DieList lst = new ExplodingDice(left.scalar, right, dieParts[1], true); return new DieExpression(lst); - } else if (diceListPattern.matcher(exp).matches()) { + } else if(diceListPattern.matcher(exp).matches()) { /* * Parse simple die lists */ @@ -128,16 +127,16 @@ public class DiceBox { * * This is just a number. */ - private static final String scalarDie = "[\\+\\-]?\\d+sd"; - private static final Pattern scalarDiePattern = Pattern.compile("\\A" + scalarDie + "\\Z"); + private static final String scalarDie = "[\\+\\-]?\\d+sd"; + private static final Pattern scalarDiePattern = Pattern.compile("\\A" + scalarDie + "\\Z"); /* * Defines a simple die. * * This is a group of one or more dice of the same size. */ - private static final String simpleDie = "(?:\\d+)?d\\d+"; - private static final Pattern simpleDiePattern = Pattern.compile("\\A" + simpleDie + "\\Z"); + private static final String simpleDie = "(?:\\d+)?d\\d+"; + private static final Pattern simpleDiePattern = Pattern.compile("\\A" + simpleDie + "\\Z"); /* * Defines a fudge die. @@ -145,16 +144,16 @@ public class DiceBox { * This is like a simple die, but all the die give -1, 0, or 1 as * results. */ - private static final String fudgeDie = "(?:\\d+)?dF"; - private static final Pattern fudgeDiePattern = Pattern.compile("\\A" + fudgeDie + "\\Z"); + private static final String fudgeDie = "(?:\\d+)?dF"; + private static final Pattern fudgeDiePattern = Pattern.compile("\\A" + fudgeDie + "\\Z"); /* * Defines a compound die. * * This is like using two d10's to simulate a d100 */ - private static final String compoundDie = simpleDie + "c(?:(?:" + simpleDie + ")|(?:\\d+))"; - private static final Pattern compoundDiePattern = Pattern.compile("\\A" + compoundDie + "\\Z"); + private static final String compoundDie = simpleDie + "c(?:(?:" + simpleDie + ")|(?:\\d+))"; + private static final Pattern compoundDiePattern = Pattern.compile("\\A" + compoundDie + "\\Z"); /* * Defines a compound group. @@ -170,8 +169,8 @@ public class DiceBox { * This is like an exploding die, but is a single die, not a group of * them. */ - private static final String compoundingDie = compoundGroup + "!!" + comparePoint; - private static final Pattern compoundingDiePattern = Pattern.compile("\\A" + compoundingDie + "\\Z"); + private static final String compoundingDie = compoundGroup + "!!" + comparePoint; + private static final Pattern compoundingDiePattern = Pattern.compile("\\A" + compoundingDie + "\\Z"); /* * Defines an exploding die. @@ -179,8 +178,8 @@ public class DiceBox { * This is a die that you reroll the component of if it meets a certain * condition. */ - private static final String explodingDie = compoundGroup + "!" + comparePoint; - private static final Pattern explodingDiePattern = Pattern.compile("\\A" + explodingDie + "\\Z"); + private static final String explodingDie = compoundGroup + "!" + comparePoint; + private static final Pattern explodingDiePattern = Pattern.compile("\\A" + explodingDie + "\\Z"); /* * Defines a penetrating die. @@ -188,16 +187,16 @@ public class DiceBox { * This is like an exploding die, but the exploded result gets a -1 * penalty. */ - private static final String penetratingDie = compoundGroup + "!" + comparePoint; - private static final Pattern penetratingDiePattern = Pattern.compile("\\A" + penetratingDie + "\\Z"); + private static final String penetratingDie = compoundGroup + "!" + comparePoint; + private static final Pattern penetratingDiePattern = Pattern.compile("\\A" + penetratingDie + "\\Z"); /* * Defines a die list. * * This is an array of dice of the specified size */ - private static final String diceList = compoundGroup + "dl" + compoundGroup; - private static final Pattern diceListPattern = Pattern.compile("\\A" + diceList + "\\Z"); + private static final String diceList = compoundGroup + "dl" + compoundGroup; + private static final Pattern diceListPattern = Pattern.compile("\\A" + diceList + "\\Z"); /** * Check if a given string is a valid die expression. @@ -208,25 +207,24 @@ public class DiceBox { * @return Whether or not the string is a valid command */ public static boolean isValidExpression(String exp) { - if (scalarDiePattern.matcher(exp).matches()) { + if(scalarDiePattern.matcher(exp).matches()) return true; - } else if (simpleDiePattern.matcher(exp).matches()) { + else if(simpleDiePattern.matcher(exp).matches()) return true; - } else if (fudgeDiePattern.matcher(exp).matches()) { + else if(fudgeDiePattern.matcher(exp).matches()) return true; - } else if (compoundDiePattern.matcher(exp).matches()) { + else if(compoundDiePattern.matcher(exp).matches()) return true; - } else if (compoundingDiePattern.matcher(exp).matches()) { + else if(compoundingDiePattern.matcher(exp).matches()) return true; - } else if (explodingDiePattern.matcher(exp).matches()) { + else if(explodingDiePattern.matcher(exp).matches()) return true; - } else if (penetratingDiePattern.matcher(exp).matches()) { + else if(penetratingDiePattern.matcher(exp).matches()) return true; - } else if (diceListPattern.matcher(exp).matches()) { + else if(diceListPattern.matcher(exp).matches()) return true; - } else { + else return false; - } } /* @@ -235,7 +233,7 @@ public class DiceBox { private static Predicate<Long> deriveCond(String patt) { long num = Long.parseLong(patt.substring(1)); - switch (patt.charAt(0)) { + switch(patt.charAt(0)) { case '<': return (roll) -> roll < num; case '=': diff --git a/dice-lang/src/bjc/dicelang/dice/Die.java b/dice-lang/src/bjc/dicelang/dice/Die.java index 0ce7d3b..630e8b9 100644 --- a/dice-lang/src/bjc/dicelang/dice/Die.java +++ b/dice-lang/src/bjc/dicelang/dice/Die.java @@ -2,7 +2,7 @@ package bjc.dicelang.dice; /**
* Represents one or more dice that produce a scalar result.
- *
+ *
* @author Ben Culkin
*/
public interface Die {
diff --git a/dice-lang/src/bjc/dicelang/dice/DieExpression.java b/dice-lang/src/bjc/dicelang/dice/DieExpression.java index 95e7dae..576660d 100644 --- a/dice-lang/src/bjc/dicelang/dice/DieExpression.java +++ b/dice-lang/src/bjc/dicelang/dice/DieExpression.java @@ -4,7 +4,7 @@ import java.util.Arrays; /**
* Represents either a die or a die list
- *
+ *
* @author Ben Culkin
*/
public class DieExpression {
@@ -16,11 +16,11 @@ public class DieExpression { /**
* The scalar value in this expression, if there is one.
*/
- public Die scalar;
+ public Die scalar;
/**
* The list value in this expression, if there is one.
*/
- public DieList list;
+ public DieList list;
/**
* Create a scalar die expression.
@@ -46,7 +46,7 @@ public class DieExpression { @Override
public String toString() {
- if (isList)
+ if(isList)
return list.toString();
else
return scalar.toString();
@@ -56,7 +56,7 @@ public class DieExpression { * Get the value of this expression as a string.
*/
public String value() {
- if (isList)
+ if(isList)
return Arrays.toString(list.roll());
else
return Long.toString(scalar.roll());
diff --git a/dice-lang/src/bjc/dicelang/dice/ExplodingDice.java b/dice-lang/src/bjc/dicelang/dice/ExplodingDice.java index eeafbd1..928ae25 100644 --- a/dice-lang/src/bjc/dicelang/dice/ExplodingDice.java +++ b/dice-lang/src/bjc/dicelang/dice/ExplodingDice.java @@ -21,9 +21,9 @@ public class ExplodingDice implements DieList { /*
* The conditions for exploding.
*/
- private Predicate<Long> explodeOn;
- private String explodePattern;
- private boolean explodePenetrates;
+ private Predicate<Long> explodeOn;
+ private String explodePattern;
+ private boolean explodePenetrates;
/**
* Create a new exploding die.
@@ -89,11 +89,12 @@ public class ExplodingDice implements DieList { List<Long> resList = new LinkedList<>();
- while (explodeOn.test(oldRes)) {
+ while(explodeOn.test(oldRes)) {
oldRes = source.rollSingle();
- if (explodePenetrates)
+ if(explodePenetrates) {
oldRes -= 1;
+ }
resList.add(oldRes);
}
@@ -101,7 +102,7 @@ public class ExplodingDice implements DieList { newRes[0] = res;
int i = 1;
- for (long rll : resList) {
+ for(long rll : resList) {
newRes[i] = rll;
i += 1;
}
@@ -111,10 +112,9 @@ public class ExplodingDice implements DieList { @Override
public String toString() {
- if (explodePattern == null) {
+ if(explodePattern == null)
return source + (explodePenetrates ? "p" : "") + "!";
- } else {
+ else
return source + (explodePenetrates ? "p" : "") + "!" + explodePattern;
- }
}
}
diff --git a/dice-lang/src/bjc/dicelang/dice/FudgeDie.java b/dice-lang/src/bjc/dicelang/dice/FudgeDie.java index 8061475..0385239 100644 --- a/dice-lang/src/bjc/dicelang/dice/FudgeDie.java +++ b/dice-lang/src/bjc/dicelang/dice/FudgeDie.java @@ -11,30 +11,35 @@ public class FudgeDie implements Die { 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;
long nDice = numDice.roll();
- for (int i = 0; i < nDice; i++) {
+ 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() {
return numDice + "dF";
}
diff --git a/dice-lang/src/bjc/dicelang/dice/MathDie.java b/dice-lang/src/bjc/dicelang/dice/MathDie.java index 2e82a6e..1d6b2fa 100644 --- a/dice-lang/src/bjc/dicelang/dice/MathDie.java +++ b/dice-lang/src/bjc/dicelang/dice/MathDie.java @@ -4,8 +4,9 @@ public class MathDie implements Die { public static enum MathOp {
ADD, SUBTRACT, MULTIPLY;
+ @Override
public String toString() {
- switch (this) {
+ switch(this) {
case ADD:
return "+";
case SUBTRACT:
@@ -20,8 +21,8 @@ public class MathDie implements Die { private MathDie.MathOp type;
- private Die left;
- private Die right;
+ private Die left;
+ private Die right;
public MathDie(MathDie.MathOp op, Die lft, Die rght) {
type = op;
@@ -30,12 +31,13 @@ public class MathDie implements Die { right = rght;
}
+ @Override
public boolean canOptimize() {
return left.canOptimize() && right.canOptimize();
}
private long performOp(long lft, long rght) {
- switch (type) {
+ switch(type) {
case ADD:
return lft + rght;
case SUBTRACT:
@@ -47,6 +49,7 @@ public class MathDie implements Die { }
}
+ @Override
public long optimize() {
long lft = left.optimize();
long rght = right.optimize();
@@ -54,6 +57,7 @@ public class MathDie implements Die { return performOp(lft, rght);
}
+ @Override
public long roll() {
long lft = left.roll();
long rght = right.roll();
@@ -61,6 +65,7 @@ public class MathDie implements Die { return performOp(lft, rght);
}
+ @Override
public long rollSingle() {
long lft = left.rollSingle();
long rght = right.rollSingle();
@@ -68,6 +73,7 @@ public class MathDie implements Die { return performOp(lft, rght);
}
+ @Override
public String toString() {
return left.toString() + " " + type.toString() + " " + right.toString();
}
diff --git a/dice-lang/src/bjc/dicelang/dice/ScalarDie.java b/dice-lang/src/bjc/dicelang/dice/ScalarDie.java index ac64d1c..b9c3eba 100644 --- a/dice-lang/src/bjc/dicelang/dice/ScalarDie.java +++ b/dice-lang/src/bjc/dicelang/dice/ScalarDie.java @@ -7,22 +7,27 @@ public class ScalarDie implements Die { val = vl;
}
+ @Override
public boolean canOptimize() {
return true;
}
+ @Override
public long optimize() {
return val;
}
+ @Override
public long roll() {
return val;
}
+ @Override
public long rollSingle() {
return val;
}
+ @Override
public String toString() {
return Long.toString(val);
}
diff --git a/dice-lang/src/bjc/dicelang/dice/SimpleDie.java b/dice-lang/src/bjc/dicelang/dice/SimpleDie.java index fc1aacd..f8dd945 100644 --- a/dice-lang/src/bjc/dicelang/dice/SimpleDie.java +++ b/dice-lang/src/bjc/dicelang/dice/SimpleDie.java @@ -1,8 +1,8 @@ package bjc.dicelang.dice;
public class SimpleDie implements Die {
- private Die numDice;
- private Die diceSize;
+ private Die numDice;
+ private Die diceSize;
public SimpleDie(long nDice, long size) {
numDice = new ScalarDie(nDice);
@@ -24,39 +24,44 @@ public class SimpleDie implements Die { diceSize = size;
}
+ @Override
public boolean canOptimize() {
- if (diceSize.canOptimize() && (diceSize.optimize() <= 1)) {
+ if(diceSize.canOptimize() && diceSize.optimize() <= 1)
return numDice.canOptimize();
- } else
+ else
return false;
}
+ @Override
public long optimize() {
long optSize = diceSize.optimize();
- if (optSize == 0)
+ if(optSize == 0)
return 0;
else
return numDice.optimize();
}
+ @Override
public long roll() {
long total = 0;
long nDice = numDice.roll();
long dSize = diceSize.roll();
- for (int i = 0; i < nDice; i++) {
- total += (Math.abs(DiceBox.rng.nextLong()) % dSize) + 1;
+ 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;
+ return Math.abs(DiceBox.rng.nextLong()) % diceSize.roll() + 1;
}
+ @Override
public String toString() {
return numDice + "d" + diceSize;
}
diff --git a/dice-lang/src/bjc/dicelang/dice/SimpleDieList.java b/dice-lang/src/bjc/dicelang/dice/SimpleDieList.java index e166949..54f8e7a 100644 --- a/dice-lang/src/bjc/dicelang/dice/SimpleDieList.java +++ b/dice-lang/src/bjc/dicelang/dice/SimpleDieList.java @@ -1,47 +1,50 @@ package bjc.dicelang.dice;
public class SimpleDieList implements DieList {
- private Die numDice;
- private Die size;
+ private Die numDice;
+ private Die size;
public SimpleDieList(Die nDice, Die sze) {
numDice = nDice;
size = sze;
}
+ @Override
public boolean canOptimize() {
- if (size.canOptimize() && size.optimize() <= 1) {
+ if(size.canOptimize() && size.optimize() <= 1)
return numDice.canOptimize();
- } else {
+ else
return false;
- }
}
+ @Override
public long[] optimize() {
int sze = (int) numDice.optimize();
long res = size.optimize();
long[] ret = new long[sze];
- for (int i = 0; i < sze; i++) {
+ for(int i = 0; i < sze; i++) {
ret[i] = res;
}
return ret;
}
+ @Override
public long[] roll() {
int num = (int) numDice.roll();
long[] ret = new long[num];
- for (int i = 0; i < num; i++) {
+ for(int i = 0; i < num; i++) {
ret[i] = size.roll();
}
return ret;
}
+ @Override
public String toString() {
return numDice.toString() + "dl" + size.toString();
}
|
