From e7413128ff4e376997de6e94e4bea5eca14811ef Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Thu, 27 Oct 2016 21:56:18 -0400 Subject: Moved examples --- dice-lang/src/bjc/dicelang/CompoundDice.java | 100 +++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 dice-lang/src/bjc/dicelang/CompoundDice.java (limited to 'dice-lang/src/bjc/dicelang/CompoundDice.java') diff --git a/dice-lang/src/bjc/dicelang/CompoundDice.java b/dice-lang/src/bjc/dicelang/CompoundDice.java new file mode 100644 index 0000000..704e4cd --- /dev/null +++ b/dice-lang/src/bjc/dicelang/CompoundDice.java @@ -0,0 +1,100 @@ +package bjc.dicelang; + +/** + * Implements a "compound dice" + * + * To explain, a compound dice is something like a d100 composed from two + * d10s instead of a hundred sided die. + * + * @author ben + * + */ +public class CompoundDice implements IDiceExpression { + /** + * The left die of the expression + */ + private IDiceExpression leftDice; + + /** + * The right die of the expression + */ + private IDiceExpression rightDice; + + /** + * Create a new compound dice using the specified dice + * + * @param left + * The die to use on the left + * @param right + * The die to use on the right + */ + public CompoundDice(IDiceExpression left, IDiceExpression right) { + this.leftDice = left; + this.rightDice = right; + } + + /** + * Create a new compound dice from two dice strings + * + * @param leftExp + * The left side dice as a string + * @param rightExp + * The right side dice as a string + */ + public CompoundDice(String leftExp, String rightExp) { + this(ComplexDice.fromString(leftExp), + ComplexDice.fromString(rightExp)); + } + + /** + * Create a new compound dice from an array of dice strings + * + * @param exps + * An array of two dice strings + */ + public CompoundDice(String[] exps) { + this(exps[0], exps[1]); + } + + @Override + public boolean canOptimize() { + return leftDice.canOptimize() && rightDice.canOptimize(); + } + + @Override + public int optimize() { + if (!canOptimize()) { + throw new UnsupportedOperationException( + "Cannot optimize this compound dice. " + + "Both component dice must be optimizable" + + " to optimize a compound dice"); + } + + return Integer + .parseInt(leftDice.optimize() + "" + rightDice.optimize()); + } + + /* + * (non-Javadoc) + * + * @see bjc.utils.dice.IDiceExpression#roll() + */ + @Override + public int roll() { + /* + * Make the combination of the two dice + */ + return Integer.parseInt(leftDice.roll() + "" + rightDice.roll()); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "compound[l=" + leftDice.toString() + ", r=" + + rightDice.toString() + "]"; + } +} \ No newline at end of file -- cgit v1.2.3