สคริปต์จํานวนมากมักจะต้องผ่านสารานุกรมหรืออาร์เรย์แต่บางครั้งคุณอาจไม่ทราบจุดเริ่มต้นและจุดสิ้นสุดของโครงสร้างข้อมูลเหล่านี้ตัวอย่างเช่น สารานุกรมของผู้เล่นอาจมีการเปลี่ยนแปลง หรือผู้เล่นอาจมีคลังสินค้าที่มีขนาดแตกต่างกัน
ในสถานการณ์เหล่านี้ คุณสามารถใช้ pairs() และ ipairs() ได้สิ่งเหล่านี้สามารถใช้กับลูป for เพื่อผ่านแต่ละองค์ประกอบโดยไม่มีจุดเริ่มต้นและจุดสิ้นสุดที่รู้จัก
บทความนี้จะครอบคลุมการใช้งานและมีตัวอย่างสคริปต์ที่เป็นประโยชน์ที่คุณติดตามคำสั่งร้านอาหารในเกมการปรุงอาหาร
สารานุกรมและคู่()
pairs() ใช้กับ สารานุกรม ตัวอย่างอยู่ด้านล่าง
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() สามารถใช้เพื่อทำงานกับกุญแจ ค่า หรือทั้งสองอย่างขององค์ประกอบสารานุกรมในลูป for ด้านล่าง ตัวแปรแรกคือกุญแจตัวแปรที่สองคือมูลค่าสารานุกรมที่คุณต้องการทำงานร่วมกับถูกส่งไปที่ pairs()
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
กำลังติดตาม:
You have:43 Gold Bricks3 Carrots2 Torches
เลขคู่และ ipairs()
ipairs() ใช้กับ เวกเตอร์ .ตัว "i" ใน ipairs() ยืนหมายถึง "ดัชนี" ใช้ ipairs() และ arrays รวมกับลูป for เพื่อทำงานกับค่าที่จัดเรียงเช่นลีดเดอร์บอร์ดตัวอย่างอยู่ด้านล่าง
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
กำลังติดตาม:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
ฝึกซ้อม - โซดาซิมูเลเตอร์ร้านอาหาร
มาทำซุปสําหรับจําลองร้านอาหารที่ผู้เล่นเลือกจากรายการส่วนผสมซุปที่เป็นไปได้ส่วนผสมจะถูกเก็บไว้เป็นกุญแจและค่าจะเริ่มต้นเป็นเท็จดังนั้นผู้เล่นจะได้รับสิ่งที่พวกเขาเลือกเท่านั้น
ใช้ pairs() เพื่อดูสิ่งที่ถูกเลือกแล้ว ipairs() เพื่อพิมพ์รายการส่วนผสม
สร้างสารานุกรมใหม่ ชื่อว่า menu โดยเพิ่มคู่คีย์-ค่า 3 - 5 คู่ที่คีย์เป็นส่วนประกอบและค่าเป็นเท็จ
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}ใต้สารบัญเมนูเพิ่ม แอร์รี่ว่างเปล่า ซึ่งจะถูกเติมด้วยตัวเลือกของลูกค้าในภายหลัง
-- ซุปของลูกค้าlocal selectedIngredients = {}ใช้ pairs() เพื่อตรวจสอบว่าแต่ละส่วนประกอบในสารานุกรมถูกทําเครื่องหมายเป็นจริงหรือเท็จ หากเป็นจริงให้เพิ่มส่วนประกอบลงในซุป
-- ซุปของลูกค้าlocal selectedIngredients = {}-- เพิ่มตัวเลือกของลูกค้าให้กับซุปของพวกเขาfor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendทำซ้ำคำสั่งให้กลับไปยังลูกค้า ในสคริปต์ให้โค้ดต่อไปนี้
- ตรวจสอบว่ามีรายการเมนูใน selectedIngredients หรือไม่ หากมีให้พิมพ์ "You ordered soup with: "
- ใช้ ipairs() เพื่อผ่านทาง selectedIngredients คอลเลกชันและพิมพ์แต่ละส่วนประกอบ
- ทดสอบโดยเปลี่ยนอย่างน้อยหนึ่งรายการเมนูเป็นจริง
-- พิมพ์คำสั่งซื้อซุปจาก "ส่วนผสมที่เลือก"if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendในข้อความ if ไอเท็มเพิ่มเงื่อนไขอื่นที่บอกลูกค้าว่าไม่มีส่วนผสมที่เลือก
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
ความท้าทายเสริมเติมตัวเลือก
ด้านล่างนี้เป็นความท้าทายบางอย่างที่ใช้คู่และไอพาร์ในรูปแบบที่แตกต่างกัน ลองดูว่าคุณสามารถสร้างโค้ดสำหรับพวกเขาได้หรือไม่ ความท้าทาย : สร้าง NPC ผู้รับใช้แทนที่จะใช้หน้าต่างออกผล ใช้ NPC จาก Intro To Arrays เพื่อสร้างผู้รับใช้เพื่อรับคำสั่งลูกค้า ความท้าทาย : อนุญาตให้ผู้เล่นสั่งซื้อ อนุญาตให้ผู้เล่นเลือกส่วนผสมโดยแตะส่วนประกอบทางกายภาพเช่นการแจ้งเตือนระยะไกลสำหรับข้อมูลเพิ่มเติม ดู คําแนะนําระยะไกล ความท้าทายขั้นสูง : สร้างจำลองร้านอาหารที่ผู้เล่นเป็นเชฟ! ผู้เล่นจะต้องรวบรวมส่วนผสมให้ตรงกับคำสั่งที่พวกเขาได้รับจากพนักงานเสิร์ฟ
- สร้างของใช้ในเกมสำหรับ 3 - 5 ส่วนผสมที่แตกต่างกัน
- สร้างสูตร 3 - 5 โดยใช้สารานุกรมที่คล้ายกับในบทเรียนนี้
- สร้าง阵列ที่บรรจุสูตรทั้งหมด
- สุ่มเลือกสูตรและใช้ NPC เพื่อบอกผู้เล่นว่าส่วนผสมคืออะไร
- สร้างสารานุกรมใหม่เพื่อสร้างสูตรที่ขึ้นอยู่กับส่วนผสมของโปรเพลย์ที่ผู้ใช้แตะ
- เปรียบเทียบสูตรของผู้เล่นกับสูตรที่เลือกโดย NPC
- เพิ่มความท้าทายโดยการเพิ่มเงื่อนไขเพิ่มเติม เช่น ตัวจับเวลา