第2.26話 共同作業
秋晴さんがスタート画面のUIを考えている横で、俺はメデューサの攻撃を考えていた。内容は毒と石化、いわゆる状態異常というやつで、一定時間何かしらの影響を与える攻撃だ。毒状態の時は少量のダメージを受け続け、石化した時は動けなくなる、というものである。
まずは、石化の攻撃方法を考えてみる。姿を見たものは恐怖のあまり石のように固まる、というのが元々の話らしく、目が合ったものを石化する、というのは後から出てきた話らしい。ただ、今作っているゲームでは、後者の方が都合がいいので、こちらを採用させていただく。
目が合ったら、というのはこのゲームの場合だと、画面の中でメデューサの目と飛行時の高さが一緒の時だと考えられる。とはいえ、高さが一緒の時というのは高頻度で起こる。すぐに石化されたらたまったものではない。ということで、メデューサの目と飛行機が一定時間同じ高さだったら石化するということにしよう。
次に毒だが、これはまぁ、紫色の何かしらの物体を放出させればいいだろう。
ある程度攻撃方法が固まってきたところで、プログラムを書く。まずは、飛行機のプログラムからだ。
弾を発射するプログラムをバレットマネージャーで書いていたが、これを飛行機のプログラムに移す。石化した時に撃てないようにするためだ。もちろん、弾の動き自体はバレットマネージャーで管理する。また、石化した時にキーを押しても動けないようにするため、移動する処理を関数化して、石化以外の時だけ呼び出すようにする。
次に、毒状態の時と石化状態の時、それぞれのアップデート関数を作る。それぞれで経過時間を測り、終了するかの判定をするためだ。
実装していて気づいたのだが、状態異常は常に一つだけとは限らないのではないだろうか。毒と石化が同時に起こるということはありえる。新しい状態異常を簡単に増やせるからと、列挙型を使ったのだが、それぞれをbool型で判定した方がいいかもしれない。
一度実行してみる。プログラムはいくつか変更したが、今のところ結果自体は変わらないはずだ。
動いたことを確認して、メデューサのプログラムを書く、つもりだったのだが、飛行機の状態異常に関するプログラムで省けるかもしれない部分があると気づいた。
まず、経過時間ではなくカウントダウンにする。0になった時点で、毒やら石化やらを解けばいい。これで、どれぐらい経ったら解けるという値が必要なくなる。
次に、毒状態かどうか、石化状態かどうかというbool型の値を用意していたが、これもいらない。カウントダウンの値が0かどうかを確認すればいいだけなのだ。
後は、毒状態にする、石化状態にする、という関数を作る。引数を用意して、状態異常のカウントダウンを加算する。間違って何度も関数を呼び出してしまうと、カウントダウンの値がどんどん膨れていき、状態異常が延々と続いてしまうので注意が必要だ。
これでやっとメデューサの動きを考えられる。まずはメデューサの目と飛行機の高さが一緒かどうかを判定するプログラムだ、と思った矢先に、下校時刻に迫っていることに気づく。リズムを狂わされたようでもどかしい気持ちになってくる。とはいえ、時間を確認していなかったのは自分である。さっさと家に帰って続きをしよう。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます