|
マップエディタにめどがついたので、本体側の作成に着手することに。
まずは、夏休みの三大課題のひとつ、思考ルーチンです。今回は、格闘ゲームにおける思考ルーチンを考えてみます。
僕は、思考ルーチンは次のような処理に簡略化できると思ってます。それは、 うまく説明できる自身がないので、結論から入ります。今日僕は、思考ルーチンは次のように簡略化できるんじゃないか? と思いつきました。次に示します。 行動 = とりうる行動テーブル[周囲の状況]; 「テーブルからひっぱってくるのはいいけど、周囲の状況をどうやって整数にするんだよ!」っていう話になりますが、 それも簡単です。次のような感じになります。
//相手との距離に応じて行動を変える思考ルーチンのサンプル
//距離<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キロバイトくらいです。行動テーブルは敵キャラ全員に使いまわしをさせるとしても、結構実用的です。 こういう思考ルーチンの実装方があっても、いいんじゃないでしょうか?
|
夏休み三大課題 マップエディタの作り直し、思考ルーチンの改良、システムの改造、の三つを指す。 現段階では、マップエディタしか片付いていない。
|