- ベストアンサー
RPGの戦闘アルゴリズムについて
- RPGの戦闘アルゴリズムについての質問です。ドラゴンクエストモンスターズの戦闘システムを再現したいが、補助特技の処理が複雑になる可能性がある。有限ステートマシンを利用したアルゴリズムが良いのか悩んでいる。キャラの状態異常や飛行中などの処理方法も知りたい。
- RPGの戦闘アルゴリズムの実装についての質問です。ドラゴンクエストモンスターズのような戦闘システムを作りたいが、補助特技の処理が難しい。キャラの状態異常や飛行中などの状態によって攻撃できないとか、特定の効果を持つ特技を実装する方法が知りたい。
- ドラゴンクエストモンスターズなどの戦闘システムを再現するためのRPGの戦闘アルゴリズムについて質問です。補助特技の処理やキャラの状態異常など、実際のゲームと同様の動きを実装するためにはどのようなアルゴリズムが必要なのか知りたい。有限ステートマシンの利用も検討しているが、具体的な実装例や参考書籍があれば教えてほしい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
鉄則は「深く考えるな」です。 「状態」と言うステータスがあるなら、そのステータスを「すべて書き出し」して下さい。1つも漏らさず、考える限りのすべてを書き出します。 そして「そのステータスの時に、どの行動が出来るか?」を、ステータスごとに全て書き出して下さい。 そして「出来る行動を選んだ時、どういうステータスになるか」も、行動ごとに全て書き出して下さい。 深く考えずに、とにかく、思い付く限り、全部書き出して下さい。 例えば、 ○ステータス ・通常 ・死亡している ・飛んでいる ・麻痺している ・混乱している ・気合を貯めている ・気合を貯め終わっている(前のターンで気合を貯めた) ・祈っている ・祈り終わっている(前のターンで祈った) ・特技使用不可 ・精神統一している ・精神統一し終っている(前のターンで精神統一した) ・精神統一後の1回目の攻撃をした ・まねまねしている ○行動 ・通常時 飛ぶ(攻撃キャラで飛べるキャラのみ) 気合を貯める(気合が使えるキャラのみ) 祈る(祈れるキャラのみ) 敵を攻撃する(攻撃キャラのみ) 防御する 回復薬で回復する(薬を持っている時のみ) ・死亡時 死亡し続ける ・飛んでいる時 攻撃する(攻撃キャラのみ) 攻撃し終わったら通常状態になる ・麻痺時 麻痺から自動回復(乱数?一定ターン過ぎたら?) 麻痺し続ける ・混乱時 敵に回復をかける(乱数?回復魔法の使えるキャラのみ) 味方を攻撃する(乱数?攻撃キャラのみ) 味方に状態異常の魔法をかける(乱数?魔法の使えるキャラのみ) 何もしない ・気合を貯めている 何もしない。気合を貯め終わっている状態になる ・気合を貯め終わっている 気合入り特殊攻撃をして、通常状態になる。 ・祈っている 何もしない。祈り終っている状態になる ・祈り終っている 特技を敵味方一切使えなくして、特技使用不可になる ・特技使用不可 特技以外の行動をして、一定のターン後、通常状態になる ・精神統一している 何もしない。精神統一し終っている状態になる ・精神統一し終っている 攻撃し、精神統一後の1回目の攻撃をした状態になる ・精神統一後の1回目の攻撃をした ターン後にもう一度攻撃し(連続攻撃)、通常状態に戻る ・まねまねしている 敵と同じ事をして、通常状態に戻る のように。 もれなく全部書き出したら、「状態」と「行動」と「行動の結果、なる状態」に、抜けが無いか確認しましょう。 例えば「体力が低下している状態」があって、その状態で選べる行動に「回復薬を飲む」と言う行動があるのに「回復薬を飲んだ結果」が書いて無かったりすると困ります。そういう「抜け」が無いかチェックしましょう。 チェックして抜けが無いと判ったら、あとは「書き出した通りにプログラムするだけ」です。
その他の回答 (3)
- kacchann
- ベストアンサー率58% (347/594)
「戦闘アルゴリズム」、または「ゲーム」に限った話ではなく、 一般的な話として。 --- 普通にひたすらswitch文や「if-else文の羅列」を書くことと まったく同じことなのですが、 「ソースコードの整理術」的な意味あいからすれば、 ・書籍「実例で学ぶゲームAIプログラミング」第2章 ・デザインパターン「Stateパターン」 などを参考にするといいかも。 ・「状態ごとに」わけて考えて、プログラミングする (つまり、各状態ごとにインスタンスを割り当てる) ・「状態の変化」は、「インタンスの切り替え」に相当する の2点がポイント
- Wr5
- ベストアンサー率53% (2173/4061)
>少し考えてみたのですが、キャラの状態が >・飛んでるとき >・気合を溜めてるとき >・何らかの状態異常のとき(混乱や麻痺) >は攻撃ができなくて、混乱してる時は麻痺をかけられても効かないとすると、 とりあえず適当に… #define 飛んでる 0x80 #define 気合い貯め 0x40 #define 混乱 0x08 #define 麻痺 0x04 #define 状態異常 (混乱|麻痺) とか設定して、 char 状態; って変数にそれぞれ論理和などで入れればよいかと。 if(状態 == 0){ 通常攻撃 } else if((状態 & 気合い貯め) != 0) { 行動優先順位を変更 次回の攻撃力に1.5倍の+補正 } else if((状態 & 飛んでる) != 0) { 行動不能 次回の攻撃力に+補正 } とか。
- tomtom963
- ベストアンサー率19% (19/96)
単にフラグを立ててそれを条件分岐していけばいいだけでしょ? なにがそんなに難しい?