CocosLua3.10 根据所需时间获取手中需要到道具

2019-11-20  本文已影响0人  叫我29就好啦
用于点:尽可能的使用最小单位道具。
想法:
function testFun:fun_1()
    local itemConfig = {}  -- 配置表
    local needItem = {}  -- 所需个数(与配置顺序保持一致)

    -- 假装玩家有数据
    local item1 = {min = 5, count = 23, name = 'item1_5min', ext = '5min'}
    -- local item2 = {min = 60, count = 19, name = 'item2_1hour', ext = '1hour'}
    local item3 = {min = 60 * 8, count = 1, name = 'item3_8hour', ext = '8hour'}

    -- 假装有这么多条数据(可修改为收到服务端然后客户端解析)
    table.insert(itemConfig, item1)
    -- table.insert(itemConfig, item2)
    table.insert(itemConfig, item3)

    -- 初始化个数
    for i, v in ipairs(itemConfig) do
        table.insert(needItem, 0)
    end

    -- 所需时间
    local needTime = 1 * 60 + 25

    -- 先检查下,如果玩家手中所有道具都不能到达所需时间,则直接返回
    local totalMin = 0
    for i, v in ipairs(itemConfig) do
        totalMin = totalMin + v.min * v.count
    end

    if totalMin < needTime then
        return print('道具数量不足')
    end

    local currentTime = needTime

    -- 遍历所有配置,寻找哪个是满的
    local function checkIsFull()
        local idx = -1
        for i, v in ipairs(itemConfig) do
            if (v.count - needItem[i]) * v.min > currentTime then
                idx = i
                break
            end
        end

        if idx > 0 and itemConfig[idx] then
            if itemConfig[idx].count >= needItem[idx] then
                needItem[idx] = needItem[idx] + 1
                currentTime = currentTime - itemConfig[idx].min
            end
            return true
        end

        return false
    end

    print('需要总时间为', needTime)
    while(currentTime > 0) do
        -- 满的情况下
        if not checkIsFull() then
            -- 不满的情况
            for i, v in ipairs(itemConfig) do
                if v.count > needItem[i] then
                    currentTime = currentTime - v.min
                    needItem[i] = needItem[i] + 1
                    break
                end
            end
        end
    end

    -- 打印(输出)
    local str = ''
    local totalUseTime = 0
    for i, v in ipairs(itemConfig) do
        local needStr = string.format('所需%s个数是:%d  ', v.ext, needItem[i])
        str = str .. needStr
        totalUseTime = totalUseTime + v.min * needItem[i]
    end
    print(str)

    local str1 = string.format('总共时间需要%d分,通过逻辑计算需要分为%d', needTime, totalUseTime)
    print(str1)
    print(string.format('超额时间%s分', currentTime))
end

ε≡٩(๑>₃<)۶ 请大家多多评论一起讨论讨论

上一篇 下一篇

猜你喜欢

热点阅读