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