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

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

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

Processing 入門

23.潜水艦4 爆弾投下と複数キーの操作

 

今回は「潜水艦3 敵の表示と移動」の続きです。

昔、ゲームセンター用のゲームを作っていました。
発売する前にロケテストをして、プレイ時間やどんなやられ方をしたか、また
どんなプレイをした人がコンティニューをするかなど情報を集めます。
その情報をもとにゲームの調整を行うのです。
一般人プレイヤーのデータって、とても役に立つんですよね。
ゲームを作ったならば誰かにプレイしてもらい、感想を聞いてみてください。
いろいろな発見があると思います。

 

 

プレイヤーから爆弾を投下しよう

プレイヤーから爆弾を投下するプログラムを作ります。
スペースキーを押したとき、爆弾を投下します。
爆弾の数は6個とします。
仕組みは敵のときとほぼ同じです。見比べながら作業しましょう。

 

プレイヤーから爆弾を投下するプログラム

爆弾を投下するプログラム

 

y座標の変数 bPy[] は -20 のとき未使用としています。

スペースキーが押されたかどうかの判断は 69 行目でしています。
key == ' '
2つのシングルコーテーションの間には半角スペースを入れてください。
この方法でスペースキーが押されたかどうかを調べることができます。

 

 

実行してみましょう。
まず船を左右に動かしキーが反応するか確認します。
(キーが反応しないときは、マウスでゲーム画面をクリック)
次にスペースバーを押して爆弾が投下されるか確認しましょう。

 

爆弾を投下する

 

爆弾は投下されますが、くっついて投下されます。これは
キーの受付を毎フレームしているため、連続投下されてしまうのです。

 

 

間隔を空けてキーを受け付けよう

爆弾が一発ずつ投下されるようにします。
キーの間隔をカウントするための変数 bombWait を用意します。

 

キーの受付に間隔を空ける

 

爆弾を投下するとき bombWait = 10 とします。
これが0になるまで、次の爆弾を投下できないようにするだけです。(74-75行目)

&& などで条件を追加していくとき、複数行にすることもできます。(74-75行目)
覚えておくといいでしょう。

 

 

実行してみましょう。
今回はキーを押す長さに関係なく、一発ずつ投下されるようになりました。

 

爆弾が連続しないで投下される

 

 

複数のキーを同時に判断しよう

実行して、完成したゲームをイメージしながら船を左右に動かし
爆弾を投下してみてください。
「遊びにくい」と思いませんか?

その原因は、爆弾を投下するためスペースキーを押すと船の移動が止まってしまう
からなんです。

 

スペースキーを押すと移動が止まってしまう

 

 

船を操作する処理を見てみましょう。
左右に動かすため keykeyCode を調べてますが、この2つは最後に押したキーの
情報を持ちます。(厳密には少し違う)
爆弾を投下するためスペースキーを押すと値が変化するため、船の移動が停止するのです。
この2つの値を println で確認してみてください。

 

押されたキーの情報は一番最後に押したキーの情報になる

 

 

船を移動しながら爆弾も投下したいときには、押しているキーの情報を保持する
必要があります。
変数 keyKeep を作り、押下中のキーを格納するようにします。
プログラムを次のように変更してください。

 

押したキーの情報を保持する方法

 

keyPressedkeyReleased を使います。
これらの関数は Processing が用意したもので
keyPressed はキーが押されるたびに呼び出されます。
keyReleased はキーが離されたときに呼び出されます。

左右キーが押されたときだけ変数 keyKeep にその情報を格納し
キーが離されたときにクリアします。
こうすれば keyKeep を確認するだけで、左右のキーが押されているのかが分かります。

 

 

それでは実行してみましょう。
船を移動しながら爆弾が投下できるようになりました。

 

複数のキーを同時に判断する

 

 

未使用の爆弾を表示しよう

ゲームを作っている本人は「爆弾はトータルで6発だ」などと分かっている訳ですが
何も知らない人がプレイしたら「全部で何発撃てるんだろうか」と
いろいろと思ったりします。
ルールを見た目で分からせることも大切なので、爆弾の使用状況を
表示するようにしましょう。

画面上部の中央に、未使用の爆弾を表示します。

 

爆弾の使用状況を表示する

 

 

簡単にできましたね。
実行してみましょう。

 

画面上部に爆弾の残数を表示する