/*
* MegaMek - Copyright (C) 2004 Ben Mazur (bmazur@sev.org)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
/*
* Roll.java
*
* Created on July 20, 2004, 4:21 PM
*/
package megamek.common;
/**
* Encapsulate all information known about a requested roll. This information
* can be logged for full statistical analysis and auditing, so hopefully people
* will <b>finally</b> stop questioning whether the RNG is any good.
*
* @author Suvarov454
*/
public abstract class Roll {
/**
* Make sure that all rolls are uniquely identified.
*/
private static long nextId = 1;
/**
* Get the next unique identifier.
*
* @return the next unique <code>long</code> identifier.
*/
private static long getNextId() {
return nextId++;
}
/**
* No one should call the default constructor.
private Roll() {
throw new UnsupportedOperationException(
"Default Roll constructor called.");
}*/
/**
* The unique identifier for this roll.
*/
protected final long id;
/**
* The number of faces on each virtual die.
*/
protected final int faces;
/**
* The lowest value on each virtual die.
*/
protected final int min;
/**
* Store the configuration information for this roll.
*
* @param count - the <code>int</code> number of results possible on each
* virtual die.
* @param start - the <code>int</code> value that is the start of the
* value set of each virtual die.
*/
protected Roll(int count, int start) {
this.id = Roll.getNextId();
this.faces = count;
this.min = start;
}
/**
* Get the value of the roll. This is the total of each of the rolls of each
* virtual die.
*
* @return the <code>int</code> value of the roll.
*/
public abstract int getIntValue();
/**
* Get a <code>String</code> containing the roll for each of the virtual
* dice.
*
* @return the <code>String</code> value of the roll.
*/
@Override
public abstract String toString();
/**
* Get a <code>String</code> report that can be parsed to analyse the
* roll.
*
* @return the <code>String</code> details of the roll.
*/
public abstract String getReport();
/**
* Formats <code>Roll</code> output for test harnesses.
*
* @param roll - the <code>Roll</code> to be reported.
*/
protected static void output(Roll roll) {
System.out.print("The integer total is ");
System.out.print(roll.getIntValue());
System.out.println(".");
System.out.print("The string total is ");
System.out.print(roll.toString());
System.out.println(".");
System.out.print("The string report is ");
System.out.print(roll.getReport());
System.out.println(".");
}
}
|