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

「グリッドの真ん中1ライン埋まったらゲームオーバー」という条件を検出しています。

配列grid[5][8]は、縦5列横8列のグリッドに対応していて、そこにUnitが存在していれば配列の中に代入され、存在していなければ配列の値もNULLになります。

縦5列のインデックスは0〜4の数字になりますから、真ん中はgrid[2][i]になるわけです。

grid[2][i]がNULLであり、かつunit.isStopがtrueというのが、stopCount++の条件です。

unit.isStopがtrueになるのは、unit.isMouseDragging()がfalse(このユニットがマウスでドラッグされていない)で、かつunit.prevXがunit.xに等しいとき。unit.prevXとはこのunitの前回のx座標で、これが現在のx座標unit.xと等しいということは、このunitが移動していないということ。

マウス移動中でなく、x座標が前回と同じとき、stopCountがカウントアップされます。これがgrid[2][0]〜grid[2][7]のunit全てで起きたとき、ゲームオーバーとなります。

本書p224では、「マウス移動中でなく、x座標が前回と違っていたときにisStop()関数がtrueを返しています」となっていますが、プログラムとは異なっているように思います。



《インデックス》

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