import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class toy extends Applet
   implements MouseListener, MouseMotionListener {

   int width, height;
   int mx, my;  // the mouse coordinates
   boolean isButtonPressed = false;
int rr,gg,bb;
int w,ww,zappa;
int dx,dy;
int xx,yy;
   public void init() {
      width = getSize().width;
      height = getSize().height;
      setBackground( Color.black );

      mx = width/2; //changes to new position
      my = height/2;
      dx = width/2; //center of screen
      dy = height/2;

      addMouseListener( this );
      addMouseMotionListener( this );
   }

   public void mouseEntered( MouseEvent e ) {
      // called when the pointer enters the applet's rectangular area
   }
   public void mouseExited( MouseEvent e ) {
      // called when the pointer leaves the applet's rectangular area
   }
   public void mouseClicked( MouseEvent e ) {
      // called after a press and release of a mouse button
      // with no motion in between
      // (If the user presses, drags, and then releases, there will be
      // no click event generated.)
   }
   public void mousePressed( MouseEvent e ) {  // called after a button is pressed down
      isButtonPressed = true;
      setBackground( Color.gray );
      repaint();
      // "Consume" the event so it won't be processed in the
      // default manner by the source which generated it.
      e.consume();
   }
   public void mouseReleased( MouseEvent e ) {  // called after a button is released
      isButtonPressed = false;
      setBackground( Color.black );
      repaint();
      e.consume();
   }
   public void mouseMoved( MouseEvent e ) {  // called during motion when no buttons are down
      mx = e.getX();
      my = e.getY();
      showStatus( "Mouse at (" + mx + "," + my + ")" );
      repaint();
      e.consume();
   }
   public void mouseDragged( MouseEvent e ) {  // called during motion with buttons down
      mx = e.getX();
      my = e.getY();
      showStatus( "Mouse at (" + mx + "," + my + ")" );
      repaint();
      e.consume();
   }

   public void paint( Graphics g ) {
      

zappa=zappa+1;
if(zappa>12){zappa=1;}
xx=dx-mx;
yy=dy-my;

for(int cat=-60;cat<61;cat=cat+20)
{
rr=rr+1;
if(rr>255){rr=30;}
gg=gg+2;
if(gg>253){gg=30;}
bb=bb+1;
if(bb>250){bb=30;}
for(int kk=-45; kk<46; kk=kk+15)
{

 Color cNew = new Color(rr, gg, bb);
  g.setColor(cNew);       
xx=xx+kk+kk-cat;
yy=yy-kk+cat;


w=w+1;
if (w >zappa){w=1;}
ww=w+w;

//set1
      g.fillRect(dx- xx-w,dy- yy-w, ww, ww );
g.fillRect(dx+ xx-w,dy+ yy-w,ww, ww );
      g.fillRect(dx+ xx-w,dy- yy-w, ww, ww );
g.fillRect(dx- xx-w,dy+ yy-w, ww, ww );
//set2
      g.fillRect(dx- yy-w,dy- xx-w, ww, ww );
g.fillRect(dx+ yy-w,dy+ xx-w, ww, ww );
      g.fillRect(dx+ yy-w,dy- xx-w, ww, ww );
g.fillRect(dx- yy-w,dy+ xx-w, ww, ww );
Color qNew = new Color(bb, rr, gg);
  g.setColor(qNew); 
xx=xx+100;
yy=yy+100;
//oval set1
      g.fillOval(dx- xx-w,dy- yy-w, ww, ww );
g.fillOval(dx+ xx-w,dy+ yy-w, ww, ww );
      g.fillOval(dx+ xx-w,dy- yy-w, ww, ww );
g.fillOval(dx- xx-w,dy+ yy-w, ww, ww );
//set2
      g.fillOval(dx- yy-w,dy- xx-w, ww, ww );
g.fillOval(dx+ yy-w,dy+ xx-w, ww, ww );
      g.fillOval(dx+ yy-w,dy- xx-w, ww, ww );
g.fillOval(dx- yy-w,dy+ xx-w, ww, ww );
xx=xx-100;
yy=yy-100;
xx=xx-kk-kk+cat;
yy=yy+kk-cat;
}
}
   }
}
