คำตอบของ Gregory Weir เป็นที่ชื่นชอบสำหรับวิธีการจัดโครงสร้างอินสแตนซ์ของไอเท็มเพื่อดำเนินการหลายบทบาท
วิธีโหลดจากไฟล์:
ก่อนอื่นให้ใช้ YAML YAML เป็นภาษาคำอธิบายข้อมูลที่มีประโยชน์ สามารถแยกวิเคราะห์ได้ค่อนข้างเร็วอ่านและแก้ไขโดยมนุษย์รองรับข้อมูลไบนารีและไลบรารีที่มีอยู่สำหรับภาษาการเขียนโปรแกรมส่วนใหญ่รวมถึง Java วิธีนี้ช่วยแก้ "ฉันจะนำข้อมูลจากไฟล์ไปสู่วัตถุได้อย่างไร
ประการที่สองการใช้รูปแบบฟลายเวทข้อมูลส่วนใหญ่ที่คุณอ่านจากไฟล์เหล่านั้นเป็นแบบสแตติก มันจะไม่เปลี่ยนแปลงต่อตัวอย่าง ("ขวานทำดาเมจพื้นฐาน 1d10 และทำลายไม้ แต่ไม่ใช่หิน" - นั่นเป็นความจริงของทั้งห้าแกนที่ผู้เล่นมี) สิ่งที่คุณอ่านจากไฟล์ YAML คือคำจำกัดความของคำว่าสงบและอินสแตนซ์ของไอเท็มแต่ละรายการของคุณมีการอ้างอิงที่ไม่เป็นเจ้าของ (และค่าคงที่) พร้อมกับข้อมูลต่ออินสแตนซ์เช่น " ฉันชื่อที่กำหนดเอง? "และอื่น ๆ
ด้วยการแบ่งปันข้อมูลข้ามอินสแตนซ์ในวัตถุเดียวคุณจะเก็บรักษาหน่วยความจำไว้จำนวนมากและทำให้ง่ายต่อการอัปเดตรายการโดยไม่มีสถานะเกมคงอยู่ (บันทึกเกมหรือฐานข้อมูลผู้เล่น)
ดังนั้นโครงสร้างชั้นเรียนของคุณดูเหมือน:
- รายการระดับ - หนึ่งอินสแตนซ์ต่อรายการ
- ตัวอย่างอาวุธของ Owns-a
- อินสแตนซ์ของเครื่องมือ
- มีชื่อที่กำหนดเอง ฯลฯ
- อาวุธระดับ - (มากถึง) หนึ่งอินสแตนซ์ต่อไอเท็ม
- เป็นรายการส่วนประกอบ
- หมายถึง WeaponDef
- มีเลเวลโบนัสพิเศษ ฯลฯ
- เครื่องมือคลาส - (สูงสุด) หนึ่งอินสแตนซ์ต่อหนึ่งรายการ
- เป็นรายการส่วนประกอบ
- อ้างอิงถึง ToolDef
- มีความทนทาน ฯลฯ
- class WeaponDef - หนึ่งอินสแตนซ์ต่อหนึ่งชนิดของอาวุธ
- อ่านจากไฟล์ฟิลด์ควรจะคงที่
- มีจำนวนดาเมจพื้นฐาน 1 หรือ 2 มือเป็นต้น
- class ToolDef - หนึ่งอินสแตนซ์ต่อชนิดของเครื่องมือ
- อ่านจากไฟล์ฟิลด์ควรจะคงที่
- มีความทนทานพื้นฐานวัสดุที่สามารถแตกหัก ฯลฯ