Trash.java
/** ブロックの残骸Trashクラス */
public class Trash {
/** セルの状態が空であることを表す数値 */
public static final int EMPTY = 0;
/** 表へのアクセスに失敗したことを表す数値 */
public static final int ERROR = 0;
/** Trashのサイズの上限 */
protected int iMax, jMax;
/** 現在のセルの状態を記憶した表 */
protected int state[][];
/** 以前のセルの状態を記憶した表 */
protected int old_state[][];
/** 表示が必要かどうかの表 */
protected boolean toBeRepaint[][];
/** コンストラクタ */
Trash( int iMax, int jMax ) {
this.iMax = iMax; this.jMax = jMax;
state = new int[iMax][jMax];
initTable( state );
old_state = new int[iMax][jMax];
initTable( old_state );
toBeRepaint = new boolean[iMax][jMax];
initTable( toBeRepaint );
}
/** 表の初期化をするメソッド */
public void initTable( int table[][] ){
for( int i=0; i<iMax; i++ )
for( int j=0; j<jMax; j++ )
table[i][j] = EMPTY;
}
public void initTable( boolean table[][] ){
for( int i=0; i<iMax; i++ )
for( int j=0; j<jMax; j++ )
table[i][j] = false;
}
/** セルの状態の表を返すメソッド */
public int[][] getStates(){
return state;
}
/** 以前のセルの状態の表を返すメソッド */
public int[][] getOldStates(){
return old_state;
}
/** 再描画の表を返すメソッド */
public boolean[][] getToBeRepaint(){
return toBeRepaint;
}
/** 状態の表のコピーを行うメソッド */
public void copyStates( int origin[][], int copy[][] ){
for( int i=0; i<iMax; i++ )
for( int j=0; j<jMax; j++ )
copy[i][j] = origin[i][j];
}
public void copyStates( boolean origin[][], boolean copy[][] ){
for( int i=0; i<iMax; i++ )
for( int j=0; j<jMax; j++ )
copy[i][j] = origin[i][j];
}
/** 状態の変更があったセルをリストアップするメソッド */
public void checkRepaint(){
for( int i=0; i<iMax; i++ )
for( int j=0; j<jMax; j++ )
if( state[i][j] != old_state[i][j] )
toBeRepaint[i][j] = true;
else
toBeRepaint[i][j] = false;
}
/** セルの状態を設定するメソッド */
public void setCellState( int i, int j, int state ){
if( i<0 || i>=iMax) return;
if( j<0 || j>=jMax) return;
this.state[i][j] = state;
}
/** セルの状態を返すメソッド */
public int getCellState( int i, int j ){
if( i<0 || i>=iMax) return ERROR;
if( j<0 || j>=jMax) return ERROR;
return state[i][j];
}
}