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」
◆◆◆公文生ならゲームで遊ぶな!ゲームを作れ!
◆◆◆公文式小林教室◆山形県東根市◆◆◆
「グリッドの真ん中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」
◆◆◆公文生ならゲームで遊ぶな!ゲームを作れ!
◆◆◆公文式小林教室◆山形県東根市◆◆◆
コメント