/**a8waystar(number).java by gregvan 
 * RECOMMENDED SIZE: height 560, width 760
 **/

import java.applet.*;
import java.awt.*;

public class a8waystar72 extends Applet implements Runnable
{
int sam=1;
int tom=1;
int tom3=1;
int pat=1;
int pat3=1;
int bob=1;
int moe=1;
int moe3=1;
int joe3=1;
int joe=1;
int q2=4;
int q3=8;
int q4=1;
int qqq=1;
int xx,yy;
int xxf=1;
int yyf=1;
int q=2;
int qq=1;
int qfac=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 gv;
int gvb;
int wf=1;
int wwf=1;
int w,ww;
int wwq,wq;
int jomamma;
int tf=1;
int ttf=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);
xx=bw;
yy=rr;

w=(int)(Math.random() *15);
ww=(int)(Math.random() *13);

               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)
        {

pat=pat+pat3;
if(pat>200){pat3=-2;}
if(pat<-200){pat3=1;}
jomamma=jomamma+1;
if (jomamma>12){jomamma=0;}
w=w+wf;
if (w>5+jomamma){wf=-1;}
if (w<2){wf=2;}

ww=ww+wwf;
if(ww>4+jomamma){wwf=-1;}
if(ww<2){wwf=1;}
 for (int i8=0;i8<2;i8++)
        {
tom=tom+tom3;
if(tom>11){tom3=-1;}
if(tom<-14){tom3=1;}

             //for loop to paint many images before sleeping .1 second     
       for (int i=0;i<3;i++)
        {

 
             //color changer up-down counters
           rr=rr+rq;
           if(rr>253){rq=-1;}
           if(rr<3){rq=1;}
	bw=bw+bwq;
           if(bw>250){bwq=-3;}
           if(bw<8){bwq=2;}
         gg=gg+gq;
           if(gg>250){gq=-1;}
           if(gg<5){gq=3;}

           bb=bb+bq;
           if(bb>251){bq=-1;}
           if(bb<4){bq=2;}
  wq=wq+tf;
if(wq>w){tf=-1;}
if(wq<-6){tf=1;}


wwq=wwq+ttf;
if(wwq>6){ttf=-1;}
if(wwq<-ww){ttf=1;}

xx=xx+(xxf*wq);
if (xx>cy){xxf=-1;}
if (xx<-cy){xxf=1;}
if (xx>(cx-50)){xx=0;}
if (xx<-(cx-50)){xx=0;}

yy=yy+(yyf*wwq);
if(yy>cy){yyf=-1;}
if(yy<-cy){yyf=1;}
if(yy>(cx-50)){yy=0;}
if(yy<-(cx-50)){yy=0;}




qfac=qfac+qqq;
if(qfac>21+tom){qqq=-1;}
if(qfac<-(22-tom)){qqq=1;}

joe=joe+joe3;
if(joe>16-tom){joe3=-1;}
if(joe<-(14-tom)){joe3=1;}

moe=moe+moe3;
if(moe>18+tom){moe3=-1;}
if(moe<-(17+tom)){moe3=1;}

bob=moe*joe;

xx=xx+joe;
yy=yy-moe;
//stars, big
//apply the new numbers for big stars
        Color wNew = new Color(bw,bb,rr);
        bufferGraphics.setColor(wNew); 

bufferGraphics.fillRect(cx-yy-1,cy-xx-1,2,2);
bufferGraphics.fillRect(cx-xx-1,cy+yy-1,2,2);
bufferGraphics.fillRect(cx+yy-1,cy+xx-1,2,2);
bufferGraphics.fillRect(cx+xx-1,cy-yy-1,2,2);
//apply the new numbers for big stars
        Color w1New = new Color(bb,gg,rr);
        bufferGraphics.setColor(w1New); 
bufferGraphics.fillRect(cx-yy-xx-1,cy+yy-xx-1,2,2);
bufferGraphics.fillRect(cx+yy-xx-1,cy+yy+xx-1,2,2);
bufferGraphics.fillRect(cx+yy+xx-1,cy-yy+xx-1,2,2);
bufferGraphics.fillRect(cx-yy+xx-1,cy-yy-xx-1,2,2);
//apply the new numbers for big stars
        Color w2New = new Color(bb,gg,bw);
        bufferGraphics.setColor(w2New); 
bufferGraphics.fillRect(cx-yy-xx-xx-1,cy+yy-xx-1,2,2);
bufferGraphics.fillRect(cx+yy-xx-1,cy+yy+xx+xx-1,2,2);
bufferGraphics.fillRect(cx+yy+xx+xx-1,cy-yy+xx-1,2,2);
bufferGraphics.fillRect(cx-yy+xx-1,cy-yy-xx-xx-1,2,2);

//stars,colored
//apply the new numbers for stars
        Color xNew = new Color(gg,bb,rr);
        bufferGraphics.setColor(xNew); 
xx=xx+joe;
yy=yy+qfac+qfac;
q=0;


bufferGraphics.drawLine(cx-yy,cy-xx,cx-yy-q,cy-xx-q);
bufferGraphics.drawLine(cx-xx,cy+yy,cx-xx-q,cy+yy+q);
bufferGraphics.drawLine(cx+yy,cy+xx,cx+yy+q,cy+xx+q);
bufferGraphics.drawLine(cx+xx,cy-yy,cx+xx+q,cy-yy-q);

bufferGraphics.drawLine(cx-yy-xx,cy+yy-xx,cx-yy-xx+q,cy+yy-xx-q);
bufferGraphics.drawLine(cx+yy-xx,cy+yy+xx,cx+yy-xx+q,cy+yy+xx-q);
bufferGraphics.drawLine(cx+yy+xx,cy-yy+xx,cx+yy+xx+q,cy-yy+xx-q);
bufferGraphics.drawLine(cx-yy+xx,cy-yy-xx,cx-yy+xx+q,cy-yy-xx-q);
//~~~~~~~~
bufferGraphics.drawLine(cx-yy-xx-xx,cy+yy-xx,cx-yy-xx-xx+q,cy+yy-xx-q);
bufferGraphics.drawLine(cx+yy-xx,cy+yy+xx+xx,cx+yy-xx+q,cy+yy+xx+xx-q);
bufferGraphics.drawLine(cx+yy+xx+xx,cy-yy+xx,cx+yy+xx+xx+q,cy-yy+xx-q);
bufferGraphics.drawLine(cx-yy+xx,cy-yy-xx-xx,cx-yy+xx+q,cy-yy-xx-xx-q);
xx=xx-joe;
yy=yy-qfac-qfac;

//stars,colored
//apply the new numbers for stars
        Color xzNew = new Color(bb,rr,gg);
        bufferGraphics.setColor(xzNew); 
xx=xx-joe;
yy=yy-qfac;


bufferGraphics.drawLine(cx-yy,cy-xx,cx-yy-q,cy-xx-q);
bufferGraphics.drawLine(cx-xx,cy+yy,cx-xx-q,cy+yy+q);
bufferGraphics.drawLine(cx+yy,cy+xx,cx+yy+q,cy+xx+q);
bufferGraphics.drawLine(cx+xx,cy-yy,cx+xx+q,cy-yy-q);

bufferGraphics.drawLine(cx-yy-xx,cy+yy-xx,cx-yy-xx+q,cy+yy-xx-q);
bufferGraphics.drawLine(cx+yy-xx,cy+yy+xx,cx+yy-xx+q,cy+yy+xx-q);
bufferGraphics.drawLine(cx+yy+xx,cy-yy+xx,cx+yy+xx+q,cy-yy+xx-q);
bufferGraphics.drawLine(cx-yy+xx,cy-yy-xx,cx-yy+xx+q,cy-yy-xx-q);
//~~~~~~~~
bufferGraphics.drawLine(cx-yy-xx-xx,cy+yy-xx,cx-yy-xx-xx+q,cy+yy-xx-q);
bufferGraphics.drawLine(cx+yy-xx,cy+yy+xx+xx,cx+yy-xx+q,cy+yy+xx+xx-q);
bufferGraphics.drawLine(cx+yy+xx+xx,cy-yy+xx,cx+yy+xx+xx+q,cy-yy+xx-q);
bufferGraphics.drawLine(cx-yy+xx,cy-yy-xx-xx,cx-yy+xx+q,cy-yy-xx-xx-q);

xx=xx+joe;
yy=yy+qfac;
//~~~~~~~~~~
//stars,colored
//apply the new numbers for stars
        Color xz2New = new Color(gg,gg,gg);
        bufferGraphics.setColor(xz2New); 
xx=xx+joe;
yy=yy-moe;


bufferGraphics.drawLine(cx-yy,cy-xx,cx-yy-q,cy-xx-q);
bufferGraphics.drawLine(cx-xx,cy+yy,cx-xx-q,cy+yy+q);
bufferGraphics.drawLine(cx+yy,cy+xx,cx+yy+q,cy+xx+q);
bufferGraphics.drawLine(cx+xx,cy-yy,cx+xx+q,cy-yy-q);

bufferGraphics.drawLine(cx-yy-xx,cy+yy-xx,cx-yy-xx+q,cy+yy-xx-q);
bufferGraphics.drawLine(cx+yy-xx,cy+yy+xx,cx+yy-xx+q,cy+yy+xx-q);
bufferGraphics.drawLine(cx+yy+xx,cy-yy+xx,cx+yy+xx+q,cy-yy+xx-q);
bufferGraphics.drawLine(cx-yy+xx,cy-yy-xx,cx-yy+xx+q,cy-yy-xx-q);
//~~~~~~~~
bufferGraphics.drawLine(cx-yy-xx-xx,cy+yy-xx,cx-yy-xx-xx+q,cy+yy-xx-q);
bufferGraphics.drawLine(cx+yy-xx,cy+yy+xx+xx,cx+yy-xx+q,cy+yy+xx+xx-q);
bufferGraphics.drawLine(cx+yy+xx+xx,cy-yy+xx,cx+yy+xx+xx+q,cy-yy+xx-q);
bufferGraphics.drawLine(cx-yy+xx,cy-yy-xx-xx,cx-yy+xx+q,cy-yy-xx-xx-q);

xx=xx-joe;
yy=yy+moe;
//~~~~~~~~~~~~~~
//stars,colored
//apply the new numbers for stars
        Color xz3New = new Color(rr,gg,bb);
        bufferGraphics.setColor(xz3New); 
xx=xx-bob;
yy=yy+moe;


bufferGraphics.drawLine(cx-yy,cy-xx,cx-yy-q,cy-xx-q);
bufferGraphics.drawLine(cx-xx,cy+yy,cx-xx-q,cy+yy+q);
bufferGraphics.drawLine(cx+yy,cy+xx,cx+yy+q,cy+xx+q);
bufferGraphics.drawLine(cx+xx,cy-yy,cx+xx+q,cy-yy-q);

bufferGraphics.drawLine(cx-yy-xx,cy+yy-xx,cx-yy-xx+q,cy+yy-xx-q);
bufferGraphics.drawLine(cx+yy-xx,cy+yy+xx,cx+yy-xx+q,cy+yy+xx-q);
bufferGraphics.drawLine(cx+yy+xx,cy-yy+xx,cx+yy+xx+q,cy-yy+xx-q);
bufferGraphics.drawLine(cx-yy+xx,cy-yy-xx,cx-yy+xx+q,cy-yy-xx-q);
//~~~~~~~~
bufferGraphics.drawLine(cx-yy-xx-xx,cy+yy-xx,cx-yy-xx-xx+q,cy+yy-xx-q);
bufferGraphics.drawLine(cx+yy-xx,cy+yy+xx+xx,cx+yy-xx+q,cy+yy+xx+xx-q);
bufferGraphics.drawLine(cx+yy+xx+xx,cy-yy+xx,cx+yy+xx+xx+q,cy-yy+xx-q);
bufferGraphics.drawLine(cx-yy+xx,cy-yy-xx-xx,cx-yy+xx+q,cy-yy-xx-xx-q);

xx=xx+bob;
yy=yy-moe;

//~~~~~~~~~~~new black dots~~~~~~~~
//stars, black
//apply the new numbers for black 
        Color zNew = new Color(0, 0, 0);
        bufferGraphics.setColor(zNew); 


xx=xx-pat;
yy=yy-pat;
q2=3;
q3=6;

bufferGraphics.fillRect(cx-yy-q2,cy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx-xx-q2,cy+yy-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-q2,cy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+xx-q2,cy-yy-q2,q3,q3);

bufferGraphics.fillRect(cx-yy-xx-q2,cy+yy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-xx-q2,cy+yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy+xx-q2,cy-yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx-yy+xx-q2,cy-yy-xx-q2,q3,q3);
//~~~~~~~~
bufferGraphics.fillRect(cx-yy-xx-xx-q2,cy+yy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-xx-q2,cy+yy+xx+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy+xx+xx-q2,cy-yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx-yy+xx-q2,cy-yy-xx-xx-q2,q3,q3);

//~~~~~~~
xx=xx-joe;
yy=yy+bob;
bufferGraphics.fillRect(cx-yy-q2,cy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx-xx-q2,cy+yy-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-q2,cy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+xx-q2,cy-yy-q2,q3,q3);

bufferGraphics.fillRect(cx-yy-xx-q2,cy+yy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-xx-q2,cy+yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy+xx-q2,cy-yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx-yy+xx-q2,cy-yy-xx-q2,q3,q3);
//~~~~~~~~
bufferGraphics.fillRect(cx-yy-xx-xx-q2,cy+yy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-xx-q2,cy+yy+xx+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy+xx+xx-q2,cy-yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx-yy+xx-q2,cy-yy-xx-xx-q2,q3,q3);
xx=xx+joe;
yy=yy-bob;


//~~~~~~~
xx=xx+bob;
yy=yy-bob;
bufferGraphics.fillRect(cx-yy-q2,cy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx-xx-q2,cy+yy-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-q2,cy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+xx-q2,cy-yy-q2,q3,q3);

bufferGraphics.fillRect(cx-yy-xx-q2,cy+yy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-xx-q2,cy+yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy+xx-q2,cy-yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx-yy+xx-q2,cy-yy-xx-q2,q3,q3);
//~~~~~~~~
bufferGraphics.fillRect(cx-yy-xx-xx-q2,cy+yy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-xx-q2,cy+yy+xx+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy+xx+xx-q2,cy-yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx-yy+xx-q2,cy-yy-xx-xx-q2,q3,q3);
xx=xx-bob;
yy=yy+bob;
//~~~~~~~~~~~

//~~~~~~~
xx=xx-bob;
yy=yy-bob;
bufferGraphics.fillRect(cx-yy-q2,cy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx-xx-q2,cy+yy-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-q2,cy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+xx-q2,cy-yy-q2,q3,q3);

bufferGraphics.fillRect(cx-yy-xx-q2,cy+yy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-xx-q2,cy+yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy+xx-q2,cy-yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx-yy+xx-q2,cy-yy-xx-q2,q3,q3);
//~~~~~~~~
bufferGraphics.fillRect(cx-yy-xx-xx-q2,cy+yy-xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy-xx-q2,cy+yy+xx+xx-q2,q3,q3);
bufferGraphics.fillRect(cx+yy+xx+xx-q2,cy-yy+xx-q2,q3,q3);
bufferGraphics.fillRect(cx-yy+xx-q2,cy-yy-xx-xx-q2,q3,q3);
xx=xx+bob;
yy=yy+bob;
//~~~~~~~~~~~
xx=xx+pat;
yy=yy+pat;


xx=xx-joe;
yy=yy+moe;


   }//end of for loop i
}//end of i8 for loop
     // 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...

