イルミネーション その1(赤と黄色の移動)


Java Applet

ソースコード

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

public class ja208 extends Applet implements Runnable
{
  Thread td = null;   	//スレッド
  ja208XY XY[];   	//オブジェクト(クラスのインスタンス)の配列
  int redno = 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){
    g.setColor(Color.red);
    int redcount = 0;

    for(int i = 0;i < 46;i++){  	//全ての円の配列をループする
      if(++redcount == 3)redcount = 0;  
        //メソッド変数redcountは,このループ内で1,2,3,1,2,3,1・・・のように変化する
      if(redcount == redno){  //redcountがクラスのメンバ変数rednoと一致した場合,黄色にする
        g.setColor(Color.yellow);
        g.fillOval(XY[i].x,XY[i].y,16,16);
        g.setColor(Color.red);
        g.drawOval(XY[i].x,XY[i].y,16,16);
      }else{
        g.fillOval(XY[i].x,XY[i].y,16,16);
      }
    }
    if(++redno == 3)redno = 0; 
      //メンバ変数rednoは,このdrawXY()メソッドが呼び出されるたびに1,2,3,1,2,3,1・・・のように変化する

    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();
        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;
  }
}

末尾