สารบัญ:

ลิงก์จากตัวแปรเป็นเส้นใหญ่ด้วย Sugarcube: 10 ขั้นตอน
ลิงก์จากตัวแปรเป็นเส้นใหญ่ด้วย Sugarcube: 10 ขั้นตอน

วีดีโอ: ลิงก์จากตัวแปรเป็นเส้นใหญ่ด้วย Sugarcube: 10 ขั้นตอน

วีดีโอ: ลิงก์จากตัวแปรเป็นเส้นใหญ่ด้วย Sugarcube: 10 ขั้นตอน
วีดีโอ: SUGARCUBE CHANNEL กำลังถ่ายทอดสด! 2024, พฤศจิกายน
Anonim
ลิงก์จากตัวแปรเป็นเส้นใหญ่ด้วย Sugarcube
ลิงก์จากตัวแปรเป็นเส้นใหญ่ด้วย Sugarcube

ฉันดีใจมากที่คุณได้เข้าร่วมกับฉันอีกครั้ง! แสดงว่า Wumpus ยังไม่ได้กินคุณเลย ดี!

สำหรับผู้ที่ไม่คุ้นเคย นี่คือชุดของบทช่วยสอนที่ฉันทำเพื่อช่วยลูกพี่ลูกน้องตัวตลกที่น่ารักน่าขนลุกของฉันกับโปรเจ็กต์รุ่นพี่ของเธอ บทช่วยสอนเหล่านี้มีขึ้นเพื่อใช้อ้างอิงถึงสิ่งที่คุณสามารถทำได้ด้วยคุณสมบัติการเขียนโปรแกรมบางอย่างของ Twine และ Sugarcube หากคุณต้องการติดตาม คุณสามารถค้นหาบทช่วยสอนแรกได้ที่นี่

ในบทช่วยสอนที่แล้ว ฉันสร้างห้องชุดเล็กๆ ที่ผู้เล่นสามารถสำรวจได้ ฉันเพิ่มวัตถุ Wumpus และสร้างรหัสห้องทั่วไปเพื่อเปลี่ยนสิ่งที่แสดงในแต่ละห้องขึ้นอยู่กับว่า Wumpus อยู่ที่ไหน

ขั้นตอนที่ 1: สร้างเครื่องเล่นของคุณ

สร้างเครื่องเล่นของคุณ
สร้างเครื่องเล่นของคุณ

ขั้นตอนนี้ง่ายมาก โดยพื้นฐานแล้วฉันแค่ใช้รหัสเดียวกับ $wumpus แต่มีตัวแปร $player แทน

ขั้นตอนที่ 2: รหัสห้องใหม่

รหัสห้องใหม่
รหัสห้องใหม่

เปลี่ยนรหัสห้องทั่วไปของคุณให้มีค่า $player เป็นห้องปัจจุบัน จากนั้นเปรียบเทียบ $wumpus กับ $player แทนห้องปัจจุบัน

นี่เป็นการเปลี่ยนแปลงเล็กน้อยและไม่จำเป็นทั้งหมด แต่ฉันชอบจัดระเบียบโค้ดของฉัน

ขั้นตอนที่ 3: การสร้างลิงค์จากตัวแปร

การสร้างลิงค์จากตัวแปร
การสร้างลิงค์จากตัวแปร

สุดท้ายนี้ ต้องการแทนที่ลิงก์ในห้องเริ่มต้นของฉันเป็นลิงก์ที่เปลี่ยนแปลงตามมูลค่าของ $player สามารถทำได้ด้วยฟังก์ชัน "" ใน Sugarcube คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในหน้าเอกสารประกอบของ Sugarcube

สตริงแรกหลังคำสั่งของเราคือวลีที่จะปรากฏในข้อความของเรา ที่สองคือชื่อของข้อความที่เราต้องการจะเชื่อมโยงไปถึง ฉันกำลังใช้ "Hunt the Wumpus!" เป็นวลีของฉัน แต่เราสามารถใช้ตัวแปรของเราที่นั่นแทนได้หากต้องการให้ผู้เล่นรู้ว่าพวกเขากำลังจะไปไหนล่วงหน้าเช่นนี้

ขั้นตอนที่ 4: ทดสอบ

ทดสอบ
ทดสอบ
ทดสอบ
ทดสอบ

