p200からの「ベルトコンベアのゲーム」(Atlas6.pde)についてプログラムを見てきましたが、今回はdraw()の中のdrawGame()の中のdrawGridLinks()の中のcountLinkedUnit()を見てみます。

この関数の働きは「// 繋がっているユニットの数を再帰的に数える」となっています。つまり、countLinkedUnit()の中にcountLinkedUnit()があります。引数の isFirst を、drawGridLinks()の直下の場合はtrue、countLinkedUnit()の下で実行されている場合はfalseにすることで、機能を切り換えています。

最初のif文の条件であるisInGrid(gx, gy)は、「gx>=0 && gx=0 && gy
drawGridLinks()下で実行されている場合は
for(int iy=0; iy
ですから、countLinkedUnit()の下で実行された場合だけ、このif文が効いてくることになりそうです。

次のif文は、drawGridLinks()の直下で実行されている場合だけgridFlags[iy][ix]を全てfalseにします。linkUnitsは、drawGridLinks()の中で定義されたローカルなArrayListで、初めての時だけクリアされます。

「// 調査中フラグがあるグリッド」や「// 停止したユニットがないグリッド」の場合は、計数しないでreturnします。

「// 同じ種類もしくは万能タイプのとき」は「// 調査中フラグを有効」にして、「// つながっているユニットとしてリストに追加」します。つまり、linkUnitsの要素の一つとして、このユニット(grid[gy][gx]のユニット)を追加します。

「// 万能タイプの場合は」万能でないタイプに「タイプを確定」します。

上下左右の「// 繋がっている数を再帰的に数え」ます。

drawGridLinks()の直下で実行されている場合だけ、上下左右の計数結果をunit.linkTop、unit.linkBottom、unit.linkLeft、unit.linkRightに代入します。

最後に「// 繋がっている数を」returnで「返す」ことになります。



《インデックス》

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