/*
 * Scrivere un Applet java che disegni un quadrato centrato in un punto scelto dal programmatore 
 * il cui vertice segua il mouse, quando e' nell'area dell'applet stesso.
 */
import java.awt.*;         // Le classi per il disegno
import java.applet.Applet; // La superclasse

public class quadrati extends Applet {

private final int X = 150;    // Centro del quadrato (X)
private final int Y = 75;     // Centro del quadrato (Y)
private final int SCIA = 10;  // Quanti quadrati visualizzo?
private int lifo [][];        // Array di vertici
private int curpos = 0;       // Coordinate correnti del vertice

  public void init () {                         // Metodo chiamato all'avvio dell'applet
  int i;
    lifo = new int [SCIA][];
    for (i = 0; i < SCIA; i++) {
      lifo [i] = new int [2];
      lifo [i][0] = X/2;
      lifo [i][1] = Y/2;
    }
  };

  // Per trovare gli applet sempre 'a posto' ogni volta che rientro nella finestra
  public void start () {
  int i;
    for (i = 0; i < SCIA; i++) {
      lifo [i][0] = X/2;
      lifo [i][1] = Y/2;
    }
  }

  public boolean mouseMove (Event evt, int x, int y) { // Risponde al mouse
    lifo [curpos][0] = x;      // La nuova x e' la media tra la posizione attuale e quella del mouse
    lifo [curpos][1] = y;      // La nuova y e' la media tra la posizione attuale e quella del mouse
    curpos ++;                 // Prossimo elemento del lifo
    if (curpos >= SCIA)        // Se esce dal lifo
      curpos = 0;              // Ritorna dall'inizio
    repaint ();                // Ordino di ridisegnare l'area dell'Applet
    return true;               // Ritorno 'true' per dire che ho gestito l'evento
  };

  void quadrato (Graphics g, int xo, int yo) {
    int deltax = xo - X;    // Calcola la differenza tra il mouse e il centro
    int deltay = yo - Y;
    // Calcola i quattro vertici e ci traccia le linee
    g.drawLine(X + deltax, Y + deltay, X + deltay, Y - deltax);
    g.drawLine(X + deltay, Y - deltax, X - deltax, Y - deltay);
    g.drawLine(X - deltax, Y - deltay, X - deltay, Y + deltax);
    g.drawLine(X - deltay, Y + deltax, X + deltax, Y + deltay);
  };
                       
  synchronized public void paint(Graphics g) { // Metodo invocato per ridisegnare l'Applet
  int i;
    for (i = 0; i < SCIA; i++) {
      quadrato (g, lifo [i][0], lifo [i][1]);  // Disegno i singoli quadrati
    }
  };
}