หลายสคริปต์จะต้องการการวนลูบผ่านพจนานุกรมหรืออาร์เรย์บ่อยครั้ง แต่บางครั้งคุณอาจไม่ทราบจุดเริ่มต้นและจุดสิ้นสุดของโครงสร้างข้อมูลเหล่านี้ ตัวอย่างเช่น,พจนานุกรมของผู้เล่นอาจเปลี่ยนแปลงได้ หรือผู้เล่นอาจมีทรัพย์สินอาร์เรย์ที่มีขนาดแตกต่างกัน
ในสถานการณ์เหล่านี้,คุณสามารถใช้ pairs() และ ipairs() ได้ สามารถใช้ร่วมกับลูป for เพื่อวนลูบแต่ละองค์ประกอบโดยไม่จำเป็นต้องรู้จุดเริ่มต้นและจุดสิ้นสุด
บทความนี้จะครอบคลุมการใช้งานพวกเขา,并且จะมีตัวอย่างสคริปต์ที่สร้างขึ้นจริงซึ่งคุณติดตามการสั่งซุปในเกมทำอาหาร
พจนานุกรมและ pairs()
pairs() ใช้กับ พจนานุกรม ตัวอย่างด้านล่าง
local myDictionary = {["ผู้เล่นสีน้ำเงิน"] = "อานา",["ผู้เล่นสีทอง"] = "บินห์",["ผู้เล่นสีแดง"] = "เคท",}for key, value in pairs(myDictionary) doprint(key .. " คือ " .. value)end
pairs() สามารถใช้ทำงานกับคีย์ ค่า หรือทั้งคู่ขององค์ประกอบในพจนานุกรม ในลูป for ด้านล่าง ตัวแปรแรกคือคีย์ ตัวแปรที่สองคือค่า พจนานุกรมที่คุณต้องการทำงานด้วยจะถูกส่งไปยัง pairs()
local inventory = {["อิฐทอง"] = 43,แครอท = 3,คบไฟ = 2,}print("คุณมี:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
เมื่อดำเนินการ,โค้ดจะแสดงผลดังนี้:
คุณมี:43 อิฐทอง3 แครอท2 คบไฟ
อาร์เรย์และ ipairs()
ipairs() ใช้กับ อาร์เรย์ ตัว "i" ใน ipairs() หมายถึง "ดัชนี" ใช้ ipairs() และอาร์เรย์ร่วมกับลูป for เพื่อทำงานกับค่าที่จัดลำดับ เช่น ตารางคะแนน ตัวอย่างดังนี้
local players = {"อาลี", "เบน", "แคมมี่"}for playerRank, playerName in ipairs(players) doprint("ผู้ชนะ #" .. playerRank .. " คือ " .. playerName)end
เมื่อดำเนินการ,โค้ดจะแสดงผลดังนี้:
ผู้ชนะ #1 คือ อาลีผู้ชนะ #2 คือ เบนผู้ชนะ #3 คือ แคมมี่
ฝึกปฏิบัติ - ซุปที่ร้านอาหารจำลอง
สร้างซุปสำหรับร้านอาหารจำลองที่ผู้เล่นเลือกจากรายการส่วนผสมซุปที่เป็นไปได้ ส่วนผสมจะถูกเก็บเป็นคีย์ และค่าจะเริ่มต้นด้วย false ดังนั้นผู้เล่นจะได้รับเฉพาะสิ่งที่พวกเขาเลือก
ใช้ pairs() เพื่อตรวจสอบสิ่งที่ถูกเลือก,然后ใช้ ipairs() เพื่อแสดงรายการส่วนผสม
สร้าง พจนานุกรม ใหม่ชื่อ menu เพิ่มคู่คีย์-ค่าจำนวน 3 - 5 คู่ โดยคีย์เป็นส่วนผสมและค่าเป็น false
local menu = {กะหล่ำปลี = false,เนื้อ = false,มะเขือเทศ = false,บะหมี่ = false,}ใต้พจนานุกรมเมนู,เพิ่ม อาร์เรย์ว่าง ซึ่งจะถูกเติมด้วยตัวเลือกของลูกค้าในภายหลัง
-- ซุปของลูกค้าlocal selectedIngredients = {}ใช้ pairs() เพื่อตรวจสอบว่าส่วนผสมแต่ละอย่างในพจนานุกรมถูกทำเครื่องหมายว่า true หรือ false หากเป็น true ให้เพิ่มส่วนผสมลงในซุป
-- ซุปของลูกค้าlocal selectedIngredients = {}-- เพิ่มตัวเลือกของลูกค้าไปยังซุปของพวกเขาfor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendทวนคำสั่งกลับไปยังลูกค้า ในสคริปต์,เขียนโค้ดต่อไปนี้ด้านล่าง
- ตรวจสอบว่ามีรายการในเมนูใน selectedIngredients หรือไม่ หากมีให้แสดงผลว่า "คุณสั่งซุปด้วย: "
- ใช้ ipairs() เพื่อลูบผ่านอาร์เรย์ selectedIngredients และแสดงแต่ละส่วนผสม
- ทดสอบโดยการเปลี่ยนรายการเมนูอย่างน้อย 1 รายการให้เป็น true
-- แสดงคำสั่งซุปจาก "selectedIngredients"if #selectedIngredients > 0 thenprint("คุณสั่งซุปด้วย: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendใน if statement ที่ตรวจสอบว่ามีรายการในเมนูเพิ่มเงื่อนไข else ที่บอกลูกค้าว่าไม่มีส่วนผสมใดถูกเลือก
if #selectedIngredients > 0 thenprint("คุณสั่งซุปด้วย: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("ไม่มีอะไรถูกเลือก คุณไม่หิวเหรอ?")end
ความท้าทายเพิ่มเติม
ด้านล่างนี้คือความท้าทายบางประการที่ใช้ pairs และ ipairs ในรูปแบบที่แตกต่างกัน ลองดูว่าคุณสามารถสร้างโค้ดสำหรับสิ่งเหล่านี้ได้หรือไม่
ความท้าทาย: สร้าง NPC พนักงานเสิร์ฟ
แทนที่จะใช้หน้าต่างผลลัพธ์,ใช้ NPC จาก แนะนำเกี่ยวกับอาร์เรย์ เพื่อสร้างพนักงานเสิร์ฟเพื่อรับคำสั่งจากลูกค้า
ความท้าทาย: อนุญาตให้ผู้เล่นสั่งซื้อ
อนุญาตให้ผู้เล่นเลือกส่วนผสมโดยแตะส่วนที่เป็นจริง เช่น คำชี้แจงใกล้เคียง สำหรับข้อมูลเพิ่มเติม,ดูที่ คำชี้แจงใกล้เคียง。
ความท้าทายขั้นสูง: สร้างซุปจำลอง
สร้างร้านอาหารจำลองที่ผู้เล่นเป็นเชฟ! ผู้เล่นจะต้องรวบรวมส่วนผสมให้ตรงกับคำสั่งที่พวกเขาได้รับจากพนักงานเสิร์ฟ
- สร้างพร็อพในเกมสำหรับส่วนผสมที่แตกต่างกันจำนวน 3 - 5 อย่าง
- สร้างสูตร 3 - 5 สูตรโดยใช้พจนานุกรมคล้ายกับสูตรในบทเรียนนี้
- สร้างอาร์เรย์ที่เก็บสูตรทั้งหมด
- เลือกสูตรแบบสุ่มและใช้ NPC บอกผู้เล่นว่าส่วนผสมคืออะไร
- สร้างพจนานุกรมใหม่เพื่อสร้างสูตรจากส่วนผสมพร็อพที่ผู้เล่นแตะ
- เปรียบเทียบสูตรของผู้เล่นกับสูตรที่เลือกโดย NPC
- เพิ่มความท้าทายด้วยการเพิ่มเงื่อนไขเพิ่มเติมเช่น ตัวจับเวลา