import BlinkBoard;
import BoardCell;
import awt.Graphics;
import awt.Color;

/**
  ランダムに絵を表示する RandomBoard クラス
 */
class BlinkBoard extends RandomBoard implements Runnable {

       Thread paintThread=null;       // 画像の表示を行うスレッド
       protected int interval;        // アニメーションのコマ送りの間隔

    /**
     初期設定の関数。アプレットのサイズを設定。
     */
       protected void init() {

             super.init();    // 親のクラスで定義された処理

             interval = getIntValue( "interval" );
                if( interval == 0 ) interval=800;
                if( interval < 30 || interval > 5000 ) interval=800;
       }

    /** 
     アプレットの表示（初期状態）を行う関数。
     */
       public void paint( Graphics g ) {

              super.paint( g );   // 親のクラスで定義された処理 
       }

    /**
     アプレットの表示の変更を行う関数。
     */
       public void update( Graphics g ) {
 
             for( int i=0; i<iMax; i++ )
               for( int j=0; j<jMax; j++ ) {
                  if( cell[i][j].toBePainted == true )
                         cell[i][j].paint( g );
                  if( cell[i][j].toBePainted == false &&
                      cell[i][j].isPainted == true )
                         cell[i][j].clear( g );
             }
       }

    /**
     アプレットが続行する作業
     */
       public void run() {
 
             while( paintThread.isAlive() ) {
                  makeTable();
                  repaint();
                  Thread.sleep(interval);       //一時停止のミリ秒
             }       
       }
 
    /**
     アプレットが画面に現れた時に呼び出される。
     */
       protected void start() {
 
             if( paintThread == null ) {
                   paintThread = new Thread(this);
                   paintThread.start();          //スレッド起動
             }       
       }
 
    /**
     アプレットが画面から消えた時に呼び出される。
     */
       protected void stop() {
 
             if( paintThread != null ) {
                   paintThread = null;           //スレッド停止
             }       
       }
}

