çiftler ve ipairs

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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) do
print(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) do
print(itemValue, itemName)
end

Kod yürütüldüğünde, takip edilenbasılacak:


You have:
43 Gold Bricks
3 Carrots
2 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) do
print("Winner #" .. playerRank .. " is " .. playerName)
end

Kod yürütüldüğünde, takip edilenbasılacak:


Winner #1 is Ali
Winner #2 is Ben
Winner #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.

  1. 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,
    }
  2. Menü sözlüğünün altında, daha sonra müşterinin seçenekleriyle doldurulacak boş bir dizi ekleyin.


    -- Müşterinin çorbası
    local selectedIngredients = {}
  3. 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 ekler
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(selectedIngredients, menuChoice)
    end
    end
  4. Sipariş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" basar
    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    end
  5. Bir 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 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    else
    print("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.

  1. 3 - 5 farklı malzeme için oyun içi prop oluşturun.
  2. Bu dersin içindeki sözlüklere benzer 3 - 5 reçete oluşturun.
  3. Tüm tarifleri tutan bir dizi oluştur.
  4. Rastgele bir reçete seçin ve oyunculara malzemelerin ne olduğunu söylemek için bir NPC kullanın.
  5. Oyuncunun dokunacağı prop malzemelerine dayalı bir reçete oluşturmak için yeni bir sözlük oluşturun.
  6. oyuncureçetesini NPC tarafından seçilen reçete ile karşılaştırın.
  7. Bir zamanlayıcı gibi ek bir koşul ekleyerek meydan okumayı artırın.