使用lua 设计一个合成系统 将两个装备合成一件高级装备 失败保留一件装备 合成游戏玩家的装备 优先使用身上一件的装备 如两件装备都在身上不能合成 其次使用背包中装备 装备存在属性 A 不允许合成 存在属性B 将转移到剩下的装备上 如果两件装备都存在 B属性 则将B的最高值 转移到剩下装备

作者: cayman 分类: 杂七杂八 发布时间: 2023-04-28 12:34

问题 :

使用lua 设计一个合成系统 将两个装备合成一件高级装备 失败保留一件装备 合成游戏玩家的装备 优先使用身上一件的装备 如两件装备都在身上不能合成 其次使用背包中装备 装备存在属性 A 不允许合成 存在属性B 将转移到剩下的装备上 如果两件装备都存在 B属性 则将B的最高值 转移到剩下装备

#### 回答:

以下是一个简单的合成系统的Lua程序,用于合成游戏玩家的装备:

“`
— 身上装备
local equippedItems = {
{
name = \”装备A\”,
properties = {\”属性A\”, \”属性B\”, \”属性C\”},
value = {100, 50, 20}
},
{
name = \”装备B\”,
properties = {\”属性B\”, \”属性D\”},
value = {80, 30}
}
}

— 背包装备
local backpackItems = {
{
name = \”装备C\”,
properties = {\”属性B\”, \”属性D\”, \”属性E\”},
value = {60, 40, 10}
},
{
name = \”装备D\”,
properties = {\”属性A\”, \”属性B\”},
value = {70, 20}
}
}

— 合成装备
function combineItems(item1, item2)
local newItem = {
name = item1.name .. \” + \” .. item2.name,
properties = {},
value = {}
}

-- 失败保留一件装备
if math.random() < 0.5 then
    return item1
else
    return item2
end

-- 检查属性A是否存在
for i, prop in ipairs(item1.properties) do
    if prop == \"属性A\" then
        return item1
    end
end

for i, prop in ipairs(item2.properties) do
    if prop == \"属性A\" then
        return item2
    end
end

-- 检查属性B是否存在
local hasBProperty = false
local BPropertyValue = 0

for i, prop in ipairs(item1.properties) do
    if prop == \"属性B\" then
        hasBProperty = true
        BPropertyValue = item1.value[i]
        table.remove(item1.properties, i)
        table.remove(item1.value, i)
        break
    end
end

if not hasBProperty then
    for i, prop in ipairs(item2.properties) do
        if prop == \"属性B\" then
            hasBProperty = true
            BPropertyValue = item2.value[i]
            table.remove(item2.properties, i)
            table.remove(item2.value, i)
            break
        end
    end
end

-- 如果两件装备都存在 B属性
if hasBProperty then
    for i, prop in ipairs(item1.properties) do
        if prop == \"属性B\" then
            local value = item1.value[i]
            if value > BPropertyValue then
                BPropertyValue = value
            end
            table.remove(item1.properties, i)
            table.remove(item1.value, i)
            break
        end
    end

    for i, prop in ipairs(item2.properties) do
        if prop == \"属性B\" then
            local value = item2.value[i]
            if value > BPropertyValue then
                BPropertyValue = value
            end
            table.remove(item2.properties, i)
            table.remove(item2.value, i)
            break
        end
    end

    table.insert(newItem.properties, \"属性B\")
    table.insert(newItem.value, BPropertyValue)
end

-- 合并剩余属性
for i, prop in ipairs(item1.properties) do
    table.insert(newItem.properties, prop)
    table.insert(newItem.value, item1.value[i])
end

for i, prop in ipairs(item2.properties) do
    table.insert(newItem.properties, prop)
    table.insert(newItem.value, item2.value[i])
end

return newItem

end

— 查找可合成的装备
function findCombineItems()
local item1 = nil
local item2 = nil

-- 优先使用身上的装备
for i, item in ipairs(equippedItems) do
    for j, otherItem in ipairs(equippedItems) do
        if i ~= j then
            local newItem = combineItems(item, otherItem)
            if newItem then
                item1 = item
                item2 = otherItem
                break
            end
        end
    end

    if item1 then
        break
    end

    for j, backpackItem in ipairs(backpackItems) do
        local newItem = combineItems(item, backpackItem)
        if newItem then
            item1 = item
            item2 = backpackItem
            break
        end
    end

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注