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

Çalıştırıldığında kod takip edilenyazacaktır:


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

Çalıştırıldığında kod takip edilenyazacaktır:


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

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


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

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.

  1. 3 - 5 farklı malzeme için oyun içi prop'lar oluştur.
  2. Bu dersin içindeki kelime çevirileri gibi 3 - 5 tarif oluşturun.
  3. Tüm tarifleri içeren bir matris oluşturun.
  4. Bir özelliği seçin ve bir NPC'yi kullanarak oyunculara malzemelerin ne olduğunu söyleyin.
  5. Oyuncunun dokunduğu prop malzemelerine dayanan yeni bir sözlük oluşturun.
  6. oyuncutarifini NPC'nin seçtiği tarife karşılaştırın.
  7. Görevi artırmak için ek bir koşul, bir zamanlayıcı gibi, ekleyin.