/**a2a(number).java by gregvan 
 * RECOMMENDED SIZE: height 520, width 740
 **/

import java.applet.*;
import java.awt.*;

public class a2a31 extends Applet implements Runnable
{

int freakout=1;
int reefer=1;
int grand=2;
int wazoo=1;
int synth=3;
int king=1;
int kong=2;
int god=1;
int a;
int abba;
int abba1=3;
int jabba;
int jabba1=4;
int lucysky=3;
int diamonds=2;
int dream=1;
int moody;
int blues=1;
int delta=1;
int threshold=1;
int chord;
int lost;

int art;
int music;
int eco;
int phase;

int bob;
int frank;
int gail=1;
int moon=1;
int joe=1;
int krsna;
int john;
int paul;
int ringo=1;
int george=1;
int martin;
int abbey;
int road;
int fred;
int zappa=1;
int lucy=1;


int rr,gg,bb;//color variables 
int bw;//black and white 


int bwq=1;      
int rq=1; // color up-down factors
int gq=1;
int bq=1;

int cx; //center of screen x
int cy; //center of screen y

        Thread    myRunner;
        Image     buffer;         
        Dimension appletSize;     
        Graphics  bufferGraphics; 

        public void init()
        {    
        setBackground(Color.black);
        appletSize = this.getSize();     
        buffer = this.createImage(appletSize.width, appletSize.height);
        bufferGraphics = buffer.getGraphics();
	cx=appletSize.width/2;
        cy=appletSize.height/2;

        }

        public void start()
        {
             if (myRunner == null)
             {
                 myRunner = new Thread(this);
                 myRunner.start();
             }
        }

        public void run()
        {
            Thread  executingThread;                   
            executingThread = Thread.currentThread();

            while (myRunner == executingThread)
            {
               //new random numbers to start animation
	 

//random starting colors
rr=(int)(Math.random() *255);
gg=(int)(Math.random() *255);
bb=(int)(Math.random() *255);
bw=(int)(Math.random() *255);
john=rr;
paul=bb;
bob=-gg;
frank=-bw;
abba=gg-rr;
jabba=bb-bw;


               repaint();
               try
               {Thread.sleep(1000);}
               catch(InterruptedException e) {} 

               while (myRunner != null)
               {
                  repaint(); 
                  try
                  {Thread.sleep(100); }
                  catch (InterruptedException e) {}
               }  
           } 
        }

       // make sure the animation really stops when exiting webpage
        public void stop()
        { 
          if (myRunner != null)
             { myRunner = null; }
        }

        //used to prevent blinking graphics....
        public void update(Graphics g)
        {paint(g);}

        public void paint(Graphics g)
        {

god=god+1;
if(god>5){god=0;}



moody=moody+blues;
if(moody>6+god){blues=-1;}
if(moody<-(5+god)){blues=1;}

dream=dream+delta;
if(dream>4+god){delta=-1;}
if(dream<-(3+god)){delta=1;}


        //for loop to paint many images before sleeping .1 second     
       for (int i=0;i<4;i++)
        {

wazoo=wazoo+synth;
if(wazoo>300){synth=-2;}
if(wazoo<6){synth=2;}

freakout=freakout+reefer;
if(freakout>14){reefer=-1;}
if(freakout<2){reefer=1;}

lost=freakout;
chord=freakout;

             //color changer up-down counters
          
if(rr>bb){fred=1;}
else{fred=16;}

       bw=bw+bwq;
           if(bw>238){bwq=-fred;}
           if(bw<18){bwq=fred;}


zappa=zappa+1;
if(zappa>4){zappa=1;}

       rr=rr+rq;
           if(rr>248){rq=-zappa;}
           if(rr<7){rq=zappa;}
       gg=gg+gq;
           if(gg>249){gq=-zappa;}
           if(gg<6){gq=zappa;}
       bb=bb+bq;
           if(bb>250){bq=-zappa;}
           if(bb<5){bq=zappa;}

lucy=lucy+1;
if (lucy>3){lucy=1;}


bob=bob+joe;
if (bob>cx+100){joe=-lucy;}
if (bob<-(cx+100)){joe=lucy;}

frank=frank+gail;
if(frank>300+cy){gail=-lucy;}
if(frank<-(300+cy)){gail=lucy;}

paul=paul+george;
if(paul>350+cx){george=-lucy;}
if(paul<-(350+cx)){george=lucy;}

john=john+ringo;
if(john>375+cy){ringo=-lucy;}
if(john<-(375+cy)){ringo=lucy;}


lucysky=lucysky+abba1;
if(lucysky>9+moody){abba1=-1;}
if(lucysky<-(9-moody)){abba1=1;}

diamonds=diamonds+jabba1;
if (diamonds>7+dream){jabba1=-1;}
if (diamonds<-(7-dream)){jabba1=1;}




abba=abba+lucysky;
if (abba>cx){abba=-cx;}
if (abba<-cx){abba=cx;}


jabba=jabba+diamonds;
if (jabba>cx){jabba=-cx;}
if (jabba<-cx){jabba=cx;}

martin=paul+john;
krsna=bob+frank;
road=paul+frank;
abbey=john+bob;

art=paul-bob;
music=frank-john;
eco=john;
phase=bob;
//**********************************

//apply the new numbers for color
Color t8New = new Color(0,0,0);
 bufferGraphics.setColor(t8New); 

for (int i5=-200;i5<=200;i5=i5+200){
martin=martin+i5;
krsna=krsna+i5;
road=road-i5-i5;
abbey=abbey-i5;

art=art-i5;
music=music+i5;
eco=eco+i5+i5;
phase=phase-i5;

bufferGraphics.drawLine(cx+art,cy+music,cx+eco,cy+phase);
bufferGraphics.drawLine(cx-art,cy-music,cx-eco,cy-phase);

bufferGraphics.drawLine(cx+music,cy-art,cx+phase,cy-eco);
bufferGraphics.drawLine(cx-music,cy+art,cx-phase,cy+eco);

bufferGraphics.drawLine(cx+art,cy+music,cx+road,cy+abbey);
bufferGraphics.drawLine(cx-art,cy-music,cx-road,cy-abbey);

bufferGraphics.drawLine(cx+music,cy-art,cx+abbey,cy-road);
bufferGraphics.drawLine(cx-music,cy+art,cx-abbey,cy+road);

bufferGraphics.drawLine(cx+martin,cy+krsna,cx+road,cy+abbey);
bufferGraphics.drawLine(cx-martin,cy-krsna,cx-road,cy-abbey);

bufferGraphics.drawLine(cx+krsna,cy-martin,cx+abbey,cy-road);
bufferGraphics.drawLine(cx-krsna,cy+martin,cx-abbey,cy+road);

art=art+i5;
music=music-i5;
eco=eco-i5-i5;
phase=phase+i5;

martin=martin-i5;
krsna=krsna-i5;
road=road+i5+i5;
abbey=abbey+i5;
}//end of i5
//*****************************************
//***************************************************
for(int i6=-wazoo;i6<=wazoo;i6=i6+wazoo+wazoo){
abba=abba-i6;
jabba=jabba+i6;

//apply the new numbers for color
        Color t0New = new Color(256-rr,256-gg,256-bb);
        bufferGraphics.setColor(t0New); 
king=1;
kong=3;

bufferGraphics.fillRect(cx+abba-king,cy+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba-king,cy-jabba-king,kong,kong);

bufferGraphics.fillRect(cx+jabba-king,cy-abba-king,kong,kong);
bufferGraphics.fillRect(cx-jabba-king,cy+abba-king,kong,kong);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bufferGraphics.fillRect(cx+abba+jabba-king,cy-abba+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba+jabba-king,cy-abba-jabba-king,kong,kong);

bufferGraphics.fillRect(cx-abba-jabba-king,cy+abba-jabba-king,kong,kong);
bufferGraphics.fillRect(cx+abba-jabba-king,cy+abba+jabba-king,kong,kong);


//apply the new numbers for color
        Color tbl0New = new Color(256-bw,gg,rr);
        bufferGraphics.setColor(tbl0New); 
king=1;
kong=2;

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
a=lost;
abba=abba-a;
jabba=jabba+a;

bufferGraphics.fillRect(cx+abba-king,cy+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba-king,cy-jabba-king,kong,kong);

bufferGraphics.fillRect(cx+jabba-king,cy-abba-king,kong,kong);
bufferGraphics.fillRect(cx-jabba-king,cy+abba-king,kong,kong);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bufferGraphics.fillRect(cx+abba+jabba-king,cy-abba+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba+jabba-king,cy-abba-jabba-king,kong,kong);

bufferGraphics.fillRect(cx-abba-jabba-king,cy+abba-jabba-king,kong,kong);
bufferGraphics.fillRect(cx+abba-jabba-king,cy+abba+jabba-king,kong,kong);

abba=abba+a;
jabba=jabba-a;

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

abba=abba+a;
jabba=jabba-a;

bufferGraphics.fillRect(cx+abba-king,cy+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba-king,cy-jabba-king,kong,kong);

bufferGraphics.fillRect(cx+jabba-king,cy-abba-king,kong,kong);
bufferGraphics.fillRect(cx-jabba-king,cy+abba-king,kong,kong);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bufferGraphics.fillRect(cx+abba+jabba-king,cy-abba+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba+jabba-king,cy-abba-jabba-king,kong,kong);

bufferGraphics.fillRect(cx-abba-jabba-king,cy+abba-jabba-king,kong,kong);
bufferGraphics.fillRect(cx+abba-jabba-king,cy+abba+jabba-king,kong,kong);

abba=abba-a;
jabba=jabba+a;




//apply the new numbers for color
       Color bNew = new Color(gg,bb,rr);
       bufferGraphics.setColor(bNew);

abba=abba+lost;
jabba=jabba+chord;
bufferGraphics.fillRect(cx+abba-king,cy+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba-king,cy-jabba-king,kong,kong);

bufferGraphics.fillRect(cx+jabba-king,cy-abba-king,kong,kong);
bufferGraphics.fillRect(cx-jabba-king,cy+abba-king,kong,kong);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bufferGraphics.fillRect(cx+abba+jabba-king,cy-abba+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba+jabba-king,cy-abba-jabba-king,kong,kong);

bufferGraphics.fillRect(cx-abba-jabba-king,cy+abba-jabba-king,kong,kong);
bufferGraphics.fillRect(cx+abba-jabba-king,cy+abba+jabba-king,kong,kong);
abba=abba-lost;
jabba=jabba-chord;



//apply the new numbers for color
        Color tNew = new Color(bb,bw,rr);
        bufferGraphics.setColor(tNew); 



abba=abba+lost+lost;
jabba=jabba+chord+chord;
bufferGraphics.fillRect(cx+abba-king,cy+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba-king,cy-jabba-king,kong,kong);

bufferGraphics.fillRect(cx+jabba-king,cy-abba-king,kong,kong);
bufferGraphics.fillRect(cx-jabba-king,cy+abba-king,kong,kong);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bufferGraphics.fillRect(cx+abba+jabba-king,cy-abba+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba+jabba-king,cy-abba-jabba-king,kong,kong);

bufferGraphics.fillRect(cx-abba-jabba-king,cy+abba-jabba-king,kong,kong);
bufferGraphics.fillRect(cx+abba-jabba-king,cy+abba+jabba-king,kong,kong);
abba=abba-lost-lost;
jabba=jabba-chord-chord;

//apply the new numbers for color
       Color b1New = new Color(bb,rr,gg);
       bufferGraphics.setColor(b1New); 



abba=abba-lost;
jabba=jabba-chord;
bufferGraphics.fillRect(cx+abba-king,cy+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba-king,cy-jabba-king,kong,kong);

bufferGraphics.fillRect(cx+jabba-king,cy-abba-king,kong,kong);
bufferGraphics.fillRect(cx-jabba-king,cy+abba-king,kong,kong);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bufferGraphics.fillRect(cx+abba+jabba-king,cy-abba+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba+jabba-king,cy-abba-jabba-king,kong,kong);

bufferGraphics.fillRect(cx-abba-jabba-king,cy+abba-jabba-king,kong,kong);
bufferGraphics.fillRect(cx+abba-jabba-king,cy+abba+jabba-king,kong,kong);
abba=abba+lost;
jabba=jabba+chord;

//apply the new numbers for color
       Color ab1New = new Color(bb,256-rr,gg);
       bufferGraphics.setColor(ab1New); 



abba=abba-lost-lost;
jabba=jabba-chord-chord;
bufferGraphics.fillRect(cx+abba-king,cy+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba-king,cy-jabba-king,kong,kong);

bufferGraphics.fillRect(cx+jabba-king,cy-abba-king,kong,kong);
bufferGraphics.fillRect(cx-jabba-king,cy+abba-king,kong,kong);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bufferGraphics.fillRect(cx+abba+jabba-king,cy-abba+jabba-king,kong,kong);
bufferGraphics.fillRect(cx-abba+jabba-king,cy-abba-jabba-king,kong,kong);

bufferGraphics.fillRect(cx-abba-jabba-king,cy+abba-jabba-king,kong,kong);
bufferGraphics.fillRect(cx+abba-jabba-king,cy+abba+jabba-king,kong,kong);
abba=abba+lost+lost;
jabba=jabba+chord+chord;


abba=abba+i6;
jabba=jabba-i6;
}//end of i6..el switcheroo!

   }//end of for loop i


     // move the entire buffer onto the display screen and change
     // pixels that are a different color...
      g.drawImage(buffer, 0, 0, this);
    }
} // end of the program...

