diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-11 09:10:28 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-11 09:10:28 -0500 |
| commit | 517b89b4aa936be1457bb26290b23369cbe4a9f1 (patch) | |
| tree | 3d5a4add0930a956cd16b318f52c8e9be893ad30 | |
| parent | 1cf218ba93396c7be7f4b3ee25d8008a41777273 (diff) | |
More dice work
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/DiceBox.java | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/DiceBox.java b/dice-lang/src/bjc/dicelang/v2/DiceBox.java index 86bce4d..ac452e4 100644 --- a/dice-lang/src/bjc/dicelang/v2/DiceBox.java +++ b/dice-lang/src/bjc/dicelang/v2/DiceBox.java @@ -1,6 +1,7 @@ package bjc.dicelang.v2; import java.util.Random; +import java.util.regex.Pattern; public class DiceBox { private static final Random rng = new Random(); @@ -69,12 +70,34 @@ public class DiceBox { } } + private static class CompoundDie implements Die { + private Die left; + private Die right; + + public CompoundDie(Die lft, Die rght) { + left = lft; + right = rght; + } + + public boolean canOptimize() { + return left.canOptimize() && right.canOptimize(); + } + + public int optimize() { + return left.optimize() + "" + right.optimize(); + } + + public int roll() { + return Integer.parseInt(left.roll() + "" + right.roll()); + } + } + public static Die parseExpression(String exp) { if(!isValidExpression(exp)) return null; - if(exp.matches(scalarDiePattern)) { + if(scalarDiePattern.matcher(exp).matches()) { return new ScalarDie(Integer.parseInt(exp)); - } else if(exp.matches(simpleDiePattern)) { + } else if(simpleDiePattern.matcher(exp).matches()) { String[] dieParts = exp.split("d"); if(dieParts[0].equals("")) { @@ -82,18 +105,28 @@ public class DiceBox { } else { return new SimpleDie(Integer.parseInt(dieParts[0]), Integer.parseInt(dieParts[1])); } + } else if(compoundDiePattern.matcher(exp).matches()) { + String[] dieParts = exp.split("c"); + + return new CompoundDie(parseExpression(dieParts[0]), parseExpression(dieParts[1])); } return null; } - private static final String scalarDiePattern = "[\\+\\-]?\\d+"; - private static final String simpleDiePattern = "(?:\\d+)?d\\d+"; + private static final Pattern scalarDiePattern = Pattern.compile( + "[\\+\\-]?\\d+"); + private static final Pattern simpleDiePattern = Pattern.compile( + "(?:\\d+)?d\\d+"); + private static final Pattern compoundDiePattern = Pattern.compile( + simpleDiePattern + "c(?:(?:" + simpleDiePattern + ")|(?:\\d+))"; public static boolean isValidExpression(String exp) { - if(exp.matches(scalarDiePattern)) { + if(scalarDiePattern.matcher(exp).matches()) { + return true; + } else if(simpleDiePattern.matcher(exp).matches()) { return true; - } else if(exp.matches(simpleDiePattern)) { + } else if (compoundDiePattern.matcher(exp).matches()) { return true; } else { return false; |
