หลายตัวอักษรบางครั้งอาจต้องผ่านพจนานั้นหรือรายการ แต่บางครั้งคุณอาจไม่รู้จุดเริ่มต้นและจุดสิ้นสุดของโครงสร้างข้อมูลเหล่านี้ เช่น พจนาของผู้เล่นอาจเปลี่ยนแปลง หรือผู้เล่นอาจมีรายกา
ในสถานการณ์เหล่านี้คุณสามารถใช้ 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() สามารถใช้เพื่อทำงานร่วมกับรหัส คีย์หรือทั้งสอง ในตัวอักษรดิกชันด้านล่าง ตัวแรกเป็นรหัส ตัวที่สองเป็นค่า ดิกชันที่คุณต้องการทำงานด้วยได้รับผ่านไปยั
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() หมายถึง "ค้นหา" ใช้ 0>ipairs()0> และรายการในคู่มือกับสัญลักษณ์สำหรับลูกค้าเช่นลีดเดอร์บอร์ด ตัวอย่าง
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
ซ้อม - จำลองซุปร้านอาหาร
Let's ทำซุปสําหรับเครื่องจําลองร้านอาหารที่ผู้เล่นเลือกจากรายการส่วนผสมซุปที่เป็นไปได้ ส่วนผสมจะถูกเก็บไว้เป็นรหัส และมูลค่าจะเริ่มต้นเป็น false เพื่อให้ผู้เล่นเห็นเท่านั้น
ใช้ 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 และพิมพ์แต่ละส่วนผสม
- ทดสอบโดยเปลี่ยนอย่างน้อยหนึ่งรายการในเมนูเป็นจริง
-- พิมพ์คำสั่งซื้อซุปจาก "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 จาก การแนะนำสู่รายการเพื่อค้นหาลูกค้า เพื่อสร้าง NPC ที่รอเพื่อรับคำสั่งของลูกค้า ความท้าทาย : สามารถให้ผู้เล่นสั่งซื้อได้ สามารถให้ผู้เล่นเลือกส่วนผสมโดยการแตะส่วนที่เป็นสัญญาณทางกายภาพเช่นเป็นปุ่มใกล้ชิด สำหรับข้อมูลเพิ่มเติมดูที่ เป้าหมายใกล้ชิด . ความท้าทายขั้นสูง : ทำให้ฉันบางซุปซิมูเลเตอร์สร้างร้านอาหารซิมูเลเตอร์ที่ผู้เล่นเป็นเชฟ! ผู้เล่นจะต้องวางส่วนผสมให้ตรงกับคำสั่งที่มอบให้กับพวกเขาโดยผู้ขาย
- สร้างของตกแต่งในเกมสำหรับ 3 - 5 ส่วนผสมที่แตกต่างกัน
- สร้าง 3 - 5 สูตรโดยใช้พจนานุกรมที่คล้ายกับสูตรหนึ่งในบทเรียนนี้
- สร้างค่าย่อที่เก็บสูตรทั้งหมดไว้
- เลือกสุ่มสูตรและใช้ NPC เพื่อบอกผู้เล่นว่าส่วนผสมคืออะไร
- สร้างพจนามาใหม่เพื่อให้สูตรจากวัตถุดิบที่ผู้เล่นแตะ
- เปรียบเทียบสูตรของผู้เล่นกับสูตรที่เลือกโดย NPC
- เพิ่มความท้าทายด้วยการเพิ่มเงื่อนไขเพิ่มเติม เช่น เวลา