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

削除された内容 追加された内容
編集の要約なし
998 行
ドラクエ1のように、敵と味方が1対1の戦いなら簡単ですが、ドラクエ2以降や『ファイナルファンタジー』シリーズのように、味方が複数人、敵も複数匹の場合、それらの行動準の決定アルゴリズムは、けっこう難しいです。
 
さて、まずアナタのすべき事として、ドラクエ1のように敵と主人公が1対1のバトルのプログラムを、あなたの自作ゲームのソースコードに書いてください。それが今後の作業の出発点です。そして、その1対1のバトルのプログラムを実際に自作ゲームに組み込んで、とりあえずプレイ可能な状態まで持っていってください。
 
それが出来たら、次に、その1対1のプログラムを拡張して 多数 対 多数 のプログラムに改造していきましょう。
1,012 行
たとえば、味方3人、敵2匹なら、配列の要素の5個を使います。
 
あらかじめ、配列で要素数20や30など、十分に要素数の大きい配列を1つ用意しておきましょう。
 
そして、この、たとえば要素数20の配列の先端5個ぶんの要素に、素早さの値を入れるわけです。
1,116 行
;より実際的な場合
実際には、戦闘に参加している自陣営パーティのキャラが、必ずしもID順に並んでいるとは限りませんので、そのために復号する処理が必要です。
 
たとえば、ドラクエ3やウィザードリィ・シリーズでは、登録した順番と、パーティのキャラクターの順番とは違います。
 
つまり、たとえば、並び替え処理用で味方「1」番とされたキャラが、実際に登録IDが「13」番のキャラだったりするような場合もあるわけです。
並び替え処理用の味方2番のキャラは、たとえば登録IDが7番かもしれません。
 
 
なので、
1,148 ⟶ 1,151行目:
 
なお、復号は、並び替え処理側の関数でなくとも、その関数(並び替え処理関数)の呼び出し側関数(「並び替え処理関数」とは別の関数)でも可能です。呼び出し側の関数の都合によって復号のコードは違うので、復号のコードの具体例の詳細については省略します。
 
 
この復号も、けっこう難しいプログラムになり、初心者にはハードルが高いです。なので、まずはドラクエ2のような、仲間の出し入れをする「酒場」の無いゲームから作るのが簡単でしょう。(昔のPRGでは、「酒場」というゲーム内施設で、パーティの加入や離脱などの編集が行えた。2000年以降のフリーゲームRPG作品でいう「冒険者ギルド」のような施設に相当する。)
 
一方、もしいきなり、ドラクエ3の「ルイーダの酒場」や、ウィザードリィの「ギルガッメシュの酒場」のような、パーティキャラを出し入れする機能を作ってしまうと、かなり、ソートのプログラミングが難しくなります。
 
 
一般にRPGにおいて、戦闘に参加するのはパーティとして引き連れているキャラクターですので、
つまり、ソート結果をもとに適切なパーティ加入中キャラを呼び出し、さらにそのパーティ加入中キャラのIDをもとに内部データベ-スの登録キャラのIDにアクセスするという手続きが必要になり、これまた難問です。いやまあ、配列で書けば、せいぜい
<code>登録データベース配列[パーティ配列[ソート結果配列[temp] ] ]</code>
のような入れ子になった配列のコード1つで済むのですが、しかし実際にこれをプログラミングしようとすると、デバッグ中に入れ子になった各パラメータを追跡する手間があるので、けっこう大変です。よって「酒場」・「冒険者ギルド」方式への対応は、初心者には敷居が高いです。
 
なので、とりあえずドラクエ2方式から、作るのが無難です。
 
ファミコン時代の初期からウィザードリィは1作目から「酒場・冒険者ギルド」方式ですが(正確にはウィザードリィの原作は1981年のパソコンゲームなのでファミコン(1983年に発売)よりも古い)、あれはウィザードリィの作者たちが天才的なプログラマーだから出来る芸当ですので、初心者がいきなりウィザードリィ方式を目指すのは、頓挫するリスクが高いです。
 
なので天才ではない普通のゲームプログラマー初心者は、戦闘システムの開発では、
:ドラクエ1方式 → ドラクエ2方式 → ドラクエ3方式
とステップアップしていきましょう。
 
そもそもドラクエ1~3の三部作自体が、これはプレイヤーをRPGに馴れさせるためにステップアップ的に開発された作品です(1980年代の当時、ドラクエ以外のRPGはまだあまり普及していなかった)。