/* 
	Simple.java

	java basics, 15-19.11.1999, juhuu@katastro.fi
*/

import java.applet.Applet;
import java.awt.*;

import java.net.*;
import java.util.Random;

public class fontti extends Applet implements Runnable {
  Image		imageDoubleBuffer;
  Graphics	gDoubleBuffer;
  Thread	engine = null;

  int		x, y, xstr, ystr;
  int		mousex, mousey;
  int 		s_size;
  String	s = "+01+";
   String	s2 = "-10-";
  
  String	snum = "";
  
  boolean 	mouse_down;
    boolean 	mouse_move;
  boolean b = true;
	
  Image 	imgPic;
  Image 	imgBackground;
  Random	rand;

  public void init() {
      // initialize double buffering
      imageDoubleBuffer = createImage(size().width, size().height);
      gDoubleBuffer = imageDoubleBuffer.getGraphics();
      gDoubleBuffer.setColor(Color.white);
      gDoubleBuffer.fillRect(0, 0, size().width, size().height);

      mousex 	= 0;
      mousey 	= 0;
      
      s_size = 5;

      rand 	= new Random();

      x 	= 250;
      y 	= 250;


		
		

	  gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,s_size));

      mouse_down = false;

      // let's load an image

      imgPic = null;

      String sBackground = "room.jpg";
      String sPic = "cursor.jpg";

      MediaTracker med = new MediaTracker(this);

      imgPic = getImage(getDocumentBase(), sPic);
      med.addImage(imgPic, 0);

      imgBackground = getImage(getDocumentBase(), sBackground);
      med.addImage(imgBackground, 1);

      try
      {
  	  med.waitForAll();
      }	catch (InterruptedException e) {
      }
  }

//----------------------------------------------------

  public void paint(Graphics g) {

	// clear the screen
//    	gDoubleBuffer.setColor(Color.white);
//    	gDoubleBuffer.fillRect(0, 0, size().width, size().height);


	Integer int_object = new Integer(s_size);
	String snum = int_object.toString();

	

	if (imgBackground != null)
	{
		gDoubleBuffer.drawImage(imgBackground, 0, 0, null);
	
	

	}
	
	
	
	
	if(mouse_down){
	
	
	
	if (s_size <450 ) {
			
			
			gDoubleBuffer.setColor(Color.black);	
			
			gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,s_size));
			
			gDoubleBuffer.drawString(s, mousex+4, mousey+4);
	
			s_size++;
			
			gDoubleBuffer.setColor(Color.white);	
			
			gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,s_size));
			
			gDoubleBuffer.drawString(s, mousex+1, mousey+1);
	
			
			/*
			gDoubleBuffer.setColor(Color.black);
	gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,10));
	gDoubleBuffer.drawString(, 10, 320);*/
	
	
	}
	
	else {
	s_size=5;
	
	
	
	}
	
	}
	
	else {
	
	
	
	if (b==true)
	{
	
	
	
	 x 	= (int) (rand.nextDouble() * (size().width - 200));
      y 	= (int) (rand.nextDouble() * (size().height -50));

	/*
	snum= toString[(s_size)];
	gDoubleBuffer.setColor(Color.black);
	gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,10));
	gDoubleBuffer.drawString(snum, 10, 320);*/
	
	
	if (s_size > 10 ) {
	
	
	
	
	gDoubleBuffer.setColor(Color.black);		
	gDoubleBuffer.setFont(new Font("Impact",Font.PLAIN,s_size));
	gDoubleBuffer.drawString(s, x, y);
	s_size--;
	gDoubleBuffer.setColor(Color.white);		
	gDoubleBuffer.setFont(new Font("Impact",Font.PLAIN,s_size));
	gDoubleBuffer.drawString(s, x, y);
	
	}
	

	
	else {
	s_size=10;
	gDoubleBuffer.setColor(Color.white);		
	gDoubleBuffer.setFont(new Font("Impact",Font.PLAIN,s_size));
	gDoubleBuffer.drawString(s, x, y);
	
	}
	
	b=false;
	}



	
	
	else {
	
	int sign=1;
	
	x=(x+1)* sign;
	
	if (x>100) {
		sign = -1;
		}
		else if (x < -50) {
		sign = 1;
		
		}	
	
	
	gDoubleBuffer.setColor(Color.white);		
	gDoubleBuffer.setFont(new Font("Impact",Font.ITALIC,s_size));
	gDoubleBuffer.drawString(s, x, y);
	
	
	}
	
	b=true;
	}
	
	
	gDoubleBuffer.setColor(Color.black);	
			
	gDoubleBuffer.setFont(new Font("webdings",Font.PLAIN,30));
			
	gDoubleBuffer.drawString(snum, 8, 313);
	gDoubleBuffer.setColor(Color.white);	
			
	gDoubleBuffer.setFont(new Font("webdings",Font.PLAIN,30));
			
	gDoubleBuffer.drawString(snum, 10, 310);
	
	
/*	
	
if (s_size < 50){	
	
	if (b){
	
	b = false;
	
	int i = 1;

	while (i<4)
	{

	for(int n = 1;n < 5 ; n++)
		{
		
		s_size++;
		
		   gDoubleBuffer.setColor(Color.white);	
			
			gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,s_size));
			
			gDoubleBuffer.drawString(s, x, y);
		}







	for(int n = 1;n < 10 ; n++)
		{
		
		s_size++;
		
		   gDoubleBuffer.setColor(Color.red);	
			
			gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,s_size));
			
			gDoubleBuffer.drawString(s, x, y);
		}


	i++;

	}

	}
	
	else {	
	
	x++;
	y++;
	
	int j=1;
	
	while (j<4)
	{

	for(int n = 1;n < 5 ; n++)
		{
		
		s_size--;
		
		   gDoubleBuffer.setColor(Color.white);	
			
			gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,s_size));
			
			gDoubleBuffer.drawString(s, x, y);
		}







	for(int n = 1;n < 10 ; n++)
		{
		
		s_size=s_size+3;
		
		   gDoubleBuffer.setColor(Color.black);	
			
			gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,s_size));
			
			gDoubleBuffer.drawString(s, x, y);
		}


	j++;

	}

	}
		

}	
*/

	
		gDoubleBuffer.setFont(new Font("Impact",Font.BOLD,s_size));
	

	// draw all the stuff from the double buffer to the screen
	g.drawImage(imageDoubleBuffer, 0, 0, null);	
	/*g.drawString(s, xstr, ystr);*/
			
  
}

//----------------------------------------------------


  // start the applet
  public void start() {
      if (engine == null) {
          engine = new Thread(this);
          engine.start();
      }
      showStatus(getAppletInfo());
  } 

  // stop the applet
  public void stop() {
     if (engine != null && engine.isAlive())
     {
         engine.stop();
     } 
     engine = null; 
  }

  public void run()
  {                  
     while (true)
     {
         try
         {
             repaint();
             Thread.sleep(10);
         } catch (InterruptedException e) {
             stop();
         }
     }                                  
  }

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

  // print to the console & browserstatus
  private void print(String s) {
    System.out.println(s); 		// console
    showStatus(s);         		// browser status  
  }

//---

  public boolean mouseDown(Event e, int x, int y) {
	mouse_down = true;
	
	return true;  
  }

  public boolean mouseUp(Event e, int x, int y) {
	mouse_down = false;
	b=true;
	return true;  
  }

  public boolean mouseMove(Event e, int x, int y)
  {
	mousex = x;
	mousey = y;
	return true;  
  }

  public boolean mouseDrag(Event e, int x, int y)
  {
	mousex = x;
	mousey = y;
	return true;  
  }


//---

}
