实战游戏宠物,坐骑获取经验升级算法----lua脚本

实战游戏宠物,坐骑获取经验升级算法----lua脚本

项目需求:坐骑获取一定的经验值,计算在原有的经验和等级的基础上,获取经验后可以达到的等级,以及当前的经验。输出剩余经验池经验,使用的经验

表格:expTable  升级经验表

表格结构:expTable={[lv]={exp = xxx,lv=x}}

expTable={
[1] = {exp = 1632,lv=1,},
[2] = {exp = 2448,lv=2,},
[3] = {exp = 3264,lv=3,},
[4] = {exp = 4080,lv=4,},
[5] = {exp = 4896,lv=5,},
[6] = {exp = 5712,lv=6,},
[7] = {exp = 6528,lv=7,},
[8] = {exp = 7344,lv=8,},
[9] = {exp = 8160,lv=9,},
}


local nHasExp = 10000 -- 当前获取的经验(经验池)
local nTotalExp = 1000 --当前拥有的经验 
local nLestExp = nHasExp --剩余拥有的经验(经验池)
local nCanUse = 0  --最终有效可使用经验
local nLv = 1      --当前等级
if nLv >= #expTable then
    --已经是最大等级不需要升级了
    return
end
nLestExp = nTotalExp + nHasExp - expTable[nLv].exp
if nLestExp >= 0 then --要增加的经验与当前经验相加满足升级经验--至少可以升一级
    while(nLestExp >= 0) do
        local nCnt = expTable[nLv].exp - nTotalExp
        if nCnt < 0 then
            nCnt = expTable[nLv].exp
        end
        nCanUse = nCanUse + nCnt
        if nLv >= #expTable then --升级到最大等级了
            break
        end
        nLv = nLv + 1
        nTotalExp = nLestExp --更新剩余经验池经验
        nLestExp = nTotalExp - expTable[nLv].exp
        if nLestExp < 0 then
            nCanUse = nCanUse + nTotalExp
        end
    end
else
    nTotalExp = nTotalExp + nHasExp  --更新当前拥有经验
    nCanUse = nCanUse + nHasExp        --可以被使用的经验
end
print("nHasExp,nTotalExp,nLestExp,nCanUse,nLv ",nHasExp,nTotalExp,(nHasExp-nCanUse),nCanUse,nLv)

输出结果:

nHasExp, nTotalExp , nLestExp , nCanUse , nLv 10000 3656 0 10000 4