• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            劍孤寒的小站

            人生的價(jià)值不是用時(shí)間,而是用深度去衡量的!
            posts - 75, comments - 290, trackbacks - 0, articles - 0

            在Lua中使用List

            Posted on 2008-10-26 11:06 劍孤寒 閱讀(6808) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Lua
            《在Lua中使用List 》
            轉(zhuǎn)載請(qǐng)注明出處:http://groups.google.com/group/jianguhan


            在《Programming in Lua》一書中提到了一個(gè)雙端隊(duì)列的實(shí)現(xiàn)方法,我把它拿來改進(jìn)了一下用在了我正在制作的一個(gè)RPG游戲里,用起覺得 來還不錯(cuò),加了一個(gè)GetSize()來取得List的大小,這個(gè)在游戲制作中用處還是很大的^_^

            源代碼如下:
            CList = class()

            function CList:ctor()
                    self.m_list = { first = 0, last = -1 }
            end

            function CList:PushFront(value)
                    local first = self.m_list.first - 1
                    self.m_list.first = first
                    self.m_list[first] = value
            end

            function CList:PushBack(value)
                    local last = self.m_list.last + 1
                    self.m_list.last = last
                    self.m_list[last] = value
            end

            function CList:PopFront()
                    local first = self.m_list.first
                    if first > self.m_list.last then return nil end
                    local value = self.m_list[first]
                    self.m_list[first] = nil
                    self.m_list.first = first + 1
                    return value
            end

            function CList:PopBack()
                    local last = self.m_list.last
                    if self.m_list.first > last then return nil end
                    local value = self.m_list[last]
                    self.m_list[last] = nil
                    self.m_list.last = last - 1
                    return value
            end

            function CList:GetSize()
                    if self.m_list.first > self.m_list.last then
                            return 0
                    else
                            return math.abs(self.m_list.last - self.m_list.first) + 1
                    end
            end

            在最前面的那句CList = class() 這里使用了云風(fēng)寫的一個(gè)class函數(shù)創(chuàng)建一個(gè)類,
            這個(gè)函數(shù)可以在云風(fēng)的博客上找到,為了方便起見我就在這里先抄一下了:

            local _class={}

            function class(super)
                    local class_type={}
                    class_type.ctor=false
                    class_type.super=super
                    class_type.new=function(...)
                                    local obj={}
                                    do
                                            local create
                                            create = function(c,...)
                                                    if c.super then
                                                            create(c.super,...)
                                                    end
                                                    if c.ctor then
                                                            c.ctor(obj,...)
                                                    end
                                            end

                                            create(class_type,...)
                                    end
                                    setmetatable(obj,{ __index=_class[class_type] })
                                    return obj
                            end
                    local vtbl={}
                    _class[class_type]=vtbl

                    setmetatable(class_type,{__newindex=
                            function(t,k,v)
                                    vtbl[k]=v
                            end
                    })

                    if super then
                            setmetatable(vtbl,{__index=
                                    function(t,k)
                                            local ret=_class[super][k]
                                            vtbl[k]=ret
                                            return ret
                                    end
                            })
                    end

                    return class_type
            end

            久久久久人妻一区精品性色av | 99久久精品国产毛片| 久久99国产精品久久99| 99久久精品这里只有精品| 欧美国产成人久久精品| 久久亚洲国产成人精品性色| 国产精品久久毛片完整版| 久久这里只有精品视频99| 精品国产VA久久久久久久冰| 久久无码人妻精品一区二区三区| 伊人久久大香线蕉综合影院首页 | 国产高潮久久免费观看| 国产精品久久婷婷六月丁香| 免费观看成人久久网免费观看| 天天综合久久一二三区| 国产精品视频久久久| 国内精品久久久久影院薰衣草| 久久国产精品波多野结衣AV| 国内精品久久久久伊人av| 久久久久亚洲AV片无码下载蜜桃 | 中文精品久久久久国产网址| 麻豆精品久久久久久久99蜜桃| 97精品伊人久久久大香线蕉| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 久久精品国产精品亚洲精品| 久久国产精品无| 日韩AV毛片精品久久久| 人人狠狠综合久久亚洲88| 久久天天躁狠狠躁夜夜躁2O2O| 91麻豆国产精品91久久久| 青青久久精品国产免费看| 国内精品欧美久久精品| 国产精品免费久久久久久久久| 久久综合综合久久97色| 久久综合欧美成人| 亚洲精品国产成人99久久| 大香网伊人久久综合网2020| 热re99久久精品国产99热| 久久国产免费| 久久99国产精品久久99小说| 热99RE久久精品这里都是精品免费 |