コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
ナカジマ ◆DSpvksQCyRZC
2019/2/10 14:26
質問
ターン制バトルの行動順
RPGによくあるターン制バトルの「すばやさ」によって敵と味方がどのような順番で行動をするのかということについてなのですが、どうもうまくいきません。

これから作ろうとしているRPGは、単純に「すばやさ」が高い数値のキャラクターから順番に行動させられるようにしようとしています。
いままではタイマン(一対一)の戦闘しか作ってこなかったので「敵が自分より早かった場合とそうでなかった場合」の二種類を詰め込んで無理やり作ることができていましたが、敵含め三人以上が戦闘に参加するとなるとどういったやり方で順番を決めればよいのか分からなくなっています。ぜひアドバイス等を頂けたらと思います。

コメント

アバター
アッキー 2019/2/10 14:32 ◆mzdBeKiu8Ikq
全員の「すばやさ」をひとつの配列変数に移してRSORT(かSORT)すれば良かった筈
アバター
シロ 2019/2/10 14:43 ◆g0oUAxBiWqcj
自分はソート無しでこんな感じかな。if以下は関数化するべきだがここでは分かりやすく。因みに二回行動は更によく考える必要あり(自作ゲームはそこまで考慮してる)。

最大スピードが10(多い方が早い)
キャラA スピード9
キャラB スピード3
キャラC スピード7

ループ 戦闘が終わるまで
ループ スピードカウンタ10から1
if キャラAのスピード==スピードカウンタ
キャラAの行動

if キャラBのスピード==スピードカウンタ
キャラBの行動

if キャラCのスピード==スピードカウンタ
キャラCの行動
アバター
ナカジマ 2019/2/10 14:59 ◆DSpvksQCyRZC
アッキー様、シロ様、コメントありがとうございます。
sortをすっかり忘れていました!これを使ってみた結果、いい感じに動くようになりました。
シロ様のアドバイスも、配列の知識がなかった頃の私に教えてやりたかったです。結構前から悩んでいたので( ˊᵕˋ ;)

アドバイス感謝致します!
アバター
ツララ 2019/2/10 21:30 ◆ArUdBYOYME1V
シミュレーションゲームで良くある、待機時間を加算してく方法はどうです?
キャラクターの素早さの数値に応じて行動後に待ち時間を加算して
時間(ターン)経過に伴って全部のキャラクターの待ち時間を減らしていって
待ち時間がゼロになったキャラクターから行動していくみたいな。
アバター
ねこ博士 2019/2/10 22:25 ◆3zseSgmZp0Qk
敵と味方全員で『すばやさ』の平均をとって、平均値より大きい→小さい順番で
攻撃させるのはどうでしょうか。 (xΦωΦ) ねこ
アバター
ブルー 2019/2/11 3:49 ◆F30iKws/Dqrq
いっそ確率にしてみるのも...?

  例
キャラ A すばやさ 10
キャラ B すばやさ 12
キャラ C すばやさ 5
キャラ D すばやさ 8

最初に行動するのは、
Aが約28.57%
Bが約34.29%
Cが約14.29%
Dが約22.86%
 最初に行動したのがAの場合
 Bが48%
 Cが20%
 Dが32%

こんな感じで、行動させる人数分確率でやるという手段の場合、
常にどちらかが先制攻撃になりにくいという長所も...
※プレイヤーがすばやさをあまり上げようとしなくなるという短所もあります。
アバター
ブルー 2019/2/11 4:15 ◆F30iKws/Dqrq
暇だったので、それぞれの長所と短所をまとめてみた
・すばやさが高い順が行動する順番
長所 すばやさが高いと、確実にはやく行動できる。
   →すばやさを上げることの需要が生まれる。
   →すばやさを変化させる魔法の需要が生まれる。
短所 すばやさを変化させる魔法を使わない限り、順番は変わらない。
   すばやさがデフォルトで低い設定のキャラが、先制攻撃をすることはほとんどない。

・すばやさに応じた待機時間
長所 すばやさが高いと、確実にはやく行動できる。
   →すばやさを上げることの需要が生まれる。
   →すばやさを変化させる魔法の需要が生まれる。
   グラフ(?)によって可視化する。
短所 すばやさを変化させる魔法を使わない限り、順番は変わらない。
   
・敵と味方ごとのすばやさの平均による行動順番決定
長所 すばやさが低いキャラも、敵よりはやく行動できる。
   平均なので、全員のすばやさを変化させると、行動順番が変わるかも
   →全体のすばやさを変化させる魔法の需要が生まれる。
   →戦略の幅が広がるかも...?
短所 すばやさが高いキャラが、敵よりおそく行動する。
   平均なので、1人のすばやさを上げても変わらない。
   →単体のすばやさを変化させる魔法の需要が低下。

・確率による行動順番決定
長所 行動順番がわからない
   →すばやさの低いキャラが先制攻撃することもある。
短所 行動順番がわからない
   →すばやさの高いキャラが先に攻撃できないこともある。
   →すばやさによる行動順番の影響が小さい
    →すばやさの需要の低下
    →すばやさを変化させる魔法の需要も低下
   →作戦が組むことが難しい。
アバター
ナカジマ 2019/2/11 7:24 ◆DSpvksQCyRZC
ブルー様 コメントありがとうございます。
そうか、全部同じだと思ってたけど、よく考えてみればそれぞれに長短があるんですね。こういう所にゲーム性が出てくるんだろうなぁ……。考えれば考えるほど難しいけど面白い。
アバター
たんじぇ 2019/2/12 11:23 ◆WDmFkVwZ4yMl
戦闘が必ずターン制で、戦闘に参加している人と敵が全員行動するのであれば、
・戦闘参加者全員にIDを振っておく
・行動する順番の配列を用意する
・ターン計算用すばやさ変数などのパラメータから計算した結果、行動する順番の配列に参加者のIDを割り振っていく(ループしたりソートしたりランダムだったり)
・ターンの順番の計算が終わったので戦闘処理へ
・ターンの処理で行動する順番の配列から順番に参加者のIDを受け取ってそのIDの人が行動する
・ターンが終わったのですばやさ計算に戻る
ってやりかたがやりやすいと思います。

すばやさのパラメータを覚えている変数自体はキャラ固有の情報なので値は変更しないようにしてターン計算用すばやさ変数に代入しておくと、ランダム性
や すばやさをあげる魔法の計算などができるようになります。

ちなみにドラクエの場合はすばやさの値そのものだけではなくて乱数でちょっとだすばやさが変わるので、すばやさが近いキャラや敵はどっちが先に攻撃するかわからないようになっています。
0〜15の値の乱数を追加とか、すばやさ/16 の乱数を追加とかゲームによってやりかたがあるので、ゲームをどういうふうにするかというところになります。


ターン制じゃなくて素早さによって次の攻撃までの間隔が短くなるようなのだとまた別の考え方をしないといけなくなります。
・戦闘参加者全員にIDを振っておく
・すばやさを加算する配列を用意する
・すばやさ計算のループ開始
・戦闘参加者のすばやさを すばやさ加算配列 にいろんな計算をして加算していく
・誰かの値がある値をこえたら攻撃できるようになったので、この人が攻撃の行動をする(すばやさ計算配列を0にするとか超えた値分だけの値にするとかも必要)
・戦闘がおわったらループ脱出、そうでなければループに戻る

って感じで、ちょっと作りが変わります。
すばやさ10の敵とすばやさ100の味方だと味方は敵が行動する間に10回攻撃できちゃうので、単純に足し算よりは平方根で計算するとか、レベルが上がってもすばやさがちょっとずつしか増えないとかの工夫が必要になります。
アバター
ツララ 2019/2/13 19:10 ◆ArUdBYOYME1V
ブルーさんのを具体例で示すとすると
マリオパーティーのキャラサイコロみたいに、固有の出目が振ってあるサイコロを複数用意しておいて
そのターンの行動順位は、そのサイコロ振って一番大きな数が出たキャラから行動可能とする。
(同数タイのキャラが居た時は素早さの数値で順位補正するとして)
素早さの数値はつまり、どのサイコロを参照するかという「サイコロの出目に影響を与えるパラメータ」として使うという感じみたいな。
この方法だと運のパラメータとか、他の要素と絡めやすくて実装も割と簡単かも。

ねこ博士さんの案は説明不足というか、いまいち実装方法がよくわからない。
平均を取ったとしてもソートして順に行動していくのと変わらないような・・・
平均値との差の絶対値を取ってそれをソートするのなら
平均値を下方修正する加工をしてやれば、素早さが一番高いキャラに必ず順番が最初に回ってくるようになりますな。

こんな難しいことを簡単にっていうか
遊びまくってるだけの道楽者なだけですので、そんなこと言われると逆に恐縮ですな。
他にもいい方法あるような気がする。
アバター
ナカジマ 2019/2/13 19:27 ◆DSpvksQCyRZC
たんじぇ様 ツララ様 コメントありがとうございます。

個人的にはツララ様のシュミレーションゲームの例が一番わかりやすかったです。その案を参考に、またしばらく画面とにらめっこしてきますね。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -