/* Written by Nick Exner on 6/16/98 * * Last Updated: 7/1/98 * * Free to distribute */ import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class cerealCount extends java.applet.Applet { boolean statusNum = false; int prizeNum=2; Image alligator; Image elephant; Image giraffe; Image lion; Image otters; Image spider; Image swan; Image tiger; MyFrame window; public void init() { alligator = getImage(getCodeBase(), "images/alligator.jpg"); elephant = getImage(getCodeBase(), "images/elephant.jpg"); giraffe = getImage(getCodeBase(), "images/giraffe.jpg"); lion = getImage(getCodeBase(), "images/lion.jpg"); otters = getImage(getCodeBase(), "images/otters.jpg"); spider = getImage(getCodeBase(), "images/spider.jpg"); swan = getImage(getCodeBase(), "images/swan.jpg"); tiger = getImage(getCodeBase(), "images/tiger.jpg"); setForeground(Color.black); setBackground(new Color(180,180,255)); add(new Label("Number of Prizes: ")); Choice c= new Choice(); c.addItem("2"); c.addItem("3"); c.addItem("4"); c.addItem("5"); c.addItem("6"); c.addItem("7"); c.addItem("8"); add(c); add(new Button("Run Simulation")); add(new Checkbox("Log trials")); window = new MyFrame("Trial Stats"); window.resize(150,150); Point d = location(); window.move((d.x+400),d.y); window.hide(); window.setBackground(new Color(180,180,255)); // Fix problem with initial button press statusNum = true; repaint(); window.resetTrial(); window.repaint(); } public void paint( Graphics g) { if (statusNum == true){ int repeatCount = 0, number=0, xpos=10,ypos=75; boolean loopTill; boolean countStat[] = new boolean [prizeNum]; int sizex,sizey; sizex=(210/prizeNum); if (prizeNum == 2) sizex=(210/prizeNum)-10; if (prizeNum == 3) sizex=(210/prizeNum)+6; if (prizeNum > 5) sizex=(210/5); sizey=sizex; do { number= (int)(Math.random()*prizeNum); switch(number) { case 1: g.drawImage(alligator,xpos,ypos,sizex,sizey,this); break; case 2: g.drawImage(elephant,xpos,ypos,sizex,sizey,this); break; case 3: g.drawImage(giraffe,xpos,ypos,sizex,sizey,this); break; case 4: g.drawImage(lion,xpos,ypos,sizex,sizey,this); break; case 5: g.drawImage(otters,xpos,ypos,sizex,sizey,this); break; case 6: g.drawImage(spider,xpos,ypos,sizex,sizey,this); break; case 7: g.drawImage(swan,xpos,ypos,sizex,sizey,this); break; default: g.drawImage(tiger,xpos,ypos,sizex,sizey,this); } xpos+=sizex+1; if(xpos > 350){ // was 380 xpos=10; ypos+=(sizey+1); } countStat[number]=true; loopTill = true; for(int i=0;i < prizeNum;i++) { if (countStat[i]!= true) loopTill=false; } // Add another box of cereal to your shopping cart repeatCount++; } while(!loopTill); g.drawString("It took " + repeatCount + " boxes of cereal to get all "+ prizeNum + " prizes.", 65,45); window.addTrial(repeatCount); window.repaint(); //if (window.isShowing()) // window.show(); } statusNum = false; } public boolean action(Event evt, Object arg) { if (evt.target instanceof Choice){ prizeNum = Integer.parseInt((String)arg); window.resetTrial(); window.repaint(); } if (evt.target instanceof Button){ statusNum = true; repaint(); } if (evt.target instanceof Checkbox) { if (window.isShowing()) window.hide(); else { window.show(); } } return true; } } class MyFrame extends Frame { int trialNum=0, newTrial=0, max=0,min=0; double average=0; MyFrame(String title) { // Class Constructor super(title); } public boolean isResizable() { return false; } public void addTrial(int a) { trialNum++; newTrial+=a; if (trialNum == 1 ) min = a; max = (max > a) ? max : a; min = (min < a) ? min : a; average=(double) ((newTrial*1.0)/trialNum); } public void resetTrial() { trialNum=0; average=0; newTrial=0; max=0; min=0; } public void paint( Graphics g) { g.drawString("Trials Performed: " + trialNum,5,35); average=average*100; average=Math.round(average); average=average/100; g.drawString("Average: " + average,5,50); g.drawString("Max: "+max,5,65); g.drawString("Min: "+min,5,80); g.drawString("Range: "+(max-min),5,95); } public Insets insets() { return new Insets(10,10,10,10); } } // End class