第2.15話 共同作業

 昼飯のカップラーメンをさっさと食べ終えて、作業に取り掛かる。

 リビングに置いたままだったノートパソコンを開ける。少し前に、リビングで勉強すれば効率が上がると聞いたことがあるが、果たして本当なのだろうか。

 昨日の夜に、弾と羽が生えた蛇の当たり判定を作り、当たった時に、弾が消える処理を作った。今回は、羽が生えた蛇が消える処理を考える。といっても、弾と同じような処理を書けばいいので、すぐに次に作業に行けるだろう。

  とりあえず、HPを減らす関数と、HPが0かどうかの確認をする関数を作る。弾はHPが0かどうかと、画面を超えたかどうかの判定を同じ関数で書いたが、敵のプログラムでは分けることにした。飛行機の攻撃で倒したかどうかを分かるようにするためだ。そして、HPが0になったかどうかの関数を、エネミーマネージャーで呼び出し、0になっていれば消す処理を書く。弾と羽が生えた蛇の当たり判定のところに、HPを減らす関数を呼び出す。コンストラクタでHPに1を入れることも忘れない。実行してみる。弾が一発当たると、弾だけではなく、羽が生えた蛇も消えたことを確認する。ついでに、HPに1よりも多い値を入れてみて、その分だけ弾が当たった時に消えるかを確認した。

 ついでに、まっすぐ飛ぶ弾の攻撃力を変えられるようにする。弾のプログラムに攻撃力を取得する関数を追加して、羽が生えた蛇のHPを減らす関数にはどれだけHPを減らすのかを入れる引数を書く。当たり判定のところで呼び出した、HPを減らす関数に、弾の攻撃力を取得する関数を、引数に入れる。実行して、反映されていることを確認する。これで、例えば、アイテムで弾の攻撃力が変わるようになっても、対応できるようになった。

 次に、飛行機と敵の当たり判定を作りたいところだが、飛行機が倒された時、つまり、ゲームオーバーになったときの動きを考えていない。適当に、もくもくと煙を吐きながら墜落させればいいのだろうが、それの絵も必要なため、秋晴さんと要相談である。

 敵を倒せるようになれば、次に欲しいのはスコアだろう。UIを凝るかどうかは秋晴さん次第だが、プログラムだけでも出来ることはやっておく。

 まずは、文字を描画する関数を試しに呼び出してみる。このライブラリに用意されているものだ。

 メインループのところで、関数を呼び出してみる。

 描画する文字はそうだな、まぁ、シューティングゲームでいいだろう。

 画面のどこに描画するかの位置と色、そして、描画する文字を指定したら、実行してみる。描画された。

 ということで、UIを作る。

 ただ、その前に、スコアを管理するための、ゲームマネージャーというものを作る。このゲームマネージャーは、スコア以外に、一時停止や経過時間など、ゲーム全体を管理するものだ。ゲームマネージャーでスコアを管理し、それをUIに渡し表示させることにする。また、経過時間を扱うのだから、デルタタイムもゲームマネージャーで扱う。一つ前のフレームの時刻と、現在の時刻との差分を取得するところだ。メインループで書いていたものを、まるごと、ゲームマネージャーのアップデート関数に持ってくる。

 ゲームマネージャーを作成した時点で、一度実行してみる。さっきと同じように動けばいい。

 次に、ゲームマネージャーのプログラムに、スコアを加算する関数を追加して、それをエネミーマネージャーのアップデート関数の中に呼び出す。敵のHPが0かどうかを確認する関数を使って、敵を倒したのかを判定し、倒したのであれば、スコアを加算する。ちゃんと、スコアが加算されているかを確認するために、先ほど試した、文字を描画する関数でスコアを表示させてみる。実行する。敵を倒した時に、表示される値が増えていくのを確認した。

 やっとUIを作れると思ったところで、体が固まっていることに気づいた。軽く肩と首を回してみるが、あまりほぐれそうにない。仕方ない、散歩でも行くか。

 頭が柔らかくなっている時ほど、肩が凝るものだ。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る