p200からの「ベルトコンベアのゲーム」(Atlas6.pde)について、Gridのプログラムを見てみます。今回は、かなり大きな変更のようなので、何回かに分けて見ていきます。

・// グリッドの開始Y位置を決める定数を定義 final int GRID_BASE_Y = 60;

・UNITの配列gridが定義されます。その幅・高さを決める定数
// UNIT_SIZE間隔のグリッドデータ
final int GRID_W = 8;
final int GRID_H = 5;
Unit[][] grid = new Unit[GRID_H][GRID_W];

・それと同じサイズでbooleanの配列gridFlags
boolean[][] gridFlags = new boolean[GRID_H][GRID_W];

・// グリッド座標に変換する関数
int toGridX(float x) →getGridMouseX(),setGrid()
int toGridY(float y) →getGridMouseY(),setGrid()

・// グリッドデータ範囲内かどうか
boolean isInGrid(int gx, int gy) →isHitGrid(),setGrid()

・// マウス座標をグリッドにぴったり合うようにして返す関数
int getGridMouseX()は toGridX()をコール
int getGridMouseY()は toGridY()をコール

・// グリッド上の他のユニットに当たる場合はtrueを返す
boolean isHitGrid()は
isInGrid()をコール
配列grid[][]使用

・// グリッドデータを初期化する
void clearGrid() は配列grid[][]使用

・// グリッドデータにユニットを設定
void setGrid()は
toGridX(),toGridY(),isInGrid(),unit.isStop()をコール
配列grid[][]使用

・// 繋がっているユニットの数を再帰的に数える
int countLinkedUnit()は
isInGrid(),isFirst,unit.isStop(),countLinkedUnit()をコール
配列gridFlags[][]使用

・// グリッドを調査して繋がりを判定、描画
void drawGridLinks()は
配列grid[][]使用
countLinkedUnit(),unit.lifeFrames,unit.drawLinks()

・// グリッドデータのデバッグ表示
void drawGridInfo()

再帰的処理…脳ミソがクラインの壺状態になってしまいます(笑)



《インデックス》

◆◆◆参考文献「遊んで作るスマホゲームプログラミング for Android
◆◆◆公文生ならゲームで遊ぶな!ゲームを作れ!
◆◆◆公文式小林教室◆山形県東根市◆◆◆