Processing 入門
23.潜水艦4 爆弾投下と複数キーの操作
今回は「潜水艦3 敵の表示と移動」の続きです。
昔、ゲームセンター用のゲームを作っていました。
発売する前のロケテストでは、プレイ時間、やられ方、また
どんなプレイをした人がコンティニューをするかなど情報を集めます。
その情報をもとにゲームの調整を行うのです。
一般人プレイヤーのデータって、とても役に立つんですよね。
ゲームを作ったならば誰かにプレイしてもらい、感想を聞いてみてください。
いろいろな発見があると思います。
プレイヤーから爆弾を投下しよう
プレイヤーから爆弾を投下するプログラムを作ります。
スペースキーを押したとき、爆弾を投下します。
爆弾の数は6個とします。
仕組みは敵のときとほぼ同じです。見比べながら作業しましょう。
y座標の変数 bPy[ ] は -20 のとき未使用としています。
-20 という数は適当です。画面から見えない座標ならOKです。
スペースキーが押されたかどうかの判断は 69 行目です。
key == ' ‘
2つのシングルコーテーションの間には半角スペースを入れてください。
(シングルコーテーションは7のキーにあります)
この方法でスペースキーが押されたかどうかを調べています。
実行してみましょう。
まず船を左右に動かし、キーが反応するか確認します。
(キーが反応しないときは、マウスでゲーム画面をクリック)
次にスペースバーを押して爆弾が投下されるか確認しましょう。
少しでも長めにキーを押すと、連続して(つながって)投下されます。
これはキーの受付を毎フレームしているためです。
間隔を空けてキーを受け付けよう
爆弾が一発ずつ投下されるように、間隔をあけてキーを受け付けるようにします。
間隔をカウントするための変数 bombWait を用意します。
爆弾を投下するとき bombWait = 10 にしています。
これが0になるまで、次の爆弾を投下できないようにします。(74-75行目)
なお、&& などで条件を追加するとき複数行できます。
覚えておくといいでしょう。
実行してみましょう。
キーを押す長さに関係なく、一発ずつ投下されるようになりました。
複数のキーを同時に判断しよう
船を左右に動かしながら、爆弾を投下してみてください。
「遊びにくい」と思いませんか?
原因は、スペースキーを押すと船の移動が止まってしまうからなんです。
どうして移動しながら投下できないのでしょうか。
船の移動のキー受け付け処理を見てみましょう。
左右に動かすため key と keyCode を調べています。
この変数は、最後に押したキーの情報を持ちます。(厳密には少し違う)
爆弾投下でスペースキーを押すと値が変化するため、移動が停止してしまうのです。
63行目に println を入れて、2つの値の変化を確認してみてください。
この問題を解決します。
左右キーとスペースキー、3つのキーの受け付けを判断するため変数 keyState を用意します。
押している、押していないという情報を持たせます。
keyPressed と keyReleased を使います。
これらの関数は Processing が用意したもので
keyPressed はキーが押されるたびに呼び出されます。
keyReleased はキーが離されたときに呼び出されます。
この2つの関数を使って、変数 keyState に押下状態をセットします。
これだけで3つのキーを別々に判断することができます。
それでは実行してみましょう。
船を移動しながら爆弾の投下ができるようになりました。
未使用の爆弾を表示しよう
ゲームを作った本人は「爆弾はトータルで6発だ」と分かってますが
何も知らない人がプレイしたら「全部で何発撃てるんだろうか」と
いろいろと思ったりします。
ルールを見た目で分からせることも大切なので、爆弾の使用状況を
表示するようにしましょう。
画面上部の中央に、未使用の爆弾を表示します。
簡単にできましたね。
実行してみましょう。