Banyak skrip sering perlu melalui kamus atau array.Tetapi terkadang, Anda mungkin tidak tahu awal dan akhir struktur data ini.Sebagai contoh, kamus pemain mungkin berubah, atau pemain mungkin memiliki inventaris array berukuran bervariasi.
Dalam situasi ini, Anda dapat menggunakan pairs() dan ipairs().Ini dapat digunakan dengan loop for untuk melalui setiap elemen tanpa titik awal dan akhir yang dikenal.
Artikel ini akan membahas penggunaannya, dan memiliki contoh skrip praktis di mana Anda melacak pesanan restoran di gamememasak.
Kamus dan pasangan()
pairs() digunakan dengan kamus . Sebuah contoh dapat dilihat di bawah ini.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() dapat digunakan untuk bekerja dengan unit, nilai, atau keduanya elemen kamus.Dalam loop for di bawah ini, variabel pertama adalah unit.Variabel kedua adalah nilainya.Kamus yang ingin Anda gunakan diserahkan ke pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Saat dieksekusi, kode akan mencetak mengikuti:
You have:43 Gold Bricks3 Carrots2 Torches
배열 dan ipairs()
ipairs() digunakan dengan array .The "i" di ipairs() berarti "indeks." Gunakan ipairs() dan array bersama dengan loop for untuk bekerja dengan nilai terurut seperti papan peringkat.Contoh adalah di bawah ini.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Saat dieksekusi, kode akan mencetak mengikuti:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Berlatih - Simulator Sup Restoran
Mari buat sup untuk simulator restoran di mana pemain memilih dari daftar bahan sup yang mungkin.Bahan akan disimpan sebagai kunci, dan nilai akan dimulai sebagai false sehingga pemain hanya mendapatkan apa yang mereka pilih.
Gunakan pairs() untuk melihat apa yang dipilih, lalu ipairs() untuk mencetak daftar bahan.
Buat kamus baru bernama yang berisi 3 - 5 pasangan kunci-nilai di mana kunci adalah bahan dan nilai adalah false.
local menu = {cabbage = false,beef = false,tomato = false,noodles = 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 benar atau salah. Jika benar, tambahkan bahan ke sup.
-- Sup pelangganlocal selectedIngredients = {}-- Menambahkan pilihan pelanggan ke sup merekafor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendUlangi pesanan kepada pelanggan. Dalam skrip, kodekan yang berikut di bawah ini.
- Periksa apakah ada item menu di selectedIngredients . Jika demikian, cetak "You ordered soup with: " .
- Gunakan ipairs() untuk melalui array selectedIngredients dan mencetak setiap bahan.
- Tes dengan mengubah setidaknya satu item menu ke benar.
-- Mencetak pesanan sup dari "selectedIngredients"if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendDalam pernyataan if yang memeriksa apakah ada item menu, tambahkan kondisi lain yang memberi tahu pelanggan jika tidak ada bahan yang dipilih.
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
Tantangan opsional
Di bawah ini adalah beberapa tantangan yang berlaku menggunakan pasangan dan ipairs dengan cara yang berbeda. Coba lihat apakah Anda dapat membangun kode untuk ini. Tantangan : Buat NPC Waiter Alih-alih menggunakan jendela Output, gunakan NPC dari Intro To Arrays untuk membuat waiter menerima pesanan pelanggan. Tantangan : Izinkan Pemain untuk Memasang Pesanan Izinkan pemain untuk memilih bahan dengan menyentuh bagian fisik seperti perintah proximitas.Untuk informasi lebih lanjut, lihat Perintah Kedekatan. Tantangan Lanjutan : Buat Me Some Soup Simulator Buat simulator restoran di mana pemain adalah koki! Pemain harus mengumpulkan bahan untuk mencocokkan pesanan yang diberikan kepada mereka oleh pelayan.
- Buat prop dalam game untuk 3 - 5 bahan berbeda.
- Buat 3 - 5 resep menggunakan kamus yang 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 bahan-bahannya.
- Buat kamus baru untuk membuat resep berdasarkan prop bahan yang disentuh pemain.
- Bandingkan resep pemain dengan resep yang dipilih oleh NPC.
- Tingkatkan tantangan dengan menambahkan kondisi tambahan, seperti timer.