Muitos scripts muitas vezes precisarão passar por dicionários ou arrays.Mas às vezes, você pode não saber o começo e o fim dessas estruturas de dados.Por exemplo, um dicionário de jogadores pode estar mudando ou os jogadores podem ter um inventário de arrays de tamanhos variados.
Nessas situações, você pode usar pairs() e ipairs().Estes podem ser usados com um loop for para percorrer cada elemento sem pontos de início e término conhecidos.
Este artigo abordará o uso deles e terá um exemplo de script prático onde você rastreia pedidos de restaurante em um jogo de cozinha.
Dicionários e pares()
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) doprint(key .. " is " .. value)end
pairs() pode ser usado para trabalhar com a chave, o valor ou ambos de um elemento dicionário.No loop for abaixo, a primeira variável é a chave.A segunda variável é o valor.O dicionário com o qual você deseja trabalhar é passado para pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Ao ser executado, o código imprimirá o seguindo:
You have:43 Gold Bricks3 Carrots2 Torches
Arranjos e ipairs()
ipairs() é usado com arrays .O "i" em ipairs() representa "índice." Use ipairs() e arrays em combinação com um ciclo for para trabalhar com valores ordenados, como placares.Um exemplo está abaixo.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Ao ser executado, o código imprimirá o seguindo:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Prática - Simulador de Sopa de Restaurante
Vamos fazer uma sopa para um simulador de restaurante onde os jogadores escolhem de uma lista de ingredientes de sopa possíveis.Os ingredientes serão armazenados como chaves e os valores começarão como falsos para que os jogadores recebam apenas o que selecionarem.
Use pairs() para ver o que foi selecionado e, em seguida, ipairs() para imprimir a lista de ingredientes.
Crie um novo dicionário nomeado menu com o nome . Adicione 3 - 5 pares de chave-valor onde a chave é o ingrediente e o valor é falso.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Abaixo do dicionário de menus, adicione um array vazio que será preenchido com as escolhas do cliente mais tarde.
-- Sopa do Clientelocal selectedIngredients = {}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 Clientelocal selectedIngredients = {}-- Adiciona as escolhas do cliente à sua sopafor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendRepita a ordem de volta ao cliente. No script, códigue o seguinte abaixo.
- Verifique se há um item de menu em selectedIngredients . Se assim for, imprima "You ordered soup with: " .
- Use ipairs() para percorrer o selectedIngredients array 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 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendNa declaração if que verifica se há um item de menu, adicione uma condição else que diga aos clientes se nenhum ingrediente foi selecionado.
if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("Nothing was selected. Are you not hungry?")end
Desafios facultativos
Abaixo estão alguns desafios que se aplicam usando pares e ipares de diferentes maneiras. Tente ver se você pode construir o código para esses. Desafio : Crie um NPC de Garçom em vez de usar a janela de Saída, use o NPC de Intro to Arrays para criar um garçom para receber os pedidos dos clientes. Desafio : Permitir que os jogadores façam pedidos Permita que os jogadores selecionem um ingrediente tocando em uma parte física, como um aviso de proximidade.Para mais informações, veja Avisos de Proximidade. Desafio Avançado : Make Me Some Soup Simulator Crie um simulador de restaurante onde os jogadores são os chefs! Os jogadores terão que juntar ingredientes para combinar com a ordem dada a eles pelo garçom.
- Crie próps no jogo para 3 a 5 ingredientes diferentes.
- Crie 3 - 5 receitas usando dicionários semelhantes ao da lição neste momento.
- Crie um array que contenha todas as receitas.
- Selecione aleatoriamente uma receita e use um NPC para dizer aos jogadores quais são os ingredientes.
- Crie um novo dicionário para criar uma receita com base em quais ingredientes de prop o jogador toca.
- Compare a receita do jogador com a receita escolhida pelo NPC.
- Aumente o desafio adicionando uma condição extra, como um temporizador.