基于Lua的清除类游戏算法

最近在开发游戏,用Lua语言。习惯了其它的语言,然后对Lua的一些语法很不习惯。
比如table的元素个数的取值,比switch语句等等。
不过没有办法,还是要运用Lua来写游戏的。看来学C++还真的挺有用的,大学也没算白学啊。回头也得补一下C++才行,还得看cocos2d-x的代码,没办法。啊。
言归正传。
这两天要写个游戏,结果同个名称的游戏,玩法都不一样的。
然后我写的一个算法居然是另外一种玩法的方案,没办法,明天还得继续想解决方法。不过已经有点思路了。特拿出来分享。

原创首发于:
http://www.zzzzy.com/201408063254.html
http://www.oupag.com/bbs/thread-7817-1-1.html

-------自己写的算法开始-------
    --检查横向是否相同的精灵,根据num编码来
    local function checkCols(m_num, m_tag)
    
        --往左
        local toLeft = m_num % col  --左边余下个数
        for i = 1, toLeft, 1 do
            local toLnum = m_num - i
            local l_star = starObject:objectAtIndex(toLnum)  --取出对象中的精灵     
 
            if l_star:getTag() == m_tag then
                --clearStars(toRnum, m_tag)
                if isInTable(l_star, deleteStars) == 1 then
                    table.insert(deleteStars, toLnum, l_star)
                end
            else
                break
            end
        end    
 
        --往右
        local toRight = col - toLeft - 1  --右边余下个数
        for i = 1, toRight, 1 do
            local toRnum = m_num + i
            local r_star = starObject:objectAtIndex(toRnum)  --取出对象中的精灵     
 
            if r_star:getTag() == m_tag then
                --clearStars(toRnum, m_tag)
                if isInTable(r_star, deleteStars) == 1 then
                    table.insert(deleteStars, toRnum, r_star)
                end
            else
                break
            end
        end    
 
    end
 
    --检查纵向是否相同的精灵
    local function checkRows(m_num, m_tag)
        --往下
        local toBottom = math.ceil(m_num / row) - 1  --下边余下个数
        for i = 1, toBottom, 1 do
            local toBnum = m_num - i * col
            local b_star = starObject:objectAtIndex(toBnum)  --取出对象中的精灵     
 
            if b_star:getTag() == m_tag then
                --clearStars(toBnum, m_tag)
                if deleteStars[toBnum] == nil then
                    table.insert(deleteStars, toBnum, b_star)
                end
            else
                break
            end
        end    
 
        --往上
        local toTop = row - toBottom - 1 --上边余下个数
        for i = 1, toTop, 1 do
            local toTnum = m_num + i * col
            local t_star = starObject:objectAtIndex(toTnum)  --取出对象中的精灵     
 
            if t_star:getTag() == m_tag then
                --clearStars(toTnum, m_tag)
                if deleteStars[toTnum] == nil then
                    table.insert(deleteStars, toTnum, t_star)
                end
            else
                break
            end
        end
    
    end
 
    function clearStars(m_num, m_tag)
        checkCols(m_num, m_tag)
        checkRows(m_num, m_tag)
 
    end
-------算法结束-------

你可能感兴趣的:(lua)