Birçok kod sözlükleri veya matrisleri geçmek zorunda kalacaktır. Fakat bazen, bu veri yapılarının başlangıcını ve sonunu bilmeyebilirsiniz. Örneğin, bir oyuncunun sözlüğü değişebilir veya oyuncuların çeşitli boyutlarda bir matris envanteri olabilir.
Bu durumlarda, pairs() ve ipairs() kullanabilirsiniz. Bunlar bilinmeyen başlangıç ve bitiş noktaları olmadan her bir öğeyi geçmek için bir for döngüsü olarak kullanılabilir.
Bu makale onları kullanarak kapsayacak ve bir yemek oyununda restoran siparişlerini takip edeceğiniz pratik bir senaryo örneği olacaktır.
Sözlükler ve çiftler()
pairs() sözlükler ile kullanılır. Aşağıda bir örnek görülür.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() ile bir sözlük öğesiünün anahtarı, değeri veya her ikisiyle çalışabilir. Aşağıdaki for döngüsünde, ilk değişken anahtardır. İkinci değişken değeridir. İşlemek istediğiniz sözlük pairs() ile verilir.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Çalıştırıldığında kod takip edilenyazacaktır:
You have:43 Gold Bricks3 Carrots2 Torches
Matrisler ve ipairs()
ipairs() ile matrisler kullanılır. "i" ipairs() ın içindeki " indeks " ifadesi, lider tabloları gibi sıralı değerler için kullanılır. Bir örnek aşağıdadır.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Çalıştırıldığında kod takip edilenyazacaktır:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Uygulama - Restoran Çorba Simülatörü
Oyuncuların olası sos malzemelerinden bir listede seçim yaptığı bir restoran simülatöründe biraz çorba yapalım. Malzemeler anahtar olarak saklanacak ve değerler yanlış olarak başlayacak, böylece oyuncular sadece seçtiklerini alır.
Ne olduğunu görmek için pairs() kullanın, sonra ipairs() liste bileşikleri yazdırın.
Yeni bir sözlük oluştur, ismi menu olan 3 - 5 anahtar değeri çifti ekleyin. 3 - 5 anahtar değeri çifti ekleyin.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Menü sözlüğünün altında, müşterinin seçimleriyle doldurulacak bir boş arayüz ekleyin.
-- Müşterinin çorbasılocal selectedIngredients = {}Dizinindeki her bir malzeme işaretlenip işaretlenmediğini kontrol etmek için pairs() kullanın. Eğer doğru, malzeme çorbanın içine ekleyin.
-- Müşterinin çorbasılocal selectedIngredients = {}-- Müşterilerin seçeneklerini çorbalarına eklerfor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendSırayı müşteriye tekrar edin. Skriptte aşağıdaki kodu kullanın.
- SelectedIngredients içinde bir menü öğesi var mı? Eğer öyleyse, şunu yazdır: "You ordered soup with: ".
- ipairs() ile selectedIngredients matrisine geçin ve her bir malzeme'yi yazdırın.
- En az bir menü öğesi değiştirerek test edin.
-- Siparişi "seçiliMalzemeler"den印記if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendMenü öğesi olup olmadığını kontrol eden ifadeye eklemek için, müşterilerin hiçbir malzeme seçmediğini söyleyen bir başka şart 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
Opcional Görevler
Aşağıda farklı yollar kullanarak eşleri ve ipairs'i kullanarak uygulanan bazı zorluklar var. Bunları oluşturabilirseniz kodu bu yüzden inceleyin. Mücadele : Çıktı penceresini kullanmak yerine, Sıraya Giriş NPC'sini kullanarak bir bekleyici oluşturun. Mücadele : Oyuncuların Siparişlerini Yerleştirmelerine İzin Ver Oyuncular fiziksel bir parçaya dokunarak bir malzeme seçmesine izin verin. For more information, see Yakınlık İşaretleri . Gelişmiş Mücadele : Make Me Some Soup Simulator Yemek Simülatörü Oluşturun, Oyuncuların Şefleri Olmasını Sağlayın! Oyuncular, Waiter'ın verdiği siparişe uygun olarak malzemeleri birleştirmek zorunda kalacak.
- 3 - 5 farklı malzeme için oyun içi prop'lar oluştur.
- Bu dersin içindeki kelime çevirileri gibi 3 - 5 tarif oluşturun.
- Tüm tarifleri içeren bir matris oluşturun.
- Bir özelliği seçin ve bir NPC'yi kullanarak oyunculara malzemelerin ne olduğunu söyleyin.
- Oyuncunun dokunduğu prop malzemelerine dayanan yeni bir sözlük oluşturun.
- oyuncutarifini NPC'nin seçtiği tarife karşılaştırın.
- Görevi artırmak için ek bir koşul, bir zamanlayıcı gibi, ekleyin.