用于点:尽可能的使用最小单位道具。
想法:
- 手中道具或许有多个,所以用的是可配置方案。
- 时间转化为分计算。
- 利用while处理最小单位道具依次判断
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
ε≡٩(๑>₃<)۶ 请大家多多评论一起讨论讨论