บั๊กในการเขียนโปรแกรม Text Adventure ที่ทำลายเกม: จากกระเป๋าที่หายไปจนถึงศัตรูที่เกิดขึ้นไม่รู้จบ

ทีมชุมชน BigGo
บั๊กในการเขียนโปรแกรม Text Adventure ที่ทำลายเกม: จากกระเป๋าที่หายไปจนถึงศัตรูที่เกิดขึ้นไม่รู้จบ

เกม text adventure ที่เพิ่งเปิดตัวซึ่งใช้เวลา 40 ปีในการพัฒนาให้เสร็จสมบูรณ์ ได้จุดประกายการสนทนาที่น่าสนใจในหมู่นักพัฒนาเกี่ยวกับบั๊กในการเขียนโปรแกรมที่แปลกประหลาดซึ่งเคยรบกวนเกม interactive fiction ในยุคแรกๆ ชุมชนนักพัฒนาได้แบ่งปันเรื่องราวที่น่าจดจำเกี่ยวกับความผิดพลาดในการเขียนโค้ดที่สร้างสถานการณ์ตลกขบขันโดยไม่ได้ตั้งใจหรือทำลายเกม

บริบททางประวัติศาสตร์:

  • ยุคสมัย: คอมพิวเตอร์ส่วนบุคคลในทศวรรษ 1980
  • แพลตฟอร์มที่นิยม: Atari 800 , Commodore 64 , IBM Jr
  • ข้อจำกัดของหน่วยความจำ: RAM 64K เป็นมาตรฐาน
  • การจัดเก็บข้อมูล: แผ่นฟลอปปี้ดิสก์ที่มีความจุจำกัด
  • ภาษาโปรแกรม: BASIC ต่อมาใช้ Inform สำหรับเกมผจญภัยแบบข้อความ

ปัญหาคลาสสิกของการใส่กระเป๋าในกระเป๋า

บั๊กที่พบบ่อยที่สุดอย่างหนึ่งเกี่ยวข้องกับตรรกะของ container ที่ทำงานผิดพลาด นักพัฒนามักพบปัญหาเมื่อผู้เล่นพยายามใส่วัตถุเข้าไปในตัวมันเองหรือสร้างลูปการบรรจุที่เป็นไปไม่ได้ โปรแกรมเมอร์คนหนึ่งเล่าว่าเมื่อพิมพ์ put bag in bag แล้วเห็นกระเป๋าหายไปจากโลกของเกมอย่างสิ้นเชิง สิ่งนี้เกิดขึ้นเพราะตรรกะของเกมจะย้ายกระเป๋าเข้าไปในตัวมันเอง ทำให้เกิดการอ้างอิงที่ทำลายระบบติดตามวัตถุ

Container logic: กฎการเขียนโปรแกรมที่กำหนดว่าวัตถุสามารถวางไว้ในวัตถุอื่นๆ ในเกมได้อย่างไร

ข้อผิดพลาดทั่วไปในการเขียนโปรแกรมเกมผจญภัยแบบข้อความ:

  • ข้อผิดพลาดในตรรกะของตัวบรรจุ (วัตถุหายไปเมื่อถูกใส่เข้าไปในตัวมันเอง)
  • การเกิดศัตรูแบบไม่มีที่สิ้นสุดเนื่องจากขาดการตรวจสอบเงื่อนไข
  • ตัววิเคราะห์คำสั่งยอมรับมากเกินไป (อนุญาตให้ทำการกระทำที่เป็นไปไม่ได้ เช่น ใส่คนเข้าไปในสินค้าคงคลัง)
  • หน่วยความจำล้นเนื่องจากเกมขยายใหญ่เกินกว่า RAM ที่มีอยู่
  • ไฟล์เซฟเสียหายเมื่อไฟล์เกินความจุพื้นที่เก็บข้อมูลระหว่างการเขียน

การเพิ่มจำนวนศัตรูแบบไม่มีที่สิ้นสุด

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

ความสับสนของ Parser และการกระทำที่ไม่ได้ตั้งใจ

Text parser ที่แปลความหมายคำสั่งของผู้เล่นมักมีตรรกะที่กว้างเกินไป ผู้ทดสอบเบต้าคนหนึ่งค้นพบว่าพวกเขาสามารถพิมพ์ get Aldwin และยัดตัวละครมนุษย์ทั้งตัวเข้าไปในสินค้าคงคลังของตัวเองได้สำเร็จ เหมือนกับการหยิบดาบหรือกุญแจ ระบบวัตถุของเกมปฏิบัติต่อทุกสิ่งเหมือนกัน ทำให้เกิดสถานการณ์ไร้สาระที่คนกลายเป็นสิ่งของที่พกพาได้

ข้อจำกัดของหน่วยความจำและการจัดเก็บ

นอกจากบั๊กทางตรรกะแล้ว นักพัฒนา text adventure ในยุคแรกยังต้องต่อสู้กับข้อจำกัดของฮาร์ดแวร์อย่างต่อเนื่อง เกมจะใช้ RAM ทั้งหมดที่มีหรือมีขนาดใหญ่เกินไปสำหรับฟลอปปี้ดิสก์ระหว่างการบันทึก บางครั้งทำให้ไฟล์เสียหายเมื่อพื้นที่จัดเก็บหมดระหว่างการเขียน ข้อจำกัดทางเทคนิคเหล่านี้บังคับให้ต้องหาวิธีแก้ปัญหาอย่างสร้างสรรค์และสอนให้นักพัฒนาคิดอย่างรอบคอบเกี่ยวกับการจัดการทรัพยากร

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

อ้างอิง: You can now play The Plot of the Phantom, the text adventure game that took me 40 years to finish