                                      /* copyright Arto Wikla 1997 */
import java.applet.Applet;
import java.awt.*;

public class OtusKarkaa extends Applet {

  Color taustavari = Color.yellow, 
        otusvari = Color.black;

  private int x, y, uusiX, uusiY;
  private boolean hymyilee, punastuu;
  private int lkm;

  private void tulostaOtus(Graphics g) {
    g.drawRect(0, 0, size().width-1, size().height-1);
    g.drawString("Ota minut kiinni ja clickaa!", 5,15);
    g.drawString("Onnistumiskertoja: "+lkm, 5,30);

    g.drawOval(x-35,y-35, 70,70); // kasvot
    g.drawOval(x-17,y-15, 10,7);  // silmät
    g.drawOval(x+9,y-15, 10,7);

    if (hymyilee)
      g.drawArc(x-20,y-10, 40, 30, -60, -60);
    else
      g.drawArc(x-20,y+20, 40, 30, 60, 60);
    if (punastuu) {
      g.setColor(Color.red);
      g.fillOval(x-27,y+3, 7,7);
      g.fillOval(x+19,y+4, 7,7);
      g.setColor(otusvari);
    }
  }

  public void init() {
    x = uusiX = size().width/2;
    y = uusiY = size().height/2;
    hymyilee = false;
    punastuu = false;
    lkm = 0;
    setBackground(taustavari);
  }

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

  public void update(Graphics g) {
    g.clearRect(125,16,70,150);
    g.clearRect(x-40,y-40,80,80);
    x = uusiX;
    y = uusiY;
    tulostaOtus(g);
  }


  private double etaisyys(int x, int y) {
    int x2 = (this.x-x)*(this.x-x);
    int y2 = (this.y-y)*(this.y-y);
    return Math.sqrt(x2+y2);
  }

  public boolean mouseDown(Event e, int x, int y) {
    double etaisyys = etaisyys(x,y);
    if (etaisyys < 30) 
      ++lkm;
    repaint();
    return true;
  }

  public boolean mouseMove(Event e, int x, int y) {
    double etaisyys = etaisyys(x,y);
    boolean muuttui;
    if (etaisyys < 45) {
      uusiX = (int)(Math.random()*size().width);
      uusiY = (int)(Math.random()*size().height);
      muuttui = true;
    }
    else if (etaisyys < 55) {
      muuttui = !punastuu;
      punastuu = true;
    }
    else if (etaisyys < 100) {
      muuttui = !hymyilee || punastuu;
      hymyilee = true;
      punastuu = false;
    }
    else {
     muuttui = hymyilee || punastuu;
     hymyilee = false;
     punastuu = false;
    }
    if (muuttui)
      repaint();
    return true;
  }

  public boolean mouseDrag(Event e, int x, int y) {
    return mouseMove(e, x, y);
  }

} 

