2006/04/07

ごにょごにょやってて気づいたこと #003

Luaのリファレンスを時間が出来たときに読んでいたんですが、
Luaは配列に関数を入れることが出来るようなので、イベント用の定数を使って関数を配列に放り込みましたよ。
これならif文の羅列にならないし良いですね、ただし、定義していない値を入れると一瞬のうちにエラーになりますがが。

普通は以下のように関数を宣言するところを…
function 関数名(パラメータ...)
end

下記のように記述すると配列に格納可能ですね。
配列名 = {}
配列名[添え字] = function (パラメータ...)
end

呼び出しは以下のように
配列名[添え字](パラメータ...)

とりあえず実装そたのが下記
ST_FIRSTBOOTはホムがMAP上に出現したタイミングで呼ばれたときに設定しています。
つまり、一番初めに行いたい処理を書くところですね。
私は左に1セルずれるように設定しました。

---------------------------------------------------------------------- -- イベント用関数 ---------------------------------------------------------------------- onStateFunc = {} onStateFunc[ST_FIRSTBOOT] = function (myid) local ox, oy = GetV(V_POSITION, GetV(V_OWNER, myid)) Move(myid, ox - 1, oy) setMyState(MY_OWNERID, GetV(V_OWNER, myid)) setMyState(MY_STATE, ST_IDLE) -- ここでアイドル状態にする end onStateFunc[ST_IDLE] = function (myid) sideByOwner(getMyState(MY_OWNERID), myid) end onStateFunc[ST_CHASE] = function (myid) end onStateFunc[ST_ATTACK] = function (myid) end
そんなわけで、それを実装したai.lua、すっきり!
require "./AI/Const.lua" require "./AI/Util.lua" require "./AI/USER_AI/murmur-config.lua" require "./AI/USER_AI/murmur-const.lua" require "./AI/USER_AI/murmur-function.lua" function AI(myid) onStateFunc[getMyState(MY_STATE)](MyID) end

-- 注意 --

ここでごそごそとやってるコードはあくまで評価用とか実験用です。
ご自身のコードに貼り付けたりするのは自由ですが、貼り付けたプログラムを第三者に配布する場合は、
大変お手数とは思いますが、事前にご一報頂きますようお願いします。
また、プログラムを利用したことで損害や障害が発生したとしても、
当方では一切の責任を負いかねますのでよろしくお願いします。


投稿者 Merchant : 01:06 | コメント (0) | トラックバック(0) | カテゴリ [Lua ]



(c)2006 Gravity Corp. & Lee Myoungjin(studio DTDS). All Rights Reserved.
(c)2006 GungHo Online Entertainment, Inc. All Rights Reserved.
当コンテンツの再利用(再転載・配布など)は、禁止しています。