【步兵 經驗篇】工廠模式 in Game

【步兵 經驗篇】工廠模式 in Game by EOS.

最近在看《Effective Java中文版 第2版》,密碼 968n,雖然是java的,
但是講的很有深度,是不錯的一本書,而且語言直接是都是相通的。
可以看一下java基礎,寫點小demo熟悉一下,然後再看看此書。

說了辣麼多,然而還是用lua講=、=,腳本寫起來就是方便


舉個栗子

GameElement = {
    Player  = 1,    --玩家
    Monster = 2,    --怪
    NPC     = 3,    --NPC
    Text    = 4,    --傷害、暴擊等
    Effect  = 5,    --特效
    Collect = 6,    --採集物
    Drop    = 7,    --掉落物品
    Shadow  = 8,    --陰影(可單獨拿出來做優化)

    --當然也可以直接用屬性字典{type, id, model, name, ...}
    new = function(elementType, id) 
        local ret = GameElement.get(elementType, id)
        if ret then return ret end

        if elementType == GameElement.Player then
            ret = PlayerElement.new(id)
        elseif elementType == GameElement.Monster then
            ret = MonsterElement.new(id)
        --其他省略  
        end
        --根據不同類型放入不同的表,例如
        --ElementMgr[GameElement.Player] = {} 
        Mgr.ElementMgr.addElemet(ret.getType(), ret)
        return ret
    end,

    get = function(elementType, id)
        return Mgr.ElementMgr.getElemet(elementType, id)
    end,

    kill = function(elementType, id)
        --清除指定類型,指定id
    end,

    killById = function(id)
        --清除所有類型,指定id
    end,

    clearByType = function(elementType)
        --清除指定類型,全部id  
    end,
    ------------以上三個方法可以統一調用 Element:killed()--------------
}


local player = GameElement.new(GameElement.Player, serverId)
--player:該幹啥幹啥

local oldPlayer = GameElement.get(GameElement.Player, serverId)

像這樣 通過統一接口,來生成不同的數據,而且隱藏了內部的函數複雜的邏輯,
降低了耦合,讓代碼看上去更加 統一和簡介,而且也方便管理。


代碼管理

這裏說的不是代碼的版本控制,而是單單隻代碼或者說代碼邏輯的管理。
(ps:我的項目是用svn+雲盤來管理的,git什麼好麻煩,還是svn人性化)

寫代碼寫的越久,就會越發現,對代碼的掌控力很重要,能夠快速的定位到代碼,
而且直觀的管理數據,對項目而言,可能比運行效率更加重要。
當然這樣對開發的效率和代碼的維護都是有意的。

(ps:當然代碼寫太爛的,該練還是要練,不要害怕重構。一時費事,可能受益良久,
比如戳中了你的某根弦,刷的一下就覺得寫代碼信手拈來=、=)


結語

想提過代碼水平,代碼量是必不可少的,包括寫和讀。
看別人的代碼,學的是最快的,但是不寫過是不會發現什麼缺陷,
或者是不清楚在什麼地方用什麼樣的方式,來管理代碼。

比如最近的項目,事件驅動雖然是不錯的方式,但是什麼東西都用事件來寫,
就感覺整個邏輯變成了蜘蛛網,縱橫交錯。(噁心乾嘔,這是慢性咽炎的症狀)

比如ui。直接UIMgr:show、hide、close之類來控制界面不就好了麼,
非要,註冊個Listener,來監聽OpenXXLayer事件,然後這fire一下,
那fire一下,然後那麼多界面在一起就是 fire fire fire ,突突突~啊~ 突突突~
this is a war (捂臉 流淚.gif)

希望大家能寫多看代碼,多多交流,不要在摸黑的路上越走越遠~
可以加羣交流,羣號左上角~

See Again~
之前
真愛無價,歡迎打賞~
讚賞碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章