Banyak skrip sering kali perlu menjelajahi kamus atau array. Namun terkadang, Anda mungkin tidak tahu awal dan akhir dari struktur data ini. Misalnya, kamus pemain mungkin sedang berubah, atau pemain mungkin memiliki inventaris array dengan ukuran yang bervariasi.
Dalam situasi seperti ini, Anda dapat menggunakan pairs() dan ipairs(). Ini dapat digunakan dengan loop for untuk menjelajahi setiap elemen tanpa titik awal dan akhir yang diketahui.
Artikel ini akan membahas cara menggunakan keduanya, serta memberikan contoh skrip praktis di mana Anda melacak pesanan restoran dalam permainan memasak.
Kamus dan pairs()
pairs() digunakan dengan kamus. Contoh terlihat di bawah ini.
local myDictionary = {["Pemain Biru"] = "Ana",["Pemain Emas"] = "Binh",["Pemain Merah"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " adalah " .. value)end
pairs() dapat digunakan untuk bekerja dengan kunci, nilai, atau keduanya dari elemen kamus. Dalam loop for di bawah ini, variabel pertama adalah kunci. Variabel kedua adalah nilai. Kamus yang ingin Anda kerjakan diteruskan ke pairs().
local inventory = {["Bricks Emas"] = 43,Karot = 3,Senter = 2,}print("Anda memiliki:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Ketika dijalankan, kode akan mencetak yang berikut:
Anda memiliki:43 Bricks Emas3 Karot2 Senter
Array dan ipairs()
ipairs() digunakan dengan array. "i" dalam ipairs() berdiri untuk "indeks." Gunakan ipairs() dan array dalam kombinasi dengan loop for untuk bekerja dengan nilai terurut seperti papan skor. Contoh terlihat di bawah ini.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Pemenang #" .. playerRank .. " adalah " .. playerName)end
Ketika dijalankan, kode akan mencetak yang berikut:
Pemenang #1 adalah AliPemenang #2 adalah BenPemenang #3 adalah Cammy
Latihan - Simulator Sup Restoran
Mari kita buat sup untuk simulator restoran di mana pemain memilih dari daftar bahan sup yang mungkin. Bahan-bahan akan disimpan sebagai kunci, dan nilainya akan dimulai sebagai false sehingga pemain hanya mendapatkan apa yang mereka pilih.
Gunakan pairs() untuk melihat apa yang dipilih, dan kemudian ipairs() untuk mencetak daftar bahan.
Buat kamus baru bernama menu. Tambahkan 3 - 5 pasangan kunci-nilai di mana kunci adalah bahan dan nilainya adalah false.
local menu = {kubis = false,daging = false,tomat = false,mie = false,}Di bawah kamus menu, tambahkan array kosong yang akan diisi dengan pilihan pelanggan nanti.
-- Sup pelangganlocal selectedIngredients = {}Gunakan pairs() untuk memeriksa apakah setiap bahan dalam kamus ditandai true atau false. Jika true, tambahkan bahan tersebut ke sup.
-- Sup pelangganlocal selectedIngredients = {}-- Menambahkan pilihan pelanggan ke sup merekafor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendUlangi pesanan kembali kepada pelanggan. Dalam skrip, kode berikut di bawah ini.
- Periksa apakah ada item menu dalam selectedIngredients. Jika ada, cetak "Anda memesan sup dengan: ".
- Gunakan ipairs() untuk menjelajahi array selectedIngredients dan mencetak setiap bahan.
- Uji dengan mengubah setidaknya satu item menu menjadi true.
-- Mencetak pesanan sup dari "selectedIngredients"if #selectedIngredients > 0 thenprint("Anda memesan sup dengan: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendDalam pernyataan if yang memeriksa apakah ada item menu, tambahkan kondisi else yang memberi tahu pelanggan jika tidak ada bahan yang dipilih.
if #selectedIngredients > 0 thenprint("Anda memesan sup dengan: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("Tidak ada yang dipilih. Apakah Anda tidak lapar?")end
Tantangan opsional
Di bawah ini adalah beberapa tantangan yang menerapkan penggunaan pairs dan ipairs dengan cara yang berbeda. Cobalah untuk melihat apakah Anda dapat membangun kode untuk ini.
Tantangan: Buat NPC Pelayan Alih-alih menggunakan jendela Output, gunakan NPC dari Intro To Arrays untuk membuat pelayan yang mengambil pesanan pelanggan.
Tantangan: Izinkan Pemain untuk Membuat Pesanan Izinkan pemain untuk memilih bahan dengan menyentuh bagian fisik seperti prompt kedekatan. Untuk informasi lebih lanjut, lihat Prompt Kedekatan.
Tantangan Lanjutan: Buat Simulator Sup Saya Buat simulator restoran di mana pemain adalah koki! Pemain harus mengumpulkan bahan untuk mencocokkan pesanan yang diberikan kepada mereka oleh pelayan.
- Buat properti dalam permainan untuk 3 - 5 bahan yang berbeda.
- Buat 3 - 5 resep menggunakan kamus mirip dengan yang ada di pelajaran ini.
- Buat array yang menyimpan semua resep.
- Secara acak pilih resep dan gunakan NPC untuk memberi tahu pemain apa saja bahan-bahannya.
- Buat kamus baru untuk membuat resep berdasarkan bahan propertinya yang disentuh pemain.
- Bandingkan resep pemain dengan resep yang dipilih oleh NPC.
- Tingkatkan tantangan dengan menambahkan kondisi ekstra, seperti timer.