เมื่อคุณทดสอบโค้ดของคุณ คุณจะพบว่าลิงก์ของคุณถูกแทนที่ด้วยวลีใดๆ ที่คุณเคยเขียนไว้ก่อนหน้านี้ การคลิกจะนำคุณไปยังห้องสุ่มในเกมของคุณ

น่าเสียดายที่สิ่งนี้สามารถพาคุณตรงไปที่ห้อง Wumpus! นั่นไม่สำคัญเท่าไหร่ในตอนนี้ แต่ในเกมจริงที่จะจบเกมทันที เราจำเป็นต้องแก้ไขสิ่งนั้น

ขั้นตอนที่ 5: เพิ่มรายการห้อง

เพิ่มรายการห้อง
เพิ่มรายการห้อง

อันดับแรก เราจะสร้างรายการห้องเพื่อให้การจัดการห้องง่ายขึ้น โดยการประกาศอาร์เรย์นี้ เราสามารถใช้เพื่อตั้งค่า $player และ $wumpus โดยไม่ต้องใส่โค้ดซ้ำ นอกจากนี้ยังมีข้อดีอีกอย่างที่เราจะสำรวจต่อไป

การทดสอบด้วยรหัสนี้ควรมีลักษณะเหมือนเมื่อก่อน

ขั้นตอนที่ 6: กำจัดห้อง

กำจัดห้อง
กำจัดห้อง

ฉันได้เพิ่มโค้ดบรรทัดเดียวในโค้ดก่อนหน้านี้ (เน้นไว้)

อาร์เรย์ใน Sugarcube มีฟังก์ชันในตัวที่ให้คุณลบองค์ประกอบออกจากองค์ประกอบตามชื่อได้ ในกรณีนี้ เมื่อเรากำหนด $wumpus ห้องหนึ่ง เราสามารถลบห้องนั้นออกจาก $roomlist ของเราได้ ฟังก์ชั่นนี้ค่อนข้างจู้จี้จุกจิกอย่างไรก็ตาม จะไม่ทำงานเว้นแต่จะมีการกำหนดหรือใช้เอาต์พุตของฟังก์ชันในทางใดทางหนึ่ง เพื่อดูแลเรื่องนั้น ฉันได้สร้างตัวแปรชั่วคราว _temp

ใน Sugarcube ตัวแปรชั่วคราวเริ่มต้นด้วยขีดล่าง (_) แทนที่จะเป็นดอลลาร์ ($) มีประโยชน์เพราะจะถูกลบออกเมื่อข้อความทำงาน ดังนั้นคุณจึงไม่ต้องกังวลเกี่ยวกับชื่อตัวแปรที่ทับซ้อนกัน

ฉันกำลังลบห้อง $player room ออกจาก $roomlist ด้วยเหมือนกัน

ขั้นตอนที่ 7: การทดสอบ

การทดสอบ
การทดสอบ
การทดสอบ
การทดสอบ

แม้ว่าเราจะสามารถรันโค้ดได้เหมือนตอนนี้ แต่ก็ไม่ใช่การทดสอบที่ละเอียดถี่ถ้วน หากเราเรียกใช้รหัสและพบว่า $player และ $wumpus ถูกกำหนดให้กับห้องต่างๆ เราไม่รู้ว่าเป็นเพราะรหัสใช้งานได้หรือไม่ หรือเป็นเพียงโอกาส แน่นอนว่า เราสามารถรันโค้ดได้หลายครั้ง และสันนิษฐานว่าถ้ามันไม่เคยกำหนดพวกเขาทั้งคู่ให้อยู่ในห้องเดียวกันที่มันจะไม่มีวันทำได้ แต่นั่นจะคงอยู่ตลอดไป และก็ยังไม่ใช่การรับประกัน 100% ว่าจะไม่มีวันเกิดขึ้น

เราต้องมีวิธีตรวจสอบแทน

ฉันได้เพิ่มสามบรรทัดที่ด้านบนของข้อความแนะนำของเรา ซึ่งจะทำให้เราเห็นค่าของตัวแปร $wumpus, $player และ $roomlist เนื่องจากวิธีที่เราตั้งค่าโค้ดของเรา เราทราบดีว่าห้อง $wumpus และ $player room ควรถูกกำจัดออกจาก $roomlist

เมื่อเรารันโค้ดนี้ เราสามารถตรวจสอบว่าเป็นเช่นนั้นหรือไม่

ขั้นตอนที่ 8: ความแปลกประหลาดกับ Sugarcube และ Objects

สิ่งแปลกประหลาดกับ Sugarcube และวัตถุ
สิ่งแปลกประหลาดกับ Sugarcube และวัตถุ
สิ่งแปลกประหลาดกับ Sugarcube และวัตถุ
สิ่งแปลกประหลาดกับ Sugarcube และวัตถุ
สิ่งแปลกประหลาดกับ Sugarcube และวัตถุ
สิ่งแปลกประหลาดกับ Sugarcube และวัตถุ

วัตถุ Sugarcube ค่อนข้างแปลก ให้ฉันสาธิตสิ่งนี้

ในขณะที่ฉันกำลังสร้างโปรเจ็กต์นี้อยู่ ฉันต้องการบันทึก $roomlist ของฉันไปที่ตัวแปร $saveroom ก่อนที่ฉันจะเริ่มลบห้องออกจากมัน ฉันคิดว่ามันจะมีประโยชน์ในภายหลัง

เมื่อฉันได้รับพฤติกรรมแปลกๆ จากโค้ดนี้ ฉันได้เพิ่มบรรทัดอื่นในหน้าแนะนำของฉันเพื่อให้ฉันดูตัวแปร $saveroom ของฉัน (รูปที่สอง)

ฉันตกใจมากที่พบว่าองค์ประกอบที่ฉันลบออกจาก $roomlist ก็ถูกลบออกจากรายการที่บันทึกไว้ด้วย! คุณสามารถเห็นสิ่งนี้ได้ในภาพที่สาม

นั่นเป็นเพราะเมื่อคุณคัดลอกอาร์เรย์แบบนี้ ไม่ได้บอกให้ Twine คัดลอกอาร์เรย์ คุณกำลังบอก Twine ว่าตัวแปรทั้งสองนี้เป็นอาร์เรย์เดียวกัน เมื่อคุณทำอะไรกับอาร์เรย์โดยใช้ตัวแปรตัวหนึ่ง ตัวแปรนั้นจะเปลี่ยนอาร์เรย์เดียวกันกับที่ตัวแปรอื่นกำลังดูอยู่!

เราสามารถแก้ไขได้ด้วยฟังก์ชัน clone()

ขั้นตอนที่ 9: ฟังก์ชัน Clone()

ฟังก์ชัน Clone()
ฟังก์ชัน Clone()
ฟังก์ชัน Clone()
ฟังก์ชัน Clone()

คุณสามารถอ่านเกี่ยวกับฟังก์ชัน clone() ได้ในหน้าเอกสารประกอบของ Sugarcube

สำเนา "ตื้น" คือสิ่งที่เราเคยทำมาก่อน แทนที่จะทำสำเนาทั้งอาร์เรย์ทั้งหมด จะถือว่าตัวแปรของคุณทำงานกับอาร์เรย์เดียวกัน แทนที่จะเป็นสำเนาตื้น clone() จะทำสำเนา "ลึก" ซึ่งทำงานเหมือนที่คุณคาดหวัง แต่ละองค์ประกอบของอาร์เรย์จะถูกคัดลอกไปยังอาร์เรย์ใหม่และแยกจากองค์ประกอบเดิมโดยสิ้นเชิง

หากเราทดสอบโค้ดใหม่นี้ เราพบว่าโค้ดทำงานตามที่คาดไว้

แน่นอน ไม่ว่าคุณจะเก็บ $roomlist ไว้หรือไม่ก็ตาม สำหรับวัตถุประสงค์ของโครงการของฉัน ฉันจะไม่ไป ทั้งหมดนี้เป็นเพียงการแสดงสำเนาที่ลึกและตื้น

ขั้นตอนที่ 10: แค่นั้นแหละ

แค่นั้นแหละ!
แค่นั้นแหละ!

เราได้เพิ่มรหัสที่ช่วยให้ผู้เล่นของเราเริ่มในห้องแบบสุ่ม นอกจากนั้น เราได้กำจัดจุดบกพร่องที่ผู้เล่นจะเริ่มในห้องเดียวกับ Wumpus

เราได้เรียนรู้เกี่ยวกับวิธีการสร้างลิงก์จากตัวแปร และวิธีที่ Sugarcube จัดการกับการคัดลอกอาร์เรย์

สิ่งต่าง ๆ กำลังเพิ่มขึ้น แต่เราเพิ่งเริ่มต้น!

การล่าสัตว์ที่มีความสุข!

แนะนำ: