イルミネーション その3(赤と黄色の点滅)


Java Applet

ソースコード

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

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

  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;

    if(frg){    //boolean変数frgがtrueの時
      for(int i = 0;i < 46;i += 2){  	//偶数Index番号の配列だけ黄色で描画
        g.setColor(Color.yellow);
        g.fillOval(XY[i].x,XY[i].y,16,16);
      }
      for(int i = 1;i < 46;i += 2){  	//奇数Index番号の配列だけ赤色で描画
        g.setColor(Color.red);
        g.fillOval(XY[i].x,XY[i].y,16,16);
      }
    }else{      //boolean変数frgがfalseの時
      for(int i = 0;i < 46;i += 2){  	//偶数Index番号の配列だけ赤色で描画
        g.setColor(Color.red);
        g.fillOval(XY[i].x,XY[i].y,16,16);
      }
      for(int i = 1;i < 46;i += 2){  	//奇数Index番号の配列だけ黄色で描画
        g.setColor(Color.yellow);
        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 = !frg;     	//boolean型変数frgの値を反転する
        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;
  }
}

末尾