home *** CD-ROM | disk | FTP | other *** search
/ Internet Gallery / INTERGAL.bin / intergal / prgs / idv21 / data.z / Bubbles.java < prev    next >
Text File  |  1995-10-08  |  4KB  |  215 lines

  1. // author: Rachel Gollub, 1995
  2.  
  3. // Bubbles!
  4.  
  5.  
  6.  
  7. import java.awt.*;
  8.  
  9. import java.applet.*;
  10.  
  11.  
  12.  
  13. public class Bubbles extends java.applet.Applet implements Runnable {
  14.  
  15.   Thread artist=null;
  16.  
  17.   int bubble=0, thisbubble=0;   // # of bubbles on screen, and current bubble
  18.  
  19.   int stepper = 4;               // Counter for which bubbles to move when
  20.  
  21.   int record[][] = new int[AMaxnumberbubbles][5];  // Array that holds bubbles
  22.  
  23.   
  24.  
  25. public void init() {
  26.  
  27.   resize(AWidth,AHeight);              // Set bubble window size
  28.  
  29. }
  30.  
  31.  
  32.  
  33. public void draw_bubble(int x, int y, int r, Color col, Graphics g) {
  34.  
  35.   int i;
  36.  
  37.  
  38.  
  39.   for (i=x-r; i<=x+r; i++) {     // Draws a circle
  40.  
  41.     g.setColor(col);
  42.  
  43.     g.drawLine(i, y - (int)(Math.sqrt( r*r - ( (i-x)*(i-x) ))),
  44.  
  45.            i, y + (int)(Math.sqrt( r*r - ( (i-x)*(i-x) ))));
  46.  
  47.   }
  48.  
  49. }
  50.  
  51.  
  52.  
  53. public void move_bubble(int x, int y, int r, Color col, int step, Graphics g) {
  54.  
  55.   int i;
  56.  
  57.  
  58.  
  59.   for (i=x-r; i<=x+r; i++) {     // Draws the upper edge of a circle
  60.  
  61.     g.setColor(col);
  62.  
  63.     g.drawLine(i, y - (int)(Math.sqrt( r*r - ( (i-x)*(i-x) ))),
  64.  
  65.            i, y + step - (int)(Math.sqrt( r*r - ( (i-x)*(i-x) ))));
  66.  
  67.   }
  68.  
  69.   for (i=x-r; i<=x+r; i++) {     // Draws the lower edge of the circle
  70.  
  71.     g.setColor(Color.lightGray);
  72.  
  73.     g.drawLine(i, y + (int)(Math.sqrt( r*r - ( (i-x)*(i-x) ))),
  74.  
  75.            i, y + step + (int)(Math.sqrt( r*r - ( (i-x)*(i-x) ))));
  76.  
  77.   }
  78.  
  79. }
  80.  
  81.  
  82.  
  83. public void paint(Graphics g) {
  84.  
  85.   int i, j, tmp;
  86.  
  87.  
  88.  
  89.   if (bubble < AMaxnumberbubbles || thisbubble < AMaxnumberbubbles) {    
  90.  
  91.     record[thisbubble][0]=(int)(Math.random() * 500);
  92.  
  93.     record[thisbubble][1]=550;
  94.  
  95.     record[thisbubble][2]=(int)(Math.random() * 500)/20;
  96.  
  97.     record[thisbubble][3]=(int)(Math.random() * 255);
  98.  
  99.     record[thisbubble][4]=(int)(Math.random() * 255);
  100.  
  101.     draw_bubble(record[thisbubble][0],record[thisbubble][1],
  102.  
  103.         record[thisbubble][2],new java.awt.Color(record[thisbubble][3],
  104.  
  105.                            record[thisbubble][4], 255), g);
  106.  
  107.     if (bubble < AMaxnumberbubbles) {
  108.  
  109.       bubble++; thisbubble++;
  110.  
  111.     }
  112.  
  113.     else
  114.  
  115.       thisbubble = AMaxnumberbubbles;
  116.  
  117.   }
  118.  
  119.   for (i=0; i<bubble; i++) {
  120.  
  121.     if (i%5 <= stepper) { // Steps each bubble at a different speed
  122.  
  123.       record[i][1] -= 1;
  124.  
  125.       move_bubble(record[i][0], record[i][1], record[i][2], 
  126.  
  127.           new java.awt.Color(record[i][3], record[i][4], 255), 1, g);
  128.  
  129.       for (j=0; j<i; j++) {   // Checks for touching bubbles, pops one
  130.  
  131.     tmp = ( (record[i][1]-record[j][1])*(record[i][1]-record[j][1]) +
  132.  
  133.         (record[i][0]-record[j][0])*(record[i][0]-record[j][0]) );
  134.  
  135.     if (j != i && Math.sqrt(tmp) < record[i][2] + record[j][2]) {
  136.  
  137.       for (tmp = record[i][2]; tmp >= -1; tmp = tmp - 2)
  138.  
  139.         draw_bubble(record[i][0], record[i][1], record[i][2]-tmp,
  140.  
  141.             Color.lightGray, g);
  142.  
  143.       draw_bubble(record[j][0], record[j][1], record[j][2], 
  144.  
  145.               new java.awt.Color(record[j][3], record[j][4], 255), g);
  146.  
  147.       
  148.  
  149.       record[i][1] = -1; record[i][2]=0;
  150.  
  151.     }
  152.  
  153.       }
  154.  
  155.     }
  156.  
  157.     if (record[i][1]+record[i][2] < 0 && bubble >= AMaxnumberbubbles) {
  158.  
  159.       thisbubble = i;
  160.  
  161.     }
  162.  
  163.     stepper=(int)(Math.random()*10);
  164.  
  165.   }
  166.  
  167. }
  168.  
  169.  
  170.  
  171. public void update(Graphics g) {
  172.  
  173.   paint(g);
  174.  
  175. }
  176.  
  177.  
  178.  
  179. public void start() {
  180.  
  181.   if (artist == null) {
  182.  
  183.     artist = new Thread(this);
  184.  
  185.     artist.start();
  186.  
  187.   }
  188.  
  189. }
  190.  
  191.  
  192.  
  193. public void stop() {
  194.  
  195.     artist = null;
  196.  
  197. }
  198.  
  199. public void run() {
  200.  
  201.   while (artist != null) {
  202.  
  203.     try {Thread.sleep(10);} catch (InterruptedException e){}
  204.  
  205.     repaint();
  206.  
  207.   }
  208.  
  209.   artist = null;
  210.  
  211. }
  212.  
  213. }
  214.  
  215.