Java Applet Interface Code

import java.awt.*;
import java.applet.Applet;
import java.applet.*;
import java.text.NumberFormat;
import java.lang.String;
import java.lang.Integer;
import java.lang.Double;
import java.lang.Thread;
import DiceStuff;

/*
**  When you create a new applet in Codewarrior Java, it is named "TrivialApplet"
**  Never did get around to changing the name....
*/

public class TrivialApplet extends Applet
{
	/*
	**  Public declarations, mostly display objects, to
	**  be shared by all routines in the Applet.
	**  Each item that shows up on the applet display is defined here.
	*/
	Button Allbutton ;
	Button singlebutton ;
	
	Checkbox verbosebox ;
	
	TextField count1 ;
	TextField sides1 ;
	TextField tohit1 ;
	
	TextArea outfield ;
	
	/*
	**  Initilization 
	*/
			
	public void init() 
	{
		/*
		**  Set the applet panel to white.
		**  All children of the panel will also therefore be white.
		*/
		this.setBackground(Color.white) ;
		
		/*
		**  Put stuff on the penel left to right, top to bottom.
		*/
		this.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
		
		/*
		**  Button to trigger complete sweep of all
		**  numbers that might be rolled.
		*/
		Allbutton = new Button("All") ;
		Allbutton.setBackground(Color.yellow) ;
		this.add(Allbutton) ;
		
		/*
		**  Button to generate stats for a single number.
		*/
		singlebutton = new Button("Single") ;
		singlebutton.setBackground(Color.yellow) ;
		this.add(singlebutton) ;
		
		/*
		**  Label and text field for the number of dice involved.
		*/
		Label number_label = new Label("Number") ;
		number_label.setBackground(Color.black) ;
		number_label.setForeground(Color.white) ;
		this.add("Number", number_label) ;
		
		count1 = new TextField("3", 5) ;
		count1.setFont(new Font("MonoSpaced", Font.PLAIN, 12));
		count1.setEditable(true);
		this.add("Count1", count1) ;
		
		/*
		**  Label and text for the number of sides on the dice.
		*/
		Label sides_label = new Label("Sides") ;
		sides_label.setBackground(Color.black) ;
		sides_label.setForeground(Color.white) ;
		this.add("Sides", sides_label) ;
		
		sides1 = new TextField("6", 5) ;
		sides1.setFont(new Font("MonoSpaced", Font.PLAIN, 12));
		sides1.setEditable(true);
		this.add("Sides1", sides1) ;
		
		/*
		**  Label and text for the target number of a single call.
		*/
		Label target_label = new Label("Target") ;
		target_label.setBackground(Color.black) ;
		target_label.setForeground(Color.white) ;
		this.add("Target", target_label) ;
		
		tohit1 = new TextField("11", 5) ;
		tohit1.setFont(new Font("MonoSpaced", Font.PLAIN, 12));
		tohit1.setEditable(true);
		this.add("ToHit1", tohit1) ;

		
		/*
		**  Big scrolling place to return output to user.
		*/
		outfield = new TextArea("", 15, 50) ;
		outfield.setFont(new Font("MonoSpaced", Font.PLAIN, 12)) ;
		outfield.setEditable(true) ;
		this.add("Outfield", outfield) ;
		
		/*
		** Place verbose checkbox.
		*/
		verbosebox = new Checkbox("Verbose") ;
		verbosebox.setBackground(Color.black) ;
		verbosebox.setForeground(Color.green) ;
		this.add("Verbose", verbosebox) ;
		
		/*
		**  Have vervose checked at start up time.
		*/
		verbosebox.setState(true) ;	
			
		/*
		**  Request keyboard focus...  cause the example in the book does.
		*/
		this.requestFocus() ;
		
	}	// end of init
	
	
	/*
	**  Using Java 1.0 event model.
	**  Over ride action method.
	**  This routine is called whenever an "action" takes place.
	**  This includes buttons being pressed, and check boxes being
	**  toggled.  Note, we take no action on a check box hit.
	**  Returning false results in the default checkbox routine
	**  running.
	*/
	
	public boolean action(Event e, Object arg)
	{
		//  Assume event not handled until handeled.
		boolean event_handled = false ;
		
		if (e.target == singlebutton)
		{
			SingleButtonPress() ;
			event_handled = true ;
		}
		else if (e.target == Allbutton)
		{
			ClearButtonPress() ;
			event_handled = true ;
		}
		
		return event_handled ;
	}
	
	/*
	**  Not doing anything with main, but do we need
	**  to declare a main anyway?  I don't know that
	**  a main entry point is necessary.  All our active
	**  processing is done in response to buttons, but
	**  applets are supposed to have a main entry point.
	*/ 
	public static void main(String args[])
	{
		boolean done = false ;
		
		/*  Do forever.  */
		while (!done)
		{
			try
			{
				/*  Do nothing for a second.  */
				Thread.sleep(1000) ;
			}
			catch (Exception e)
			{
				/*  
				**  Don't really care if interrupted.
				**  Compiler yells at me if I don't catch
				**  the exception, however.
				*/
			}
		}
	}
		
	/*
	**  Reads and validates TextField inputs from the operator.
	**  Textfield must contain a valid integer, and the integer
	**  must be within a given range.  If operator inserts invalid
	**  entries, a valid content is inserted, and a warning given.
	*/
	
	public int ReadValidateText( TextField field_in, 
			int min_value, int max_value, String field_description) 
	{
		String tempstring ;
		int tempint ;
		
		/* Read a string from the operator.  */
		tempstring = field_in.getText() ;
		
		try
		{
			/* Attempt to convert string into integer.  */
			tempint = Integer.parseInt(tempstring) ;
			
			if (tempint > max_value)
			{
				/* Integer too big.  Override with max.  */
				tempint = max_value ;
				tempstring = (field_description + " overflow\n") ;
				outfield.appendText(tempstring) ;
				field_in.setText("" + tempint) ;
			}
			else if (tempint < min_value)
			{
				/*  Integer too small.  Override with min.  */
				tempint = min_value ;
				tempstring = (field_description + " underflow\n") ;
				outfield.appendText(tempstring) ;
				field_in.setText("" + tempint) ;
			}
		}
		catch (NumberFormatException ev)
		{
			/*  Format exception.  Not a valid integer.  Override with min.  */
			tempint = min_value ;
			tempstring = (field_description + " bad integer format\n") ;
			outfield.appendText(tempstring) ;
			field_in.setText("" + tempint) ;
		}
		
		return tempint ;
	}
	
	/*
	**  The single button was pressed.
	**  Generate statistics for a single number.
	*/
	public void SingleButtonPress()
	{
		String tempholder ;
		int number_of_dice ;
		int sides_on_dice ;
		int target_to_roll ;
		long ways_to_roll ;
		
		/* 
		**  Read and validate number of dice, sides, and number to be rolled.
		*/			
		number_of_dice = ReadValidateText(count1, 1, DiceStuff.max_dice, "Number of Dice ") ;	
		sides_on_dice = ReadValidateText(sides1, 2, DiceStuff.max_sides, "Sides on Dice ") ;
		target_to_roll = ReadValidateText(tohit1, 1, DiceStuff.max_roll, "Target to hit ") ;
		
		/*
		**  Display the result. 
		*/	
		dumpResult(number_of_dice, sides_on_dice, target_to_roll) ;
		
		/*
		**  Increment target.
		*/
		tohit1.setText(Integer.toString(target_to_roll + 1)) ;
	}
	
	/*
	**  This class sends a line to the outfield
	**  which gives information about one particular roll.
	*/
	
	public void dumpResult(int count, int sides, int target)
	{
		float chance_target_exact ;		
		float chance_target_or_less ;
		float float_ways ;
		float float_sum ;
		float float_all ;
		
		String tempstring ;
		
		/*
		**  Invoke DiceStuff class.
		*/
		DiceStuff dice = new DiceStuff() ;
						
		/*
		**  Initialize text format object for long integers. 
		*/
		NumberFormat bigformat = NumberFormat.getInstance() ;
		bigformat.setParseIntegerOnly(true) ;
		bigformat.setGroupingUsed(true) ;
			
		/*
		**  Initialize text format object for percentiles.
		*/
		NumberFormat percent = NumberFormat.getPercentInstance() ;
		percent.setMaximumFractionDigits(2) ;
		percent.setMinimumFractionDigits(0) ;

		/*  Ways to roll this number */
		long ways_to_roll = dice.intwayray(count, sides, target) ;

		/*  
		**  Are we outputting everything?
		**  Read the verbose checkbox.
		*/
		if (verbosebox.getState())
		{
			/*  Ways to roll this number or lower.  */		
			long sum_of_rolls = dice.sumwayray(count, sides, target) ;
		
			/*  Possible ways for the dice to fall.  */
			long all_ways = dice.sumwayray(count, sides, count * sides) ;
		
			/*  Convert everything to floating point format.  */
			float_ways = ways_to_roll ;
			float_sum = sum_of_rolls ;
			float_all = all_ways ;
		
			/*  Percent chance of hitting this number exact.  */
			chance_target_exact = (float_ways / float_all) ;		
		
			/*  Percent chance of hitting this number or lower.  */
			chance_target_or_less = (float_sum / float_all) ;
		
			/*  Write verbose to the output field.  */
			outfield.appendText(bigformat.format(ways_to_roll) + " ways to roll " + target + " on " +
				count + "D" + sides + "  "+ percent.format(chance_target_exact) + " " +
				percent.format(chance_target_or_less) + "\n") ;
		}
		else
		{
			/*  Write not at all verbose to the output field.  */
			outfield.appendText(ways_to_roll + "\n") ;
		}
		return ;
	}
	
	/*
	**  Called when the All Button is pressed.
	**  Generates statistics for all possible rolls.
	*/
	
	public void ClearButtonPress()
	{
		String tempholder ;
		int number_of_dice ;
		int sides_on_dice ;
		int target_to_roll ;
		
		/* 
		**  Read and validate number of dice, sides.
		**  Target field is not used.
		*/			
		number_of_dice = ReadValidateText(count1, 1, 15, "Number of Dice ") ;	
		sides_on_dice = ReadValidateText(sides1, 2, DiceStuff.max_sides, "Sides on Dice ") ;
		
		/*
		**  Loop through each number that could be rolled.
		*/	
		for (target_to_roll = number_of_dice ; target_to_roll <= (number_of_dice * sides_on_dice) ;
				target_to_roll++ )
		{
			/*
			**  Display results for this number.
			*/
			dumpResult(number_of_dice, sides_on_dice, target_to_roll) ;
		}
	}	
	
	/*
	**  Paint is called once at start and each time
	**  window is resized, exposed, etc...
	**  While the applet is created as white, the paint
	**  procedure draws a black rectangle over the
	**  exposed area of the applet.
	*/
	public void paint( Graphics g ) {
		g.setColor(Color.black) ;
		g.fillRect(0, 0, 500, 600) ;
		
		g.setColor(Color.white) ;
	}
}


Dice Teaser - C Recursive - C 3 loop - Java Applet - Java Statistics Source


Jump Map Bar

Warp Nine Flying False Colors!

Jump Bar 2