ฉันหวังว่าการพูดจาโผงผางเหล่านี้จะทำให้คำถามของฉันชัดเจน - ฉันเข้าใจโดยสิ้นเชิงถ้าพวกเขาไม่ได้ดังนั้นแจ้งให้เราทราบว่าเป็นกรณีนี้และฉันจะพยายามทำให้ตัวเองชัดเจนขึ้น
พบกับBoxPongเกมง่ายๆที่ฉันสร้างความคุ้นเคยกับการพัฒนาเกมเชิงวัตถุ ลากกล่องเพื่อควบคุมลูกบอลและรวบรวมสิ่งที่เป็นสีเหลือง
การทำให้ BoxPong ช่วยฉันกำหนดคำถามพื้นฐาน: ฉันจะมีวัตถุที่มีปฏิสัมพันธ์ซึ่งกันและกันโดยไม่ต้อง "เป็น" กันได้อย่างไร กล่าวอีกนัยหนึ่งมีวิธีที่วัตถุจะไม่เป็นลำดับชั้น แต่แทนที่จะอยู่ร่วมกันหรือไม่ (ฉันจะเข้าไปดูรายละเอียดเพิ่มเติมด้านล่าง)
ฉันสงสัยว่าปัญหาของวัตถุที่อยู่ร่วมกันนั้นเป็นปัญหาทั่วไปดังนั้นฉันหวังว่าจะมีวิธีการแก้ไขที่แน่นอน ฉันไม่ต้องการที่จะสร้างใหม่ล้อสี่เหลี่ยมดังนั้นฉันเดาคำตอบที่ดีที่สุดที่ฉันกำลังมองหาคือ "นี่เป็นรูปแบบการออกแบบที่ใช้กันทั่วไปในการแก้ปัญหาของคุณ"
โดยเฉพาะอย่างยิ่งในเกมง่ายๆเช่น BoxPong เป็นที่ชัดเจนว่ามีหรือควรมีวัตถุจำนวนหนึ่งอยู่ร่วมกันในระดับเดียวกัน มีกล่องมีลูกบอลมีของสะสม ทั้งหมดที่ฉันสามารถแสดงในภาษาเชิงวัตถุแม้ว่า - หรือเพื่อให้ดูเหมือน - มีความสัมพันธ์HAS-A ที่เข้มงวด ทำผ่านตัวแปรสมาชิก ฉันไม่สามารถเริ่มball
และปล่อยให้มันทำสิ่งนั้นฉันต้องการให้มันเป็นของวัตถุอื่นอย่างถาวร ฉันได้ตั้งค่าเพื่อให้วัตถุหลักของเกมมีกล่องและกล่องนั้นมีลูกบอลและมีตัวนับคะแนน แต่ละวัตถุยังมีupdate()
วิธีการซึ่งจะคำนวณตำแหน่งทิศทาง ฯลฯ และฉันไปลักษณะที่คล้ายกันที่นั่นผมเรียกวิธีการอัพเดตเกมวัตถุหลักซึ่งเรียกวิธีการปรับปรุงของเด็กทุกคนของตนและพวกเขาในทางกลับกันเรียกวิธีการปรับปรุงทั้งหมดของพวกเขาเด็ก นี่เป็นวิธีเดียวที่ฉันสามารถเห็นการสร้างเกมเชิงวัตถุ แต่ฉันรู้สึกว่ามันไม่ใช่วิธีที่เหมาะ ท้ายที่สุดฉันจะไม่คิดว่าลูกบอลเป็นของกล่อง แต่อยู่ในระดับเดียวกันและมีปฏิสัมพันธ์กับมัน ฉันคิดว่าสามารถทำได้โดยการเปลี่ยนวัตถุเกมทั้งหมดเป็นตัวแปรสมาชิกของวัตถุเกมหลัก แต่ฉันไม่เห็นว่าการแก้ปัญหาอะไร ฉันหมายถึง ... ทิ้งความยุ่งเหยิงที่เห็นได้ชัดจะมีวิธีใดสำหรับลูกบอลและกล่องที่จะรู้จักซึ่งกันและกันนั่นคือการโต้ตอบ?
นอกจากนี้ยังมีปัญหาของวัตถุที่ต้องการส่งผ่านข้อมูลระหว่างกัน ฉันมีประสบการณ์ค่อนข้างน้อยในการเขียนโค้ดสำหรับ SNES ซึ่งคุณสามารถเข้าถึง RAM ทั้งหมดได้ตลอดเวลา สมมติว่าคุณกำลังสร้างศัตรูที่กำหนดเองสำหรับSuper Mario Worldและคุณต้องการให้ลบเหรียญทั้งหมดของ Mario จากนั้นเพียงเก็บศูนย์ไว้ที่ $ 0DBF โดยไม่มีปัญหา ไม่มีข้อ จำกัด ว่าศัตรูไม่สามารถเข้าถึงสถานะของผู้เล่นได้ ฉันคิดว่าฉันถูกนิสัยเสียด้วยอิสรภาพนี้เพราะด้วย C ++ และสิ่งที่ฉันมักพบว่าตัวเองสงสัยว่าจะทำให้สิ่งอื่น ๆ สามารถเข้าถึงคุณค่าได้อย่างไร (หรือทั่วโลก)
ใช้ตัวอย่างของ BoxPong จะเกิดอะไรขึ้นถ้าฉันต้องการให้ลูกบอลกระเด็นขอบของหน้าจอ width
และheight
เป็นคุณสมบัติของGame
ชั้นเรียนball
เพื่อให้สามารถเข้าถึงได้ ฉันสามารถส่งผ่านค่าเหล่านี้ได้ (ไม่ว่าจะผ่านทางคอนสตรัคเตอร์หรือวิธีการที่พวกเขาต้องการ) แต่นั่นก็แค่กรีดร้องการปฏิบัติที่ไม่ดีกับฉัน
ฉันเดาว่าปัญหาหลักของฉันคือฉันต้องการวัตถุที่จะรู้ซึ่งกันและกัน แต่วิธีเดียวที่ฉันสามารถเห็นได้ว่าเป็นลำดับชั้นที่เข้มงวดซึ่งน่าเกลียดและทำไม่ได้
ฉันเคยได้ยินเรื่อง "เรียนเพื่อน" ใน C ++ และรู้วิธีการทำงานของพวกเขา แต่ถ้าพวกเขาเป็นวิธีการแก้ปัญหาทั้งหมดแล้วทำไมฉันไม่เห็นfriend
คำหลักเทลงในทุกโครงการ C ++ เดียวและมาได้อย่างไร แนวคิดไม่มีอยู่ในทุกภาษาของ OOP (เช่นเดียวกับตัวชี้ฟังก์ชั่นซึ่งฉันเพิ่งเรียนรู้)
ขอบคุณล่วงหน้าสำหรับคำตอบใด ๆ - และอีกครั้งหากมีส่วนที่ไม่สมเหตุสมผลกับคุณโปรดแจ้งให้เราทราบ