ゲーム開発

luaでswitch~caseぽいことをやる

luaにはswitch文がありません。
if~elseif~で頑張ってもいいけど、もう少しスマートに書きたいところです。

luaのテーブルを使ってswitchぽい書き方ができます。
サンプルとして enumぽい定義を書いて、switchぽい関数を書いてみました。
C言語の懐かしい関数テーブルと同じ要領です。
SwitchMainstateIdを渡すと対応する関数にジャンプするので、switchぽいことができます。

-- enumぽい定義
local StateId = {
    Idle = 1,
    Run = 2,
    Attack = 3,
}

-- switchぽい関数分岐
function SwitchMain(stateId, arg)
    local switchCase={}
    switchCase[StateId.Idle] = SwitchCaseIdle
    switchCase[StateId.Run] = SwitchCaseRun
    switchCase[StateId.Attack] = SwitchCaseAttack
    switchCase[stateId](arg)
end

function SwitchCaseIdle(arg)
end

function SwitchCaseRun(arg)
end

function SwitchCaseAttack(arg)
end

このサンプルではargで引数を1つ取れるようにしました。
実体は関数テーブルなので形式に縛りはありますが、いろいろ使い勝手が良いです。
上記のようなStateごとの分岐や、AIの思考フェーズなど大きなカテゴリでの分岐に向いてます。

タイトルとURLをコピーしました