/*******************************************
 * SE450-101                               *
 * Objected-Oriented Software Development  *
 * Assignment #2                           *
 * Shuang Xu                               *
 * This is a modified Blinking Applet 2    *
 * See the brief summary in my HTML file.  *
 *******************************************/
import java.awt.*;
import java.util.StringTokenizer;

public class MyBlink extends java.applet.Applet implements Runnable {
  Thread blinkThread;
  String blinkingtext;
  Font font;
  int speed;

  public void init() {
    font = new Font("TimesRoman", Font.BOLD, 36);
    speed = 800;
    blinkingtext = "清 心 也 可 以"; 
	// if you can not see the above string, sorry, they are Chinese Characters
  }
    
  public void paint(Graphics g) {
    int x = 0, y = font.getSize(), space;
    int red = (int)(Math.random() * 50);
    int green = (int)(Math.random() * 100 + 150);
    int blue = (int)(Math.random() * 150 + 50);
    Dimension d = getSize();
    
    g.setColor(Color.black);
	g.fillRect(0, 0, d.width, d.height);
    g.setFont(font);
    FontMetrics fm = g.getFontMetrics();
    space = fm.stringWidth(" ");
    for (StringTokenizer t = new StringTokenizer(blinkingtext); 
	 t.hasMoreTokens() ; ) {
      String word = t.nextToken();
      //int w = fm.stringWidth(word) + space;
	  int w = fm.stringWidth(word);
      if (x + w > d.width) {
	  x = 0;
	  y += font.getSize();
      }
      if (Math.random() < 0.5) {
/*    g.setColor(new Color((red + y * 30) % 256, 
			     (green + x / 3) % 256, 
			     blue));
*/	  g.setColor(new Color((red + y * 30) % 256, 
			     (green + x * 15) % 256, 
			     (blue + y * 45) % 256));
      } 
	  else {
	  //g.setColor(getBackground());
	  g.setColor(Color.black);
      }
      g.drawString(word, x, y);
      x += w + space;
    }
  }
  
  public void start() {
    blinkThread = new Thread(this);
    blinkThread.start();
  }
  
  public void stop() {
    blinkThread = null;
  }
  
  public void run() {
    while (Thread.currentThread() == blinkThread) {
      repaint();
      try { 
	Thread.currentThread().sleep(speed); 
      } 
      catch (InterruptedException e){}
    }
  }
}


