/******************************** * * Miro Kazakoff * 047-76-5220 * Final Project * temp version *******************************/ import java.applet.*; import java.awt.*; import java.awt.event.*; public class Clubs extends Applet implements ItemListener, ActionListener{ private blinkThread Thread1, Thread2, Thread3, Thread4, Thread5; boolean toggle = false; int x, y; int clicks; int hits; int iterations; int xArray[]; int yArray[]; Image picture, xPic; int width, height; MyCanvas myCanvas; CheckboxGroup speed; Checkbox slow, medium, fast; Panel speedPanel; Label speedLabel; String chosenSpeed; CheckboxGroup repetitions; Panel repPanel; Checkbox twenty, fourty, sixty; Label repLabel; int target; Panel buttonPanel; Button begin; boolean moreThanOnce = false; public void init(){ chosenSpeed = new String("slow"); xPic = getImage( getDocumentBase(), "images/x.gif" ); myCanvas = new MyCanvas(this); myCanvas.setBackground(Color.green); myCanvas.setSize(500,300); xArray = new int[5]; yArray = new int[5]; for(int i = 0; i < 5; i++){ xArray[i] = -1; yArray[i] = -1; } speedPanel = new Panel(); speedLabel = new Label( "Choose your Speed"); speedPanel.add(speedLabel); speed = new CheckboxGroup(); slow = new Checkbox( "Slow", speed, true); slow.addItemListener(this); speedPanel.add(slow); medium = new Checkbox( "Medium", speed, false); medium.addItemListener(this); speedPanel.add(medium); fast = new Checkbox( "Fast", speed, false); fast.addItemListener(this); speedPanel.add(fast); repPanel = new Panel(); repLabel = new Label( "Choose Your Number of Tries"); repPanel.add(repLabel); repetitions = new CheckboxGroup(); twenty = new Checkbox( "20", repetitions, true); twenty.addItemListener(this); repPanel.add(twenty); fourty = new Checkbox( "40", repetitions, false); fourty.addItemListener(this); repPanel.add(fourty); sixty = new Checkbox( "60", repetitions, false); sixty.addItemListener(this); repPanel.add(sixty); buttonPanel = new Panel(); begin = new Button( "Start"); begin.addActionListener(this); buttonPanel.add(begin); add(myCanvas); add(speedPanel); add(repPanel); add(begin); } /* public void start() { Thread1 = new blinkThread(this, "Homer"); Thread2 = new blinkThread(this, "Marge"); Thread3 = new blinkThread(this, "Bart"); Thread4 = new blinkThread(this, "Lisa"); Thread5 = new blinkThread(this, "Maggie"); } */ public void goToIt() { Thread1 = new blinkThread(this, "Homer"); Thread2 = new blinkThread(this, "Marge"); Thread3 = new blinkThread(this, "Bart"); Thread4 = new blinkThread(this, "Lisa"); Thread5 = new blinkThread(this, "Maggie"); Thread1.start(); Thread2.start(); Thread3.start(); Thread4.start(); Thread5.start(); } public void stop() { /* Thread1.stop(); Thread2.stop(); Thread3.stop(); Thread4.stop(); Thread5.stop(); */ } public void buttonPressed(int x, int y){ ++clicks; if ( Thread1.hit == false && x > Thread1.returnX() && x < (Thread1.returnX() + Thread1.returnWidth()) && y > Thread1.returnY() && y < (Thread1.returnY() + Thread1.returnHeight()) ){ Thread1.hit = true; (Thread1.returnSound()).play(); myCanvas.makeRect( xPic, Thread1.returnX(), Thread1.returnY() ); ++hits; } else if ( Thread2.hit == false && x > Thread2.returnX() && x < (Thread2.returnX() + Thread2.returnWidth()) && y > Thread2.returnY() && y < (Thread2.returnY() + Thread2.returnHeight()) ){ Thread2.hit = true; myCanvas.makeRect( xPic, Thread2.returnX(), Thread2.returnY() ); (Thread2.returnSound()).play(); ++hits; } else if ( Thread3.hit == false && x > Thread3.returnX() && x < (Thread3.returnX() + Thread3.returnWidth()) && y > Thread3.returnY() && y < (Thread3.returnY() + Thread3.returnHeight()) ){ Thread3.hit = true; myCanvas.makeRect( xPic, Thread3.returnX(), Thread3.returnY() ); (Thread3.returnSound()).play(); ++hits; } else if ( Thread4.hit == false && x > Thread4.returnX() && x < (Thread4.returnX() + Thread4.returnWidth()) && y > Thread4.returnY() && y < (Thread4.returnY() + Thread4.returnHeight()) ){ Thread4.hit = true; myCanvas.makeRect( xPic, Thread4.returnX(), Thread4.returnY() ); (Thread4.returnSound()).play(); ++hits; } else if ( Thread5.hit == false && x > Thread5.returnX() && x < (Thread5.returnX() + Thread5.returnWidth()) && y > Thread5.returnY() && y < (Thread5.returnY() + Thread5.returnHeight()) ){ Thread5.hit = true; myCanvas.makeRect( xPic, Thread5.returnX(), Thread5.returnY() ); (Thread5.returnSound()).play(); ++hits; } else showStatus( "Chances: " + Integer.toString(iterations) + " Clicks: " + Integer.toString(clicks) + " Hits: " + Integer.toString(hits)); } public void itemStateChanged(ItemEvent e) { if(e.getSource() == slow) chosenSpeed = "slow"; if(e.getSource() == medium) chosenSpeed = "medium"; if(e.getSource() == fast) chosenSpeed = "fast"; if(e.getSource() == twenty) target = 20; if(e.getSource() == fourty) target = 40; if(e.getSource() == sixty) target = 60; } public void actionPerformed( ActionEvent e) { if(speed.getSelectedCheckbox() == slow) chosenSpeed = "slow"; if(speed.getSelectedCheckbox() == medium) chosenSpeed = "medium"; if(speed.getSelectedCheckbox() == fast) chosenSpeed = "fast"; if(repetitions.getSelectedCheckbox() == twenty) target = 20; if(repetitions.getSelectedCheckbox() == fourty) target = 40; if(repetitions.getSelectedCheckbox() == sixty) target = 60; resetThreads(); myCanvas.eraseRect(0, 0, 500, 300); goToIt(); } public void resetThreads() { clicks = 0; hits = 0; iterations = 0; showStatus( "Chances: " + Integer.toString(iterations) + " Clicks: " + Integer.toString(clicks) + " Hits: " + Integer.toString(hits)); } } class blinkThread extends Thread{ Clubs c; int x, y; int showTime, restTime; public AudioClip sound; public Image picture; public boolean hit; String speed; public blinkThread( Clubs club, String threadName) { c = club; setSpeeds(); setName(threadName); setSound(); setPic(); } public synchronized void run() { blinkThread curThread; curThread = (blinkThread)Thread.currentThread(); try { sleep( 500 + (int) (Math.random() * 1000)); } catch (InterruptedException e) {} while(c.iterations <= c.target ){ hit = false; c.showStatus( "Chances: " + Integer.toString(c.iterations) + " Clicks: " + Integer.toString(c.clicks) + " Hits: " + Integer.toString(c.hits)); setPosition(); setTime(); try { hit = false; c.myCanvas.makeRect( picture, x, y); sleep( showTime ); c.myCanvas.eraseRect( x, y, picture.getWidth(c), picture.getHeight(c) ); hit = true; sleep( restTime ); } catch (InterruptedException e) { e.printStackTrace(); } ++c.iterations; } } public void setPosition() { x = (int) (Math.random() * 400 ); y = (int) (Math.random() * 250 ); } public void setSpeeds() { speed = c.chosenSpeed; } public void setTime() { if( (speed).equals("slow")){ showTime = 3000 + (int) (Math.random() * 1000 ); restTime = 1500 + (int) (Math.random() * 500 ); } if( (speed).equals("medium")){ showTime = 2000 + (int) (Math.random() * 500 ); restTime = 1000 + (int) (Math.random() * 500 ); } if( (speed).equals("fast")){ showTime = 1250 + (int) (Math.random() * 1000 ); restTime = 500 + (int) (Math.random() * 500 ); } } public int returnWidth() { return picture.getWidth(c) ; } public int returnHeight() { return picture.getHeight(c) ; } public int returnX() { return x; } public int returnY() { return y; } public void setPic() { if( getName().equals( "Homer") ) picture = c.getImage( c.getDocumentBase(), "images/homer.gif" ); if( getName().equals( "Marge") ) picture = c.getImage( c.getDocumentBase(), "images/marge.gif" ); if( getName().equals( "Bart") ) picture = c.getImage( c.getDocumentBase(), "images/bart.gif" ); if( getName().equals( "Lisa") ) picture = c.getImage( c.getDocumentBase(), "images/lisa.gif" ); if( getName().equals( "Maggie") ) picture = c.getImage( c.getDocumentBase(), "images/maggie.gif" ); } public void setSound() { if( getName().equals( "Homer") ) sound = c.getAudioClip( c.getDocumentBase(), "sounds/doh.au" ); if( getName().equals( "Marge") ) sound = c.getAudioClip( c.getDocumentBase(), "sounds/hmmm.au" ); if( getName().equals( "Bart") ) sound = c.getAudioClip( c.getDocumentBase(), "sounds/aycar.au" ); if( getName().equals( "Lisa") ) sound = c.getAudioClip( c.getDocumentBase(), "sounds/room.au" ); if( getName().equals( "Maggie") ) sound = c.getAudioClip( c.getDocumentBase(), "sounds/suck.au" ); } public AudioClip returnSound() { return sound; } }