นี่เป็นคำถามเชิงทฤษฎีส่วนใหญ่เกี่ยวกับ FP แต่ฉันจะผจญภัยข้อความ (เช่น Zork โรงเรียนเก่า) เพื่อแสดงจุดของฉัน ฉันต้องการทราบความคิดเห็นของคุณเกี่ยวกับวิธีจำลองสถานการณ์จำลองด้วย FP
การผจญภัยข้อความดูเหมือนจะเรียก OOP ตัวอย่างเช่น "ห้อง" ทั้งหมดเป็นอินสแตนซ์ของRoom
คลาสคุณสามารถมีItem
คลาสพื้นฐานและอินเทอร์เฟซที่เหมือนกับItem<Pickable>
สิ่งที่คุณสามารถพกพาไปเรื่อย ๆ
การสร้างแบบจำลองโลกใน FP ทำงานแตกต่างกันโดยเฉพาะอย่างยิ่งถ้าคุณต้องการบังคับให้เปลี่ยนแปลงในโลกที่ต้องกลายพันธุ์ในขณะที่เกมดำเนินไป (วัตถุถูกย้ายศัตรูพ่ายแพ้การให้คะแนนเพิ่มขึ้น ฉันนึกภาพวัตถุชิ้นใหญ่ชิ้นเดียวWorld
ที่มีทุกอย่าง: มีห้องอะไรบ้างที่คุณสามารถสำรวจได้ว่ามันเชื่อมโยงกันอย่างไรสิ่งที่ผู้เล่นกำลังแบกคันโยกที่ถูกกระตุ้น
ฉันคิดว่าวิธีการที่บริสุทธิ์จะส่งวัตถุขนาดใหญ่นี้ไปยังฟังก์ชันใด ๆ และให้พวกเขาส่งคืน (อาจแก้ไข) ตัวอย่างเช่นฉันมีmoveToRoom
ฟังก์ชั่นที่รับWorld
และส่งคืนพร้อมWorld.player.location
เปลี่ยนเป็นห้องใหม่World.rooms[new_room].visited = True
และอื่น ๆ
แม้ว่านี่จะเป็นวิธีที่ "ถูกต้อง" มากกว่า แต่ก็ดูเหมือนว่าจะมีการบังคับใช้ความบริสุทธิ์เพื่อประโยชน์ของมัน ขึ้นอยู่กับภาษาการเขียนโปรแกรมการส่งผ่านWorld
วัตถุที่มีขนาดใหญ่มากไปมาอาจมีราคาแพง นอกจากนี้ทุกฟังก์ชั่นอาจต้องมีการเข้าถึงWorld
วัตถุใด ๆ ตัวอย่างเช่นห้องอาจเข้าถึงได้หรือไม่ขึ้นอยู่กับคันโยกที่ถูกเรียกในห้องอื่นเพราะอาจถูกน้ำท่วม แต่หากผู้เล่นมีเสื้อชูชีพก็สามารถเข้าได้ สัตว์ประหลาดอาจก้าวร้าวหรือไม่ขึ้นอยู่กับว่าผู้เล่นสังหารญาติของเขาในห้องอื่น ซึ่งหมายความว่าroomCanBeEntered
ฟังก์ชั่นความต้องการที่จะเข้าถึงWorld.player.invetory
และWorld.rooms
, describeMonster
ความต้องการในการเข้าถึงWorld.monsters
และอื่น ๆ (โดยทั่วไปคุณต้องผ่านภาระทั้งหมดไปรอบ ๆ ) นี่ดูเหมือนว่าฉันจะเรียกตัวแปรทั่วโลกถึงแม้ว่านี่จะเป็นรูปแบบการเขียนโปรแกรมที่ดีโดยเฉพาะใน FP
คุณจะแก้ปัญหานี้อย่างไร