home *** CD-ROM | disk | FTP | other *** search
/ Java 1996 August / Java - Summer 1996.iso / rockridge / java / threads / betaclasses / RaceApplet.java < prev    next >
Encoding:
Java Source  |  1995-11-13  |  1.9 KB  |  77 lines

  1. import java.awt.*;
  2.  
  3. public class RaceApplet extends java.applet.Applet implements Runnable {
  4.  
  5.     final static int NUMRUNNERS = 2;
  6.     final static int SPACING = 20;
  7.  
  8.     Runner runners[] = new Runner[NUMRUNNERS];
  9.  
  10.     Thread updateThread;
  11.  
  12.     public void init() {
  13.     String raceType = getParameter("type");
  14.     for (int i = 0; i < NUMRUNNERS; i++) {
  15.         runners[i] = new Runner();
  16.         if (raceType.compareTo("unfair") == 0)
  17.             runners[i].setPriority(i+1);
  18.         else
  19.             runners[i].setPriority(2);
  20.         }
  21.         if (updateThread == null) {
  22.             updateThread = new Thread(this, "Thread Race");
  23.             updateThread.setPriority(NUMRUNNERS+1);
  24.         }
  25.     }
  26.  
  27.     public boolean mouseDown(java.awt.Event evt, int x, int y) {
  28.     if (!updateThread.isAlive())
  29.             updateThread.start();
  30.     for (int i = 0; i < NUMRUNNERS; i++) {
  31.         if (!runners[i].isAlive())
  32.             runners[i].start();
  33.     }
  34.     return true;
  35.     }
  36.  
  37.     public void paint(Graphics g) {
  38.         g.setColor(Color.lightGray);
  39.         g.fillRect(0, 0, size().width, size().height);
  40.         g.setColor(Color.black);
  41.         for (int i = 0; i < NUMRUNNERS; i++) {
  42.         int pri = runners[i].getPriority();
  43.         g.drawString(new Integer(pri).toString(), 0, (i+1)*SPACING);
  44.     }
  45.         update(g);
  46.     }
  47.  
  48.     public void update(Graphics g) {
  49.         for (int i = 0; i < NUMRUNNERS; i++) {
  50.         g.drawLine(SPACING, (i+1)*SPACING, SPACING + (runners[i].tick)/1000, (i+1)*SPACING);
  51.     }
  52.     }
  53.  
  54.     public void run() {
  55.         while (updateThread != null) {
  56.             repaint();
  57.             try {
  58.         updateThread.sleep(10);
  59.         } catch (InterruptedException e) {
  60.         }
  61.         }
  62.     }    
  63.  
  64.     public void stop() {
  65.     for (int i = 0; i < NUMRUNNERS; i++) {
  66.         if (runners[i].isAlive()) {
  67.             runners[i].stop();
  68.             runners[i] = null;
  69.         }
  70.         }
  71.     if (updateThread.isAlive()) {
  72.             updateThread.stop();
  73.             updateThread = null;
  74.     }
  75.     }
  76. }
  77.