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 : カテゴリ [Lua ]
トラックバック
このエントリーのトラックバックURL:
http://merchant-murmur.info/mt/mt-tb.cgi/389
※トラックバックを行った際タイムアウト(HTTP error: 500)が起こる場合もありますがトラックバックは正常に行えている場合があります。
エラーが発生した場合はお手数ですが、一度トラックバックを行ったこちらのページをご確認ください。
※トラックバック重複防止用のプラグインを導入しています。
重複ではないのにトラックバックが行えない場合はお手数ですがご連絡いただけますようお願いします。

