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

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

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

Processing 入門

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

 

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

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

 

 

水柱を表示しよう

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

プログラムを次のように変更してください。
一部数値のみが変更されているところもあるので注意してください。

 

爆発後の水柱を表示する

 

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

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

 

 

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

 

爆発後、水柱を表示する

 

 

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

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

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

 

プレイヤーと水柱に当たり判定を入れる

 

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

 

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

 

ゲームオーバー時の流れ

 

 

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

 

ゲームオーバーの表示

 

 

沈む演出を入れよう

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

 

プレイヤーが海に沈む演出を入れる

 

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

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

 

 

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

 

沈む演出

 

 

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

 

船と海の表示優先を変える

 

 

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

 

プレイヤーと背景の表示優先を変える