home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2001 / MacHack 2001.toast / pc / The Hacks / Polyhedra / ADDDice.java < prev    next >
Encoding:
Java Source  |  2001-06-23  |  4.5 KB  |  177 lines

  1. /*
  2.     ADDDice by Scott Ziegler 06.14.99
  3.     
  4.     Instructions for use:
  5.  
  6.         This class implements the set of polyhedral dice used in the AD&D setting
  7.     
  8.         Supported Functions:
  9.  
  10.         ADDDice()                - default constructor, inits to a six-sided die
  11.         ADDDice(int, int, int)    - constructor which accepts the coefficient, the die, 
  12.                                     and the modifier
  13.         Selector/Mutators        - full set of get/set functions for data fields, of the form
  14.                                     [get|set]{capitalized data field name} e.g. getModifier
  15.                                     List: Coefficient, Die, Modifier
  16.         roll()                    - returns the value of the constructed die when "rolled"
  17.         roll(int)                - returns the value of the constructed die with new coefficient
  18.         roll(int, int)            - returns the value of the constructed die with new coefficient
  19.                                     and new modifier
  20.         toString()                - turns ADDDice object into a string representation of that die
  21.         stringToDie(String)        - turns a well-formed string into a die object; form is:
  22.                                     X 'd' Y ['+'|'-'] Z e.g. 10d12+36 or 100d6-10
  23.                                     and Y must be inDieSet.
  24.                                     
  25.     
  26.     Code in use by:
  27.         
  28.         
  29.     Vers. History:
  30.         09.29.00 -     re-evaluated the file, adding new comment style
  31.         10.09.00 -    re-implemented the roll() function and made Random obj a member
  32.     
  33.     Work Needed:
  34.         - maybe an set of exceptions for bad formed dieStrings and integers
  35.  
  36.     Work Completed:
  37.         
  38.         
  39. */
  40. package Arcana;
  41.  
  42. // import com.sun.java.swing.*;
  43. import javax.swing.*;
  44. import java.io.*;
  45. import java.util.Random;
  46.  
  47. public class ADDDice implements Serializable {
  48.  
  49.     final static int[] dieSet = {2,3,4,6,8,10,12,20,30,100};
  50.     
  51.     private int coefficient;
  52.     private int die;
  53.     private int modifier;
  54.     private transient Random    rand;
  55.     
  56.     public ADDDice() {
  57.         coefficient = 1;
  58.         die = 6;
  59.         modifier = 0;
  60.         rand = new Random();
  61.         }
  62.         
  63.     public ADDDice(int coef, int dye, int modf) {
  64.         
  65.         if (inDieSet(dye)) die = dye;
  66.         else { // exception?
  67.             System.out.println("That die doesn't exist! \n");
  68.             }
  69.         coefficient = coef;
  70.         modifier = modf;
  71.         rand = new Random();
  72.         }
  73.         
  74.     public int roll() {
  75.         int rolledValueSum = 0;
  76.         int valueHolder = 0;
  77.         for(int i=0;i < coefficient;i++) {
  78.             valueHolder = Math.round(rand.nextFloat() * die);
  79.             rolledValueSum += (valueHolder>0?valueHolder:1);
  80.             }
  81.         return (rolledValueSum + modifier);
  82.         }
  83.     
  84.     /*public int roll() {
  85.         int rolledValue = ((coefficient * ((int)(rand.nextDouble() * die) + 1)) + modifier);
  86.         return rolledValue;
  87.         }*/
  88.         
  89.     public int roll(int coef) {
  90.         int rolledValueSum = 0;
  91.         int valueHolder = 0;
  92.         for(int i=0;i < coef;i++) {
  93.             valueHolder = Math.round(rand.nextFloat() * die);
  94.             rolledValueSum += (valueHolder>0?valueHolder:1);
  95.             }
  96.         return (rolledValueSum + modifier);
  97.         }
  98.         
  99.     public int roll(int coef, int modf) {
  100.         int rolledValueSum = 0;
  101.         int valueHolder = 0;
  102.         for(int i=0;i < coef;i++) {
  103.             valueHolder = Math.round(rand.nextFloat() * die);
  104.             rolledValueSum += (valueHolder>0?valueHolder:1);
  105.             }
  106.         return (rolledValueSum + modf);
  107.         }
  108.         
  109.     public int getCoefficient() { return coefficient; }
  110.     
  111.     public int getDie() { return die; }
  112.     
  113.     public int getModifier() { return modifier; }
  114.     
  115.     public void setCoefficient(int c) { coefficient = c; }
  116.     
  117.     public void setDie(int d) { 
  118.         if (inDieSet(d)) { die = d; }
  119.         else { /* addDieDialog(d); */ 
  120.             System.out.println("That die doesn't exist! \n");
  121.             }  // need to implement
  122.          }
  123.     
  124.     public void setModifier(int modf) { modifier = modf; }
  125.     
  126.     private boolean inDieSet(int dye) {
  127.         boolean inSet = false;
  128.         for (int i=0; i < 10; i++) {
  129.             if (dieSet[i] == dye) inSet = true;
  130.             }
  131.         return inSet;
  132.         }
  133.         
  134.     public String toString() {
  135.         return new String ("" + coefficient + 
  136.                            "d" + die +
  137.                            (modifier != 0?(modifier >= 0?"+":"-"):"") + (modifier != 0?(""+modifier):""));
  138.         }
  139.         
  140.     public ADDDice stringToDie(String dieStr) {
  141.         int indOfD = 0;
  142.         int indOfSign = 0;
  143.         int modfInt;
  144.         boolean negModf = false;
  145.         boolean noModf = false;
  146.         String coefStr;
  147.         String sideStr;
  148.         String modfStr;
  149.         
  150.         indOfD = dieStr.indexOf('d');
  151.         if ((dieStr.indexOf('-') == -1) && (dieStr.indexOf('+') == -1)) noModf = true;
  152.         indOfSign = dieStr.indexOf('+');
  153.         if (indOfSign == -1) { 
  154.             indOfSign = dieStr.indexOf('-');
  155.             negModf = true;
  156.             }
  157.         coefStr = dieStr.substring(0,indOfD); //that is 'd' exclusive
  158.         if (!noModf) {
  159.             sideStr = dieStr.substring(indOfD+1, indOfSign);
  160.             modfStr = dieStr.substring(indOfSign+1);
  161.             modfInt = Integer.parseInt(modfStr);
  162.             if (negModf) modfInt *= -1;
  163.             }
  164.         else {
  165.             sideStr = dieStr.substring(indOfD+1);
  166.             modfInt = 0;
  167.             }
  168.         
  169.         return new ADDDice(Integer.parseInt(coefStr), Integer.parseInt(sideStr), modfInt);
  170.         }
  171.     
  172.     
  173.     }
  174.     
  175.     
  176.     
  177.