//Final Exam: COSC 072
//Author: Brian Boston
//Problem: 14.43
//Description: Horse Race Simulation
//Date: December 18, 1997

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;

public class horse extends Applet implements Runnable, ActionListener {
        private AudioClip picoSound, javaSound, neySound,
                picowinSound, javawinSound, offSound, trotSound;
        private Image title, pico, java, picowin, javawin;
        private Image h[], h2[], h3[], h4[];
        private int totalImages=4, totalImages2=8, currentImage=0, currentImage2=0,
                currentImage3=0, currentImage4=0, sleepTime=150;
        private Graphics gContext, gContext2, gContext3, gContext4;
        private Image buffer, buffer2, buffer3, buffer4;
        private MediaTracker imageTracker, imageTracker2, imageTracker3,
                imageTracker4, imageTracker5, imageTracker6, imageTracker7;
        private Thread animate;
        private int trots1=0, trots2=0;
        private Button go, restart;
        private Panel bottom, trotPanel, userPanel;
        private Label blank;
        private boolean flag=false, flag2=true, erase=false, flag3=true,
                flag4=false, flag5=true;
        private int winner=0;

public void init()
{
        offSound=getAudioClip(getDocumentBase(), "offSound.au");
        picoSound=getAudioClip(getDocumentBase(), "picoSound.au");
        javaSound=getAudioClip(getDocumentBase(), "javaSound.au");
        neySound=getAudioClip(getDocumentBase(), "neySound.au");
        picowinSound=getAudioClip(getDocumentBase(), "picowinSound.au");
        javawinSound=getAudioClip(getDocumentBase(), "javawinSound.au");
        trotSound=getAudioClip(getDocumentBase(), "trotSound.au");

        title=getImage(getDocumentBase(), "title.jpg");
        pico=getImage(getDocumentBase(), "pico.jpg");
        java=getImage(getDocumentBase(), "java.jpg");
        picowin=getImage(getDocumentBase(), "picowin.jpg");
        javawin=getImage(getDocumentBase(), "javawin.jpg");

        h=new Image[totalImages];
        buffer=createImage(150, 100);
        gContext=buffer.getGraphics();

        h2=new Image[totalImages];
        buffer2=createImage(150, 100);
        gContext2=buffer2.getGraphics();

        h3=new Image[totalImages2];
        buffer3=createImage(150, 100);
        gContext3=buffer3.getGraphics();

        h4=new Image[totalImages2];
        buffer4=createImage(150, 100);
        gContext4=buffer4.getGraphics();

        gContext.setColor(Color.white);
        gContext.fillRect(0,0,160,100);

        gContext2.setColor(Color.white);
        gContext2.fillRect(0,0,160,100);

        gContext3.setColor(Color.white);
        gContext3.fillRect(0,0,160,100);

        gContext4.setColor(Color.white);
        gContext4.fillRect(0,0,160,100);

        imageTracker=new MediaTracker(this);
        imageTracker2=new MediaTracker(this);
        imageTracker3=new MediaTracker(this);
        imageTracker4=new MediaTracker(this);
        imageTracker5=new MediaTracker(this);
        imageTracker6=new MediaTracker(this);
        imageTracker7=new MediaTracker(this);

        imageTracker3.addImage(pico, 0);
        try {imageTracker3.waitForID(0);}
        catch(InterruptedException e) {}

        imageTracker4.addImage(java, 0);
        try {imageTracker4.waitForID(0);}
        catch(InterruptedException e) {}

        imageTracker5.addImage(title, 0);
        try {imageTracker5.waitForID(0);}
        catch(InterruptedException e) {}


        for(int i=0; itrots2) && ((trots1>50) && (trots1<450)))
                picoSound.play();

       if ((trots2>trots1) && ((trots2>50) && (trots2<450)))
                javaSound.play();

       if (((trots1>=500) && (winner!=2)) && (flag5)) {
                winner=1;
                flag4=true;
                flag5=false;}

       if (((trots2>=500) && (winner!=1)) && (flag5)) { 
                winner=2;
                flag4=true;
                flag5=false;}

       if ((trots1>=500) || (trots2>=500)) {
                trotSound.stop();
                picoSound.stop();
                javaSound.stop();
               }

       if (winner==1) 
                g.drawImage(picowin, 100, 190, this);

       if (winner==2) 
                g.drawImage(javawin, 100, 190, this);
}              

public void update(Graphics g) {paint(g);}

public void run()
{
       while(true) {
            if ((imageTracker.checkID(currentImage, true)) &&
               (imageTracker2.checkID(currentImage2, true)) &&
               (imageTracker3.checkID(currentImage3, true)) &&
               (imageTracker4.checkID(currentImage4, true))) {

                gContext.fillRect(0, 0, 160, 100);
                gContext.drawImage(h[currentImage], 10, 0, this);
                currentImage=(currentImage+1)%totalImages; 

                gContext2.fillRect(0, 0, 160, 100);
                gContext2.drawImage(h2[currentImage2], 10, 0, this);
                currentImage2=(currentImage2+1)%totalImages; 

                gContext3.fillRect(0, 0, 160, 100);
                gContext3.drawImage(h3[currentImage3], 10, 0, this);
                currentImage3=(currentImage3+1)%totalImages2; 

                gContext4.fillRect(0, 0, 160, 100);
                gContext4.drawImage(h4[currentImage4], 10, 0, this);
                currentImage4=(currentImage4+1)%totalImages2; }

        try { Thread.sleep(sleepTime); }
        catch(InterruptedException e) {}
        repaint();
        }
}

public void actionPerformed(ActionEvent e)
{       if(e.getSource()==go) {
                neySound.stop();
                offSound.play();
                flag2=false;
                flag=true;
        }

        if(e.getSource()==restart) {
                erase=true;
                trots1=0;
                trots2=0;
                flag=false;
                flag2=true;
                flag3=true;
                flag4=false;
                flag5=true;
                winner=0;
                start();
        }
      
}
   

}