Muitos scripts geralmente precisam passar por dicionários ou matrizes. 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 matrizes de tamanhos variáveis.
Nestas situações, você pode usar pairs() e ipairs() . Estes podem ser usados com um loop para passar por cada elemento sem pontos de início e fim conhecidos.
Este artigo abordará como usá-los e terá um exemplo prático de script onde você rastreia os pedidos de restaurantes 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, valor ou ambos de um elemento de 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
Quando expresso, o código irá imprimir o seguindo:
You have:43 Gold Bricks3 Carrots2 Torches
Matrizes e ipairs ()
ipairs() é usado com matrizes . O "i" em ipairs() significa "index." Use ipairs () e matrizes em combinação com um loop para trabalhar com valores ordenados, como tabelas de classificação. Um exemplo está abaixo.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Quando expresso, o código irá 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 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 selecionarem.
Use pairs() para ver o que foi escolhido e então ipairs() para imprimir a lista de ingredientes.
Crie um novo dicionário chamado menu . Adicione 3 - 5 pares de valores de chave onde a chave é o ingrediente e o valor é falso.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Abaixo do dicionário do menu, adicione uma matriz vazia **** que será preenchida com as escolhas do cliente mais tarde.
-- Sopa do clientelocal isInSoup = {}Use pairs() para verificar se cada ingrediente no dicionário é marcado como verdadeiro ou falso. Se for verdadeiro, adicione o ingrediente à sopa.
-- Sopa do clientelocal isInSoup = {}-- Adiciona as escolhas do cliente à sua sopafor menuChoice, value in pairs(menu) doif value thentable.insert(isInSoup, menuChoice)endendRepita o pedido de volta para o cliente. No script, codifique o seguinte abaixo.
- Verifique se há um item de menu em isInSoup . Se sim, imprima "You ordered soup with: " .
- Use ipairs() para passar pela matriz isInSoup e imprimir cada ingrediente.
- Teste alterando pelo menos um item do menu para verdadeiro.
-- Imprime o pedido de sopa de "isInSoup"if isInSoup thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(isInSoup) doprint(soupIngredient)endendNa declaração if que verifica se há um item de menu, adicione uma condição else que diz aos clientes se nenhum ingrediente foi selecionado.
if isInSoup thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(isInSoup) doprint(soupIngredient)endelseprint("Nothing was selected. Are you not hungry?")end
Desafios Opcionais
Abaixo estão alguns desafios que se aplicam usando pares e ipairs de maneiras diferentes. 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 aceitar pedidos de clientes. Desafio : Permitir que os jogadores façam pedidos Permita que os jogadores selecionem um ingrediente tocando uma parte física, como um prompt de proximidade. Para mais informações, consulte Prompts 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 corresponder ao pedido dado a eles pelo garçom.
- Crie adereços no jogo para 3-5 ingredientes diferentes.
- Crie de 3 a 5 receitas usando dicionários semelhantes ao desta lição.
- Crie uma matriz 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 fazer uma receita com base nos ingredientes que 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.