มีเทคนิคทั่วไปในการจัดการสถานะ (โดยทั่วไป) ในภาษาโปรแกรมการทำงานหรือไม่? มีคำตอบในทุกภาษา (ฟังก์ชั่น) การเขียนโปรแกรมเพื่อจัดการสถานะโกลบอล แต่ฉันต้องการหลีกเลี่ยงสิ่งนี้เท่าที่จะทำได้
สถานะทั้งหมดในลักษณะการทำงานบริสุทธิ์เป็นพารามิเตอร์ฟังก์ชั่น ดังนั้นฉันจึงจำเป็นต้องกำหนดสถานะของเกมทั้งหมด (แฮชแมปขนาดมหึมากับโลกผู้เล่นตำแหน่งคะแนนสินทรัพย์ศัตรู ... )) เป็นพารามิเตอร์สำหรับทุกฟังก์ชั่นที่ต้องการจัดการโลกบนอินพุตหรือทริกเกอร์ที่กำหนด . ฟังก์ชั่นของตัวเองเลือกข้อมูลที่เกี่ยวข้องจาก bloest gamestate ทำอะไรกับมันจัดการกับ gamestate และคืน gamestate แต่นี่ดูเหมือนจะเป็นทางออกที่ไม่ดีสำหรับผู้ชาย ถ้าฉันใส่เกมมิ่งทั้งหมดลงในฟังก์ชั่นทั้งหมดมันจะไม่มีประโยชน์สำหรับฉันในทางตรงกันข้ามกับตัวแปรทั่วโลกหรือวิธีการที่จำเป็น
ฉันสามารถใส่ข้อมูลที่เกี่ยวข้องลงในฟังก์ชั่นและคืนการกระทำที่จะนำไปใช้สำหรับอินพุตที่กำหนด และหนึ่งฟังก์ชั่นเดียวใช้การกระทำทั้งหมดกับนักเล่นเกม แต่ฟังก์ชั่นส่วนใหญ่ต้องการข้อมูล"ที่เกี่ยวข้อง" จำนวนมาก move()
ต้องการตำแหน่งวัตถุ, ความเร็ว, แผนที่สำหรับการชน, ตำแหน่งของศัตรูทั้งหมด, สุขภาพในปัจจุบัน, ... ดังนั้นวิธีนี้ดูเหมือนจะไม่ทำงานเช่นกัน
ดังนั้นคำถามของฉันคือฉันจะจัดการกับรัฐจำนวนมากในภาษาโปรแกรมที่ใช้งานได้โดยเฉพาะอย่างยิ่งสำหรับการพัฒนาเกมได้อย่างไร
แก้ไข:มีกรอบเกมบางอย่างสำหรับการสร้างเกมใน Clojure มีวิธีการแก้ปัญหานี้บางส่วนคือการเธรดวัตถุทั้งหมดในเกมเป็น "เอนทิตี" และวางไว้ในกระเป๋าใบใหญ่ หน้าที่หลัก Gigantถือหน้าจอและหน่วยงานและกิจกรรมจับ ( :on-key-down
, :on-init
, ... ) สำหรับองค์กรนี้และเรียกห่วงจอแสดงผลหลัก แต่นี่ไม่ใช่ทางออกที่สะอาดที่ฉันค้นหา
move()
คุณน่าจะผ่านวัตถุ 'ปัจจุบัน' (หรือตัวระบุสำหรับมัน) รวมทั้งโลกที่มันเคลื่อนที่ผ่านและเพิ่งได้รับตำแหน่งและความเร็วปัจจุบัน ... เอาท์พุทเป็นโลกฟิสิกส์ทั้งหมดหรืออย่างน้อย รายการของวัตถุที่เปลี่ยนแปลง