Birçok kod genellikle sözlüklere veya düzenlere ihtiyaç duyacaktır.Ancak bazen, bu veri yapılarının başlangıcını ve sonunu bilmiyor olabilirsiniz.Örneğin, oyuncu sözlüğü değişebilir veya oyuncuların değişen boyutlarda bir dizi envanteri olabilir.
Bu durumlarda, pairs() ve ipairs() kullanabilirsiniz.Bunlar, bilinen başlangıç ve bitiş noktaları olmadan her bir elemanı geçmek için bir while döngüsü ile kullanılabilir.
Bu makale onları kullanmayı ele alacak ve mutfak oyununda restoran siparişlerini takip ettiğiniz pratik bir senaryo örneği verecek.
Sözlükler ve pairs()
pairs() ile sözlükler kullanılır. Aşağıda bir örnek görüldü.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() bir sözlük öğesinin anahtarı, değeri veya her ikisiyle çalışmak için kullanılabilirAşağıdaki for döngüsünde, ilk değişken anahtardır.İkinci değişken değerdir.Çalışmak istediğiniz sözlük pairs() 'a geçirilir.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Kod yürütüldüğünde, takip edilenbasılacak:
You have:43 Gold Bricks3 Carrots2 Torches
Diziler ve ipairs()
ipairs() , düzenekleri ile kullanılır.ipairs() 'deki "i" "index" için geçerlidir. Sıralı değerlerle çalışmak için bir döngü ile ipairs() ve diziler kullanın ve lider tablolar gibi sıralı değerlerle çalışın.Aşağıda bir örnek var.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Kod yürütüldüğünde, takip edilenbasılacak:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Egzersiz - Restoran Sopa Simulatörü
Oyuncuların olası çorba malzemelerinden bir liste seçtiği bir restoran simulatörü için biraz çorba yapalım.Malzemeler anahtar olarak depolanacak ve değerler yanlış olarak başlayacak, böylece oyuncular sadece seçtiklerini alacaklar.
Seçilenleri görmek için pairs() kullanın ve ardından ipairs() listeyi malzemeleri basın.
Yeni bir sözlük oluşturun adı menu . Anahtarın malzeme olduğu ve değerinin yanlış olduğu 3 - 5 anahtar-değer çifti ekleyin.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Menü sözlüğünün altında, daha sonra müşterinin seçenekleriyle doldurulacak boş bir dizi ekleyin.
-- Müşterinin çorbasılocal selectedIngredients = {}Dizindeki her bir malzemenin doğru veya yanlış işaretlendiğini kontrol etmek için pairs() kullanın. Eğer doğruysa, malzemeyi çorbaya ekleyin.
-- Müşterinin çorbasılocal selectedIngredients = {}-- Müşterilerin seçeneklerini çorbasına eklerfor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendSiparişi müşteriye geri tekrarlayın. Skriptte aşağıdakileri kodlayın.
- selectedIngredients 'de bir menü öğesi varsa kontrol edin. Eğer öyleyse, "You ordered soup with: " basın.
- ipairs() düğümünü geçmek ve her malzeme basmak için selectedIngredients matrisini kullanın.
- En az bir menü öğesini doğruya değiştirerek test edin.
-- Seçili malzemelerden "sopa siparişi" basarif #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendBir menü öğesi olup olmadığını kontrol eden if ifadesinde, müşterilere hiçbir malzeme seçilmediğini söyleyen başka bir koşul ekleyin.
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
Opsiyonel zorluklar
Aşağıda, farklı şekillerde çift ve ipairs kullanarak uygulanan bazı zorluklar bulunmaktadır. Bunlar için kodu oluşturup olmadığınızı görmeyi deneyin. Mücadele : Çıktı penceresini kullanmak yerine, müşteri siparişlerini almak için NPC'den Intro To Arrays 'dan bir bekçi oluşturmak için NPC kullanın. Mücadele : Oyuncuların Sipariş Vermesine İzin Ver Oyuncular bir yakınlık uyarısı gibi fiziksel bir parçaya dokunarak bir malzeme seçebilirler.Daha fazla bilgi için, Yakınlık İpuçları bakın. Gelişmiş Mücadele : Make Me Some Soup Simulator Oyuncuların şefleri olduğu bir restoran simulatörü oluşturun! Oyuncular, garson tarafından verilen siparişlere uyacak malzemeleri bir araya getirmek zorunda kalacaklar.
- 3 - 5 farklı malzeme için oyun içi prop oluşturun.
- Bu dersin içindeki sözlüklere benzer 3 - 5 reçete oluşturun.
- Tüm tarifleri tutan bir dizi oluştur.
- Rastgele bir reçete seçin ve oyunculara malzemelerin ne olduğunu söylemek için bir NPC kullanın.
- Oyuncunun dokunacağı prop malzemelerine dayalı bir reçete oluşturmak için yeni bir sözlük oluşturun.
- oyuncureçetesini NPC tarafından seçilen reçete ile karşılaştırın.
- Bir zamanlayıcı gibi ek bir koşul ekleyerek meydan okumayı artırın.