ActionBoard.java



import java.awt.Event;

/** ゲーム進行の骨組みを組み込んだActionBoardクラス */

abstract public class ActionBoard extends CellBoard implements Runnable {

    /** スレッド */

        public Thread timer = null;

    /** ゲームの開始のフラグ */

        protected boolean startFlag = false; 

    /** ゲームのモード */

        protected static final int DROP_MODE = 0;
        protected static final int CLEAR_MODE = 1;

    /** アプレットが画面に現れた時に呼び出される。*/

        public void start() {

              if( timer == null ) {
                    timer = new Thread( this );  // スレッド生成
                    timer.start();               // スレッド起動
              }
        }

    /** アプレットが画面から消えた時に呼び出される。*/

        public void stop() {

              if( timer != null ) {
                    timer.stop();  // スレッド停止
                    timer = null;  // スレッド消去
              }
        }
 
    /** スレッドとして行われる処理 */

        public void run() {

              while( timer.isAlive() ) {
                    if( !startFlag ) {   // ゲーム開始
                          startFlag = true;
                          restartGame();
                    }
                    else if( isGameOver() ) {   // 再ゲーム開始
                          restartGame();
                    }
                    else{   // ゲーム進行中
                          switch( gameMode() ) {
                                case DROP_MODE:
                                      dropSomething();
                                      pause();
                                      break;
                                case CLEAR_MODE:
                                      clearSomething();
                                      break;
                          }
                    }
              }
        }

    /** ゲームの終了を判定するメソッド */

        abstract public boolean isGameOver();

    /** ゲームを再スタートするメソッド */

        abstract public void restartGame();

    /** ゲームのモードを判定するメソッド */

        abstract public int gameMode();

    /** 落下の間隔(ミリ秒単位) */

        protected static final int defaultInterval = 1000;
        protected int intervalTime = defaultInterval;

    /** 一時停止のメソッド */

        public void pause() {
              try {
                    Thread.sleep( intervalTime );  //一時停止
              } catch (InterruptedException e){ }
        }

    /** 拡張クラスでゲームの内容を組み込むためのメソッド */

        abstract public void dropSomething();

    /** 拡張クラスでゲームの内容を組み込むためのメソッド */

        abstract public void clearSomething();

    /** 拡張クラスでイベント処理を組み込むためのメソッド */

        abstract public void action( int key );

    /** キーのイベント処理のメソッド */

        public boolean keyDown( Event evt, int key ){

              action( key );
              return true;
        }

    /** マウスのポインタが入った時のイベント処理のメソッド */

        public boolean mouseEnter( Event evt, int x, int y ){

              requestFocus();
              return true;
        }
}