मुझे उम्मीद है कि ये रैलिंग मेरे सवाल को स्पष्ट कर देंगी - अगर वे अभ्यस्त हैं तो मैं पूरी तरह से समझ पाऊंगा, इसलिए मुझे बताएं कि क्या यह मामला है, और मैं खुद को स्पष्ट करने की कोशिश करूंगा।
बॉक्सपोंग से मिलो , एक बहुत ही सरल गेम जिसे मैंने ऑब्जेक्ट-ओरिएंटेड गेम डेवलपमेंट से परिचित कराया। गेंद को नियंत्रित करने और पीली चीजों को इकट्ठा करने के लिए बॉक्स को खींचें।
बॉक्सपॉन्ग बनाने से मुझे अन्य बातों के अलावा, एक मौलिक प्रश्न: मुझे एक-दूसरे से "संबंधित" होने के बिना एक दूसरे के साथ बातचीत करने वाली वस्तुएं कैसे मिल सकती हैं? दूसरे शब्दों में, क्या वस्तुओं के लिए एक तरीका है पदानुक्रमित नहीं, बल्कि सह-अस्तित्ववादी? (मैं नीचे और विस्तार में जाऊंगा।)
मुझे लगता है कि सह-अस्तित्व वाली वस्तुओं की समस्या एक आम बात है, इसलिए मुझे उम्मीद है कि इसे हल करने के लिए एक स्थापित तरीका है। मैं स्क्वायर व्हील को सुदृढ़ नहीं करना चाहता, इसलिए मुझे लगता है कि मैं जिस आदर्श उत्तर की तलाश कर रहा हूं वह है "यहां एक डिज़ाइन पैटर्न है जो आमतौर पर आपकी तरह की समस्या को हल करने के लिए उपयोग किया जाता है।"
विशेष रूप से बॉक्सपॉन्ग जैसे सरल गेमों में, यह स्पष्ट है कि एक ही स्तर पर एक मुट्ठी भर वस्तुएं हैं। एक बॉक्स है, एक गेंद है, एक संग्रहणीय है। सभी मैं वस्तु-उन्मुख भाषाओं में व्यक्त कर सकता हूं, हालांकि - या तो ऐसा लगता है - सख्त एचएएस-ए रिश्ते हैं। यह सदस्य चर के माध्यम से किया जाता है। मैं बस शुरू नहीं कर सकता ball
और इसे अपनी बात करने दूंगा, मुझे इसकी आवश्यकता स्थायी रूप से किसी अन्य वस्तु से है। मैं इसे सेट अप तो मुख्य उद्देश्य यह है कि खेल है एक बॉक्स, और बदले में बॉक्स है एक गेंद, और है एक स्कोर काउंटर। प्रत्येक वस्तु भी एक हैupdate()
विधि है, जो स्थिति, दिशा आदि की गणना करता है, और मैं वहाँ एक समान तरीके से जाना: मैं मुख्य खेल वस्तु की अद्यतन विधि है, जो अपने सभी बच्चों के अद्यतन तरीकों कॉल कहते हैं, और वे बारी में सभी का अद्यतन तरीकों कॉल उनके बच्चों। यह एकमात्र तरीका है जिसे मैं ऑब्जेक्ट-ओरिएंटेड गेम बनाने के लिए देख सकता हूं, लेकिन मुझे लगता है कि यह आदर्श तरीका नहीं है। आखिरकार, मैं बिल्कुल बॉक्स से संबंधित गेंद के बारे में नहीं सोचूंगा, बल्कि एक ही स्तर पर होने के नाते और इसके साथ बातचीत करूंगा। मुझे लगता है कि सभी गेम ऑब्जेक्ट्स को मुख्य गेम ऑब्जेक्ट के सदस्य चर में बदलकर प्राप्त किया जा सकता है, लेकिन मुझे ऐसा कुछ भी नहीं दिखता है। मेरा मतलब है ... स्पष्ट अव्यवस्था को छोड़कर, एक दूसरे को जानने के लिए, बातचीत करने के लिए गेंद और बॉक्स के लिए एक रास्ता कैसे होगा ?
एक दूसरे के बीच जानकारी पास करने के लिए आवश्यक वस्तुओं का मुद्दा भी है। मेरे पास एसएनईएस के लिए कोड लिखने का काफी अनुभव है, जहां आपको हर समय व्यावहारिक रूप से पूरी रैम तक पहुंच है। कहते हैं कि आप सुपर मारियो वर्ल्ड के लिए एक कस्टम दुश्मन बना रहे हैं , और आप चाहते हैं कि यह मारियो के सभी सिक्कों को हटा दे, फिर $ 0DBF को संबोधित करने के लिए शून्य को स्टोर करें, कोई बात नहीं। यह कहते हुए कोई सीमा नहीं है कि दुश्मन खिलाड़ी की स्थिति तक नहीं पहुंच सकते। मुझे लगता है कि मैं इस स्वतंत्रता से खराब हो गया हूं, क्योंकि सी ++ और जैसे मैं अक्सर खुद को आश्चर्यचकित करता हूं कि कुछ अन्य वस्तुओं (या यहां तक कि वैश्विक) के लिए सुलभ मूल्य कैसे बनाया जाए।
BoxPong के उदाहरण का उपयोग करते हुए, क्या होगा अगर मैं स्क्रीन के किनारों से गेंद को उछाल देना चाहता था? width
और वर्ग के height
गुण हैं Game
,ball
उन तक पहुँचने के लिए। मैं इस प्रकार के मूल्यों को (या तो निर्माणकर्ताओं या उन विधियों के माध्यम से पारित कर सकता हूँ जहाँ वे आवश्यक हैं), लेकिन यह मेरे लिए बुरे अभ्यास को चिल्लाता है।
मुझे लगता है कि मेरी मुख्य समस्या यह है कि मुझे एक दूसरे को जानने के लिए वस्तुओं की आवश्यकता है, लेकिन एकमात्र तरीका जो मैं कर सकता हूं वह है सख्त पदानुक्रम, जो बदसूरत और अव्यवहारिक है।
मैंने C ++ पर "फ्रेंड क्लासेस" के बारे में सुना है और पता है कि वे कैसे काम करते हैं, लेकिन अगर वे एंड-ऑल सॉल्यूशन हैं, तो मैं कैसे आऊं, friend
हर एक C ++ प्रोजेक्ट पर सभी कीवर्ड डाले नहीं गए , और कैसे आए अवधारणा हर OOP भाषा में मौजूद नहीं है? (वही फंक्शन पॉइंटर्स के लिए जाता है, जो मैंने हाल ही में सीखा है।)
किसी भी तरह के उत्तर के लिए अग्रिम धन्यवाद - और फिर, अगर वहाँ एक हिस्सा है जो आपको समझ में नहीं आता है, तो मुझे बताएं।