イルミネーション その2(赤,黄,青)


Java Applet

ソースコード

import java.applet.*;
import java.awt.*;

public class ja208a extends Applet implements Runnable
{
  Thread td = null;   	//スレッド
  ja208XY XY[];   	//オブジェクト(クラスのインスタンス)の配列
  int frg = 0;

  public void init(){
    setBackground(Color.black);		//Appletの背景色を黒色に設定
    getXY();    //メソッド呼び出し
  }

  void getXY(){   //四辺に描く円のxy座標を取得する
      //AppletのサイズはHTMLで<400*100>に設定
      //上辺には直径16ピクセルの円を,4ピクセル間隔を空け20個描く(下辺も同じ)
      //右辺に直径16ピクセルの円を,4ピクセル間隔を空け5個描く(左辺も同じ)
    XY = new ja208XY[46];   	//46個のオブジェクト配列を作成
    int x,y;
    int n = 0;    		//配列のindex番号

    //上辺の円
    y = 2;    		//上辺のy座標は固定
    for(x = 2;x <= 382;x += 20){
      XY[n++] = new ja208XY(x,y);
    }

    //右辺の円
    x = 382;  		//右辺のx座標は固定
    for(y = 22;y <= 62;y += 20){
        //最上部と最下部の円は,上辺,下辺の円と重複するので除く
      XY[n++] = new ja208XY(x,y);
    }

    //下辺の円
    y = 82;
    for(x = 382;x >= 2;x -= 20){
      XY[n++] = new ja208XY(x,y);
    }

    //左辺の円
    x = 2;
    for(y = 62;y >= 22;y -= 20){
      XY[n++] = new ja208XY(x,y);
    }
  }

  public void update(Graphics g){    //四辺の円を描画する
    int n = 0;
      //スレッド実行されるたびに変数frgは1増加する。これを利用しnを0,1,2,0,1,2,0。。。と変化さす。
      //nが変化することで,スレッドの度に色が赤,黄,青と繰り返し変化する。
    if(frg % 3 == 2)n = 1;
    if(frg % 3 == 1)n = 2;
    if(frg % 3 == 0)n = 0;

    for(int i = 0;i < 46;i++){  	//全ての円の配列をループする
      if(++n == 3)n = 0;
      if(n == 1){ 
        g.setColor(Color.red);
        g.fillOval(XY[i].x,XY[i].y,16,16);
      }else if(n == 2){
        g.setColor(Color.yellow);
        g.fillOval(XY[i].x,XY[i].y,16,16);
      }else{
        g.setColor(Color.blue);
        g.fillOval(XY[i].x,XY[i].y,16,16);
      }
    }
    g.setFont(new Font("TimesRoman",Font.BOLD,35));
    g.setColor(Color.pink);
    g.drawString("Kodayan HomePage",45,60);
    
    paint(g);
  }

  public void start(){
    if(td == null){
      td = new Thread(this);
      td.start();
    }
  }

  public void run(){
    while(true){
      try{
        repaint();
        frg++;
        if(frg > 101)frg = 0;
        Thread.sleep(300);		//0.3秒だけスレッドを停止する。
      }catch (InterruptedException e){			
	  stop();		//スレッドの実行を中止
      }
    }
  }

  public void stop(){
    if (td != null){
	td.stop();
	td = null;
    }
  }
}

class ja208XY   //x,yの値を保持するクラス
{
  public int x;
  public int y;

  public ja208XY(int x,int y){
    this.x = x;
    this.y = y;
  }
}

末尾