From 36e0911c6ec27707a74f0b90b1052a16374243ea Mon Sep 17 00:00:00 2001 From: bjculkin Date: Wed, 1 Mar 2017 10:13:41 -0500 Subject: Package reorganization --- dice-lang/src/bjc/dicelang/dice/ExplodingDice.java | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 dice-lang/src/bjc/dicelang/dice/ExplodingDice.java (limited to 'dice-lang/src/bjc/dicelang/dice/ExplodingDice.java') diff --git a/dice-lang/src/bjc/dicelang/dice/ExplodingDice.java b/dice-lang/src/bjc/dicelang/dice/ExplodingDice.java new file mode 100644 index 0000000..6ab9902 --- /dev/null +++ b/dice-lang/src/bjc/dicelang/dice/ExplodingDice.java @@ -0,0 +1,70 @@ +package bjc.dicelang.dice; + +import java.util.LinkedList; +import java.util.List; +import java.util.function.Predicate; + +public class ExplodingDice implements DieList { + private Die source; + + private Predicate explodeOn; + private String explodePattern; + private boolean explodePenetrates; + + public ExplodingDice(Die src, Predicate explode) { + this(src, explode, null, false); + } + + public ExplodingDice(Die src, Predicate explode, boolean penetrate) { + this(src, explode, null, penetrate); + } + + public ExplodingDice(Die src, Predicate explode, String patt, + boolean penetrate) { + source = src; + explodeOn = explode; + explodePattern = patt; + explodePenetrates = penetrate; + } + + public boolean canOptimize() { + return false; + } + + public long[] optimize() { + return new long[0]; + } + + public long[] roll() { + long res = source.roll(); + long oldRes = res; + + List resList = new LinkedList<>(); + + while(explodeOn.test(oldRes)) { + oldRes = source.rollSingle(); + + if(explodePenetrates) oldRes -= 1; + resList.add(oldRes); + } + + long[] newRes = new long[resList.size() + 1]; + newRes[0] = res; + + int i = 1; + for(long rll : resList) { + newRes[i] = rll; + i += 1; + } + + return newRes; + } + + public String toString() { + if(explodePattern == null) { + return source + (explodePenetrates ? "p" : "") + "!"; + } else { + return source + (explodePenetrates ? "p" : "") + "!" + explodePattern; + } + } +} \ No newline at end of file -- cgit v1.2.3