「ゲームプログラミング/RPG」の版間の差分

削除された内容 追加された内容
編集の要約なし
→‎戦闘中のアルゴリズム: 実際には、戦闘に参加している自陣営パーティのキャラが、必ずしもID順に並んでいるとは限りませんので、そのために復号する処理が必要です。
1,052 行
:その次に ID=5番 の奴が行動し、
:その次に ID=4番 の奴が行動し、
:さいご最後に ID=2番 の奴が行動する.
 
というような仕組みになります。
1,111 行
 
さて、for文の走査は単に、[[w:リーグ戦]]方式で、単に片っ端から走査していけばいいだけです。この方法を[[w:バブルソート]]といいます。
 
 
 
;より実際的な場合
実際には、戦闘に参加している自陣営パーティのキャラが、必ずしもID順に並んでいるとは限りませんので、そのために復号する処理が必要です。
 
つまり、たとえば、並び替え処理用で味方「1」番とされたキャラが、実際に登録IDが「13」番のキャラだったりするような場合もあるわけです。
並び替え処理用の味方2番のキャラは、たとえば登録IDが7番かもしれません。
 
なので、
:1→13,
:2 → 7 
のような、並び替え番号から登録ID番号への、復号の処理がさらに必要ですので、そのための処理結果を入れる配列も必要です(下記コードでは「PorE_ID」配列です。なお party or enemy の ID という意味 )。
 
しかも、並び替え処理の配列には敵と味方が混在しているので、できれば復号処理中に扱っている対象が敵か味方かを記録しておくフラグ記憶用の配列もアルと便利でしょう(下記コードでは PorEflag 配列)。
 
 
あらかじめ、上記の配列もグローバル変数などとして用意しておく必要があります。
 
よって、上記の「// 行動順配列の入れ替え」などの一連のプログラムの後に、さらに、たとえば次のような復号処理が必要になります。
 
<syntaxhighlight lang="C">
for (int temp = 0; temp <= partyNinzu - 1 + enemyNinzu; ++temp) {
 
// 行動順配列で走査中の要素が味方キャラの場合
if (junjoHairetu[temp] <= partyNinzu - 1) {
PorEflag[temp] = 1; // 味方ならフラグ1にセット
PorE_ID[temp] = junjoHairetu[temp];
}
 
// 行動順配列で走査中の要素が敵の場合
if (junjoHairetu[temp] > partyNinzu - 1) {
PorEflag[temp] = 2; // 敵ならフラグ2にセット
PorE_ID[temp] = -9; // 敵用の仮ID. 味方と重複しないよう、マイナスを使用した。
}
}
</syntaxhighlight>
 
 
=== 戦闘中の各ターンの進行の自動化 ===