gombeのブログ

マイコンの電子工作系PIC32/KiCad/C/C++/3D/

RPG(2)

敵からのサーチが実装できたらターン制を実装します。

まあこんなの書くのもなんだけどまあ基本的に相手が後攻で先に自分を移動させて相手をその到達予定地を元に移動させます。しかしながら相手の移動による重なりも回避しなければならないので相手同士で当たり判定をつけておきます。しかしこの当たり判定は到達予定地を設定しますがまだ移動を開始していないものはその場でつけるしかありません。到達できないものは動けるようにデタラメに動きます。敵が一列に並んだら死にますしね(苦笑

移動が終わったら攻撃はまず自分が開始し、相手に対して攻撃します。相手もこっちに攻撃しますが相手の攻撃は一体ずつ開始します。囲まれた場合も記述しておきます。攻撃されたPlayerは振り向きます。(よね。後ろで攻撃されれば振り向くでしょ(確認))

まあこんな感じですかね。こう文章で書いてもそれをコードに起こさなければなりません。各ステートをenumとかで定義しておいてswitchとかで分岐したりとか。私の場合は頭が硬いのでゴリ押しました。こうして行動を一つずつ記述していくことでターン制を実装するほかなさそうです。

また、一応パラメータのクラスを作っておき、csvからロードできるようにしておくと敵のステータスにも使えます。これらステータスはたし引きができるようにしておくと実装が楽です。アイテムの使用時にも相手の行動をします。まあターン制だしね。

光源は距離の二乗に比例して減衰するのでその式を使います。まあ適当な実装でも構わないのですが結構見た目を大きく左右してしまうのでそれなりに力を入れましょう。と言いつつも敵が透けるなど副作用があります。まあしょうがないのですがね。できる限りごまかすために敵やアイテムは遠くのほうまで見えるようにしました。これによって結構いい感じにごまかせました。

今回は「妥協」というワードを繰り返し出しましたが完全にローグライクな感じではなくなってしまうと「目的」がそれてしまいます。そのためにも「目標」をしっかりと定めて定期的にテストプレイを重ねながら短い期間で短期決戦を挑むのが課題をこなすコツと考えています。私は一応これだけの妥協を生みながらも一応それっぽいものに仕上げることができたのも目標が妥当だったからだと振り返ります。

いわゆるFFとかDQとかそういう大作には挑まずに機能を絞ることが成功のカギと考えます。