Birçok betik sıklıkla sözlükler veya diziler üzerinden geçmek zorunda kalır. Ancak bazen, bu veri yapılarının başlangıç ve bitiş noktalarını bilmeyebilirsiniz. Örneğin, oyuncuların bir sözlüğü değişiyor olabilir veya oyuncuların çeşitlilik gösteren boyutlarda bir dizi envanteri olabilir.
Bu durumlarda pairs() ve ipairs() kullanabilirsiniz. Bunlar, başlangıç ve bitiş noktaları bilinmeden her bir öğeyi gözden geçirmek için bir for döngüsü ile kullanılabilir.
Bu makale, bunları nasıl kullanacağınızı kapsamaktadır ve bir yemek pişirme oyununda restoran siparişlerini takip ettiğiniz pratik bir betik örneği sunmaktadır.
Sözlükler ve pairs()
pairs() sözlüklerle kullanılır. Aşağıda bir örnek görülmektedir.
local myDictionary = {["Mavi Oyuncu"] = "Ana",["Altın Oyuncu"] = "Binh",["Kırmızı Oyuncu"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " " .. value .. "dır.")end
pairs() bir sözlük elemanının anahtarı, değeri veya her ikisi ile çalışmak için kullanılabilir. Aşağıdaki for döngüsünde, ilk değişken anahtar. İkinci değişken değerdir. Çalışmak istediğiniz sözlük pairs() fonksiyonuna geçirilir.
local inventory = {["Altın Tuğlalar"] = 43,Havuçlar = 3,Meşaleler = 2,}print("Sizde var:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Çalıştırıldığında, kod aşağıdakileri yazdıracaktır:
Sizde var:43 Altın Tuğlalar3 Havuçlar2 Meşaleler
Diziler ve ipairs()
ipairs() dizilerle kullanılır. ipairs() içindeki "i" "indeks" anlamına gelir. İndeksleri kullanarak işlenecek sıralı değerler gibi lider panoları için ipairs() ve dizileri birlikte kullanın. Aşağıda bir örnek bulunmaktadır.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Kazanan #" .. playerRank .. " " .. playerName .. "dır.")end
Çalıştırıldığında, kod aşağıdakileri yazdıracaktır:
Kazanan #1 Ali'dir.Kazanan #2 Ben'dir.Kazanan #3 Cammy'dir.
Uygulama - Restoran Çorbası Simülatörü
Oyuncuların muhtemel çorba malzemeleri listesinden seçim yaptığı bir restoran simülatörü için biraz çorba yapalım. Malzemeler anahtar olarak depolanacak ve değerler başlangıçta false olacak, böylece oyuncular yalnızca seçtikleri şeyi alacaklar.
Ne seçildiğini görmek için pairs() kullanın ve ardından malzemelerin listesini yazdırmak için ipairs() kullanın.
menu adında yeni bir sözlük oluşturun. Anahtarın malzeme ve değerin false olduğu 3 - 5 anahtar-değer çifti ekleyin.
local menu = {lahana = false,et = false,domates = false,erişte = false,}Menü sözlüğünün altına, müşteri seçimleri daha sonra doldurulacak boş bir dizi ekleyin.
-- Müşterinin çorbasılocal selectedIngredients = {}Sözlükteki her malzemenin true veya false olarak işaretlenip işaretlenmediğini kontrol etmek için pairs() kullanın. Eğer true ise, malzemeyi çorbaya ekleyin.
-- Müşterinin çorbasılocal selectedIngredients = {}-- Müşterinin seçimlerini çorbasına eklerfor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendSiparişi müşteriye tekrar edin. Betikte, aşağıdakileri aşağıya kodlayın.
- selectedIngredients içinde bir menü maddesi olup olmadığını kontrol edin. Eğer varsa, "Şu malzemelerle çorba sipariş ettiniz: " yazdırın.
- selectedIngredients dizisini ipairs() kullanarak gözden geçirin ve her bir malzemeyi yazdırın.
- En az bir menü maddesini true yaparak test edin.
-- "selectedIngredients" içindeki çorba siparişini yazdırırif #selectedIngredients > 0 thenprint("Şu malzemelerle çorba sipariş ettiniz: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendMenü maddesinin olup olmadığını kontrol eden if ifadesine, müşterilere hiçbir malzeme seçilmediğini bildiren bir else durumu ekleyin.
if #selectedIngredients > 0 thenprint("Şu malzemelerle çorba sipariş ettiniz: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("Hiçbir şey seçilmedi. Aç değil misiniz?")end
Opsiyonel zorluklar
Aşağıda, farklı şekillerde pairs ve ipairs kullanarak uygulayabileceğiniz bazı zorluklar bulunmaktadır. Bunları kodlayıp kodlayamayacağınızı görün.
Zorluk: Garson NPC'si Oluşturun Çıkış penceresini yerine, Dizilere Giriş bölümünde NPC’yi kullanarak siparişleri almak için bir garson oluşturun.
Zorluk: Oyuncuların Sipariş Vermesine İzin Verin Oyuncuların fiziksel bir parçaya dokunarak bir malzeme seçmesine izin verin, örneğin bir yakınlık istemi. Daha fazla bilgi için Yakınlık İstemleri bölümüne bakın.
İleri Düzey Zorluk: Bana Biraz Çorba Simülatörü Yap Oyuncuların şef olduğu bir restoran simülatörü oluşturun! Oyuncular, garson tarafından kendilerine verilen siparişle eşleşen malzemeleri bir araya getirmek zorunda kalacaklar.
- 3 - 5 farklı malzeme için oyun içi nesneler oluşturun.
- Bu derste bulunanlarla benzer sözlükler kullanarak 3 - 5 tarif oluşturun.
- Tüm tarifleri tutan bir dizi oluşturun.
- Rastgele bir tarif seçin ve oyunculara malzemelerin ne olduğunu söylemek için bir NPC kullanın.
- Oyuncunun dokunduğu nesnelerin tarifine dayalı olarak yeni bir tarif oluşturmak için yeni bir sözlük oluşturun.
- Oyuncunun tarifini NPC'nin seçtiği tarifle karşılaştırın.
- Bir zamanlayıcı gibi ekstra bir koşul ekleyerek zorluğu artırın.