マップエディタにめどがついたので、本体側の作成に着手することに。
まずは、夏休みの三大課題のひとつ、思考ルーチンです。今回は、格闘ゲームにおける思考ルーチンを考えてみます。
僕は、思考ルーチンは次のような処理に簡略化できると思ってます。それは、 うまく説明できる自身がないので、結論から入ります。今日僕は、思考ルーチンは次のように簡略化できるんじゃないか? と思いつきました。次に示します。 行動 = とりうる行動テーブル[周囲の状況]; 「テーブルからひっぱってくるのはいいけど、周囲の状況をどうやって整数にするんだよ!」っていう話になりますが、 それも簡単です。次のような感じになります。
//相手との距離に応じて行動を変える思考ルーチンのサンプル //距離<10なら接近、 //10<距離<30 var Dst:Integer; //相手との距離 ThinkTable:array [0..255] of procedure; procedure Think; const NearValue = 1; MiddleValue = 2; FarValue = 4; var Index:Integer; begin Index:=Integer(Dst<10)*NearValue or Integer((Dst>=10)and(Dst<30))*MiddleValue or Integer((Dst>=30)and(Dst<50))*FarValue; ThinkTable[Index]; end;しかし、これには大きな欠点があります。 例えば、上記のような行動テーブルが255個しかない場合には、 行動を決定付けるフラグが8個しか作れません。 行動テーブルを65536にしてみても、たったの16個です。 行動テーブルには行動(procedure)へのポインタを入れておくとすると、 4*65536バイトの領域を使います。およそ240キロバイトくらいです。 行動テーブルは敵キャラ全員に使いまわしをさせるとしても、結構実用的です。 こういう思考ルーチンの実装方があっても、いいんじゃないでしょうか?
|
夏休み三大課題 マップエディタの作り直し、思考ルーチンの改良、システムの改造、の三つを指す。 現段階では、マップエディタしか片付いていない。
|