スクリーンショット_2019-07-21_15

壁に物を投げると落下する ローグライク(仮)

今日は、主にアイテム投擲による壁衝突時の一般化された処理を書きました。

アイテムごとに特殊化することが可能ですが、まずは特殊化していないアイテムの一般的挙動が実装できました。壁に衝突した場合はその手前の近くに落下するというものです。

アイテムが重ならない場所を検索して配置する処理は既存のモジュールが既にあったのでそれをそのまま使ったので、ほとんど複雑なアルゴリズムは実装していません。投げたときに壁に衝突した場合にその座標を取得する処理も先日実装済みでした。なので、実際には壁衝突時の挙動はほとんど完成していて、それを組み合わせただけのような状態です。

他には、装備しているものを投げたら装備が外れるようにしたり、ビヘイビア(アイテムはキャラクタの特殊な拡張挙動を書く仕組み)の雛形コードを生成する仕組みを追加したり、細かい部分や後々のための準備などもやりました。

今の所、不具合のようなものがあります。投げたものが落下する予定の位置にプレイヤーや敵などのキャラクターが居た場合、そこを避けて落下位置を再検索する処理になっています。避けるキャラクターの種別を設定できるように変更する実装が抜けています。そして、落下位置は今の所一番近いマスの中からランダムで選ぶようにしていますが、ルールがあったほうがチェスのように予測しやすく熟考できてよいと思うので、そこも修正したいなと感じています。

また、投げたものはまっすぐ、壁や物、キャラに当たるまで無限に飛び続けるようにしました。不思議のダンジョンなどでは10マスと決まっていたりしますが、それを踏襲する意味は特に思いつかないので、シンプルに無限にしました。杖の魔法弾と同じですね。

方向キーだけだったころに比べて、操作できることが増えましたが、基本的な挙動は大きく変えなくても動作していて、作ったものが無駄にならず良かったと思っています。

次回は、投げたものが飛んでいくアニメーションを実装したいですね。小さな不具合の修正も合わせながら。

応援してくださると嬉しいです。よろしくお願いいたします!