//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();
}
}
}