Menu
CoddyTech

Responder a Consultas sobre Itens

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 73 de 80.

challenge icon

Desafio

Médio

Responda a um jogador que pergunta sobre um item.

  1. Apague as linhas abaixo de -- Try it.
  2. Abaixo, leia local category = io.read() e local id: number = tonumber(io.read()) or 0.
  3. Para "weapon", imprima describeWeapon(item) para findItem(weapons, id); caso contrário, use potions e describePotion.
  4. Imprima Item not found quando findItem retornar nil.

Pressione Executar código: com a entrada weapon e 2, você verá Weapon: Fire Axe (damage 40).

Experimente você mesmo

-- A estrutura de item compartilhada por todos os inventários
type Item<T> = {
    id: number,
    name: string,
    data: T,
}
local sword: Item<{damage: number}> = {id = 1, name = "Iron Sword", data = {damage = 25}}
local potion: Item<{heal: number}> = {id = 2, name = "Health Potion", data = {heal = 40}}
-- Crie um item com o próximo id disponível, armazene-o e retorne-o
local function addItem<T>(inventory: {Item<T>}, name: string, data: T): Item<T>
    local item: Item<T> = {id = #inventory + 1, name = name, data = data}
    table.insert(inventory, item)
    return item
end
type Weapon = Item<{damage: number}>
type Potion = Item<{heal: number}>
local weapons: {Weapon} = {}
addItem(weapons, "Iron Sword", {damage = 25})
addItem(weapons, "Fire Axe", {damage = 40})
-- O item com este id, ou nil
local function findItem<T>(inventory: {Item<T>}, id: number): Item<T>?
    for _, item in ipairs(inventory) do
        if item.id == id then
            return item
        end
    end
    return nil
end
local potions: {Potion} = {}
addItem(potions, "Health Potion", {heal = 40})
-- Uma descrição para cada tipo de item
local function describeWeapon(item: Weapon): string
    return `Weapon: {item.name} (damage {item.data.damage})`
end

local function describePotion(item: Potion): string
    return `Potion: {item.name} (heals {item.data.heal})`
end
-- Experimente
print(describeWeapon(weapons[2]))
print(describePotion(potions[1]))

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Luau online