初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

Processing 入門

25.潜水艦6 水柱とゲームオーバー

 

今回は「潜水艦5 爆弾と敵の当たり判定」の続きです。

プログラミングを初めて覚えるとき、説明されていることを信じて
勉強を進めるわけですが、余裕がでてきたらちょっと疑ってみましょう。
「本当にこの方法でいいのかな」
「もっと良い方法があるんじゃないかな」
というような感じで。
プログラムの書き方は1つではありません。
説明されている方法が一番良いとは限らないのです。

 

 

水柱を表示しよう

敵の爆弾が海面で爆発するようすを、四角い絵を使って表現してみましょう。
爆発による水柱ってやつです。
ただ、海上の空を水色にしているので、この四角は赤くします。

プログラムを次のように変更してください。
if 文の中に if があったり、カッコが多いので注意してください。

 

水柱を表示する

これまで爆弾が海面に出たら未使用にしていました。(画面外へ出していた)
それを水柱表示の準備に変更します。(208行から211行目まで)

実際には、水柱の表示は 215 行目で行っています。
変数 bEy == 60 のとき水柱の表示、それ以外は爆弾の表示(221行目)
にしています。

 

 

実行してみましょう。
爆弾が海面まで上がり、水柱が表示されるか確認します。
赤くしたため火柱のようですね。

水柱の表示を確認する

 

 

水柱に当たり判定を入れよう

プレイヤーと水柱に当たり判定を入れましょう。
とてもシンプルなので、当たったらゲームオーバーを表示するところまで作りました。

ゲームオーバー用の関数には、表示系の関数のみ入れます。
ただ、敵の爆弾が水中で止まったまま表示されたり、いきなり消えるのは不自然なので bombEnemyMove も入れることにします。

 

水柱に当たり判定を入れる

当たり判定は 228 行目で行ってます。
x座標のみ判定しているのは、表示上y座標が同じになっているので判定の必要がないからです。

 

当たっていたら変数 gseq に2を代入し、ゲームオーバーの処理へ移行します。
その仕組みは draw 関数ですでに作ってあります。

ゲームオーバーへ移行する処理

 

実行してみます。
プレイヤーと水柱が当たって GAME OVER が表示されれば OK です。

ゲームオーバーの表示を確認する

 

 

沈む演出を入れよう

プレイヤーが水柱と当たったとき、海の中に沈む演出を入れます。
y座標を調整するための変数 pSink
タイミングをコントロールするための変数 mcnt を用意します。

 

船が沈む演出を入れる

71 行目、y軸に pSink を追加するとき半分にしています。
これはゆっくり沈めるためです。

ついでにゲームオーバーの表示タイミングを変えました。(78 行目)
プレイヤーがやられた瞬間ではなく、沈み始めたタイミングで表示します。

 

 

実行してプレイヤーが沈むことを確認しましょう。

船が沈む演出を確認する

 

沈む演出が入りました。しかし、なんか変ですね。
ここはプレイヤーと海の表示優先を変えてみましょう。
表示優先は、後から描いた方が高くなります
プレイヤー表示を先に、背景表示を後にします。

プレイヤーと海の表示優先を逆にする

 

実行してみましょう。
プレイヤーが沈むと船体は見えなくなります。
沈んでいる感じが出てきましたね。

船と海の表示優先を確認する