pareadas e ipairs

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Muitos scripts geralmente precisarão passar por dicionários ou arranjos. Mas, às vezes, você pode não saber o início e o fim dessas estruturas de dados. Por exemplo, um dicionário de jogadores pode estar alterando ou os jogadores podem ter um inventário de arranjos de tamanhos variáveis.

Nessas situações, você pode usar pairs() e ipairs(). Esses podem ser usados com um for loop para passar por cada elemento sem pontos de início e fim conhecidos.

Este artigo cobrirá o uso deles e terá um exemplo prático de script onde você rastreia pedidos de restaurante em um jogo de cozinha.

Dicionários e parceiros()

pairs() é usado com dicionários . Um exemplo é visto abaixo.


local myDictionary = {
["Blue Player"] = "Ana",
["Gold Player"] = "Binh",
["Red Player"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(key .. " is " .. value)
end

pairs() pode ser usado para trabalhar com a chave, o valor ou ambos de um elemento de dicionário. No forço abaixo, a primeira variável é a chave. A segunda variável é o valor. O dicionário que você deseja trabalhar com é passado para pairs() .


local inventory = {
["Gold Bricks"] = 43,
Carrots = 3,
Torches = 2,
}
print("You have:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
end

Quando executado, o código imprimirá o seguindo:


You have:
43 Gold Bricks
3 Carrots
2 Torches

Matrizes e ipairs()

ipairs() é usado com arrays . O "i" em ipairs() significa "índice". Use ipairs() e arrays em combinação com um for loop para trabalhar com valores ordenados, como placares. Um exemplo está abaixo.


local players = {"Ali", "Ben", "Cammy"}
for playerRank, playerName in ipairs(players) do
print("Winner #" .. playerRank .. " is " .. playerName)
end

Quando executado, o código imprimirá o seguindo:


Winner #1 is Ali
Winner #2 is Ben
Winner #3 is Cammy

Prática - Restaurante Soup Simulator

Vamos fazer uma sopa para um simulador de restaurante onde os jogadores escolhem de uma lista de possíveis ingredientes de sopa. Os ingredientes serão armazenados como chaves e os valores começarão como falsos, para que os jogadores só obtenham o que eles selecionarem.

Use pairs() para ver o que foi escolhido, e então ipairs() para imprimir a lista de ingredientes.

  1. Crie um novo dicionário chamado menu . Adicione 3 - 5 pares de valor-chave onde a chave é o ingrediente e o valor é falso.


    local menu = {
    cabbage = false,
    beef = false,
    tomato = false,
    noodles = false,
    }
  2. Embaixo do dicionário de menu, adicione um array empty que será preenchido com as escolhas do cliente mais tarde.


    -- Sopa do cliente
    local selectedIngredients = {}
  3. Use pairs() para verificar se cada ingrediente no dicionário está marcado como verdadeiro ou falso. Se for verdadeiro, adicione o ingrediente à sopa.


    -- Sopa do cliente
    local selectedIngredients = {}
    -- Adiciona as escolhas do cliente à sua sopa
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(selectedIngredients, menuChoice)
    end
    end
  4. Repita a ordem de volta ao cliente. No script, código o seguinte abaixo.

    • Verifique se há um item de menu em selectedIngredients . Se sim, imprima "You ordered soup with: " .
    • Use ipairs() para passar pelo arranque selectedIngredients e imprimir cada ingrediente.
    • Teste alterando pelo menos um item de menu para verdadeiro.

    -- Imprime a ordem de sopa de "ingredientes selecionados"
    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    end
  5. Na declaração if que verifica se há um item, adicione uma outra condição que diga aos clientes se nenhum ingrediente foi selecionado.


    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    else
    print("Nothing was selected. Are you not hungry?")
    end

Desafios Opcionais

Abaixo estão alguns desafios que aplicam uso de pares e ipairs de maneiras diferentes. Tente ver se você pode construir o código para esses. Desafio : Crie um NPC de Waiter em vez de usar a janela de saída, use o NPC de Intro To Arrays para criar um Waiter para aceitar os pedidos dos clientes. Desafio : Permitir que os jogadores coloquem pedidos Permitir que os jogadores selecionem um ingrediente tocando uma parte física, como um prompt de proximidade. Para mais informações, see Prompts de proximidade . Desafio Avançado : Meça-me algum simulador de sopa Crie um simulador de restaurante onde os jogadores são os chefs! Os jogadores terão que colocar os ingredientes para corresponder à ordem dada a eles pelo garçom.

  1. Crie propriedades no jogo para 3 - 5 ingredientes diferentes.
  2. Crie 3 - 5 receitas usando dicionários semelhantes ao que está nesta lição.
  3. Crie um array que contém todas as receitas.
  4. Selecione aleatoriamente uma receita e use um NPC para dizer aos jogadores quais são os ingredientes.
  5. Crie um novo dicionário para fazer uma receita com base em quais ingredientes de prop a pessoa toca.
  6. Compare a receita do jogador com a receita escolhida pelo NPC.
  7. Aumente o desafio adicionando uma condição extra, como um timer.