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;
}
}
末尾