コラム / テトリスぽいもの / 21



ランダムピースが落とせたら、
次は、落とした後次が落ちてくる処理です。
それ自体は簡単なのですが、
いくらでも落ちてくるってことは、
上まで積もる可能性があるってことです。
画面の上まで積もると、
先ほどみたいにエラーになっちゃうので、
次が落ちてくる処理の前に、
上まで積もったらゲームオーバー処理に飛ばすコードを
作らないといけません。
既にあるコードに、ゲームオーバー用の判定を追加するより、
既にあるコードで、
「画面の上まで積もったとき困る部分」
を、
「困る可能性があるならゲームオーバー」
と考え直すとスマートに作れそうです。
さて、困る部分を探しましょう。
「積もったとき」ですから、
実は探すも何も無いです。
TPiece.main で、
//どう見ても当たります。
っていうコメントがありますね。
そこです。
で、そこは自殺処理と、自分をフィールドに転送する処理がありました。
フィールドに転送する処理を見てみると、
Forループで1マスずつMapBlocksにコピーする処理があります。
そこで、
コピー先が画面より上だったら、
ゲームオーバーフラグを立てて、
Timerの方のメインルーチンの最後で判定するようにしましょう。
コピーする処理で、フラグを立てないで、
一気にゲームオーバー処理をしてしまうのは、
ピースがゲーム全体に対して権限をもった構造になってしまうので、
キモチワルイからやめます。

sekusi.png uwaa.png

宣言/実装は次で