2009-03-13 13 views
6

मैं एक साधारण खेल --- पोंग, Arkanoid --- सख्ती से "उचित ओओ" का उपयोग कर, जो भी मतलब है, का उपयोग करने की कोशिश कर रहा हूँ।एक विधि किसके पास है?

तो, अपने आप को मौत के लिए डिजाइन द्वारा, मैं एक बिंदु है जहां मैं क्या करना है या नहीं जानता हूँ कि अगली बार ऐसा करने के लिए प्राप्त करने के लिए

कौन संभाल चाहिए, कोशिश कर रहा हूँ ..., उदाहरण के लिए colissions? और स्कोरकीपिंग?

मेरा पहला विचार गेंद को दो नौकरियां दे रहा था, लेकिन यह एक ईश्वर वस्तु में तेजी से विस्तार करना शुरू कर दिया: गेंद को पता था कि यह कहां है, यह किसने दुर्घटनाग्रस्त होकर स्कोरकींग वस्तुओं को रिपोर्ट किया।

और यह खराब गेंद के लिए बहुत अधिक है।

उत्तर

5

नियम:

  • यदि एक वस्तु तार्किक राज्य शामिल के सभी का मालिक है, तो यह तरीकों कि कि राज्य
  • का उपयोग करता है, तो एक तरीका है और अधिक से अधिक एक वस्तु से राज्य की आवश्यकता है का मालिक:
    • अगर एक कंटेनर वस्तु विधि द्वारा उपयोग की वस्तुओं के सभी का मालिक है, तो यह विधि भी
    • अन्यथा मालिक आप उपयोगिता विधि ही करने के लिए एक 'पुल' वस्तु की जरूरत
    • जब तक कि वहाँ एक मजबूत तर्क एक वस्तु विधि के लिए 'नियंत्रक' अपने मामले, 'gameboard' या 'में (हालांकि एक उदाहरण बेतकल्लुफ़ नहीं सोच सकते हैं)

होने के लिए है गेम एनवायरनमेंट 'में शायद' गेम फिजिक्स 'क्लास (या विधियों का समूह) होगा जो टक्कर-पहचान (उपयोगिता/पुल) विधियों

+0

मुझे लगता है कि मैं इनमें से कुछ को समझता हूं, जैसे पहले: चूंकि स्कोरकीपिंग ऑब्जेक्ट सभी स्कोर स्थिति रखता है, इसलिए इसमें स्कोर को संशोधित करने के तरीके भी हो सकते हैं। मुझे 1.1 समझ में नहीं आता है, हालांकि: चूंकि प्रत्येक कॉलिशन बोर्ड के भीतर होता है, इसलिए मुझे बोर्ड.collides (गेंद, गोल 1) होना चाहिए? – Tordek

+0

@ [टॉर्डेक]: हाँ - वास्तव में आपके पास बोर्ड होगा। चेककॉलिज़न (ऑल ऑब्जेक्ट्स), सभी गेंदों और लक्ष्यों और सक्रिय गेम स्कोप में किसी भी अन्य टकराव योग्य वस्तु के बीच टक्कर की जांच करने के लिए। टक्कर परीक्षण के लिए MovingObjects एक्स CollidableObjects का उपयोग करें, और एक त्वरित परीक्षण के लिए बाध्य आयत की जांच करें। –

1

यह वास्तव में आपके कार्यान्वयन पर निर्भर करता है, लेकिन मुझे लगता है कि आपके पास स्कोर रखने के लिए "गेमबोर्ड" ऑब्जेक्ट होगा, या शायद प्रत्येक पक्ष पर एक लक्ष्य ऑब्जेक्ट होगा। जहां तक ​​टकराव मुझे लगता है कि आप वस्तुओं के बीच घटनाओं को पारित करना चाहते हैं। मुझे लगता है कि किसी ऑब्जेक्ट को इसके स्थान को जानना चाहिए। अंगूठे का

0

अधिकांश खेलों में आपके पास स्टेटिक्स और अभिनेता हैं। .. अभिनेता चारों ओर घूमते हैं और उनमें से प्रत्येक स्वतंत्र रूप से पता लगाता है जब वे किसी चीज़ से टकराते हैं क्योंकि वे अपने आकार और विस्तार से अवगत हैं

+0

इस मामले में, मेरे अभिनेता गेंद और पैडल होंगे, है ना? जब कोई संयोजन होता है तो क्या होता है? क्या गेंद और पैडल नई दिशा पर सहमत होना चाहिए? दीवारों और लक्ष्यों स्टेटिक्स हैं? क्या होगा, एक चुनौती के लिए, मैंने दीवारों को आगे बढ़ाया? ऑब्जेक्ट एक स्थैतिक होने पर कब निकलता है? – Tordek

2

एक अच्छा या बुरा डिज़ाइन स्वयं को प्रकट करता है कि यह अप्रत्याशित आवश्यकताओं को कितनी अच्छी तरह से समायोजित करता है, इसलिए मैं सुझाव दूंगा आपके डिजाइन रिफ्लेक्सन को सूचित करने के लिए संभावित "गेम फीचर्स" का एक स्टॉक आसान है। चूंकि आप इसे एक लर्निंग प्रोजेक्ट के रूप में कर रहे हैं, इसलिए आप पागल हो सकते हैं।

Arkanoid इसके लिए बहुत अच्छा विकल्प है, यह कई विकल्प प्रदान करता है। विभिन्न ईंटों को अंक की विभिन्न मात्रा स्कोर करें। कुछ ईंटें हिट करते समय अन्य ईंटों के स्कोर को बदलें। कुछ ईंटों को कई हिट की आवश्यकता है। गेंद, पैडल, या ईंटों को महाशक्तियां दें। इन शक्तियों को रोकें: उनमें से एक गेंद को कीबोर्ड-नियंत्रणीय बनाता है, दूसरा इसे पारदर्शी बनाता है, दूसरा "गुरुत्वाकर्षण" को उलट देता है, और इसी तरह। ईंटें वस्तुओं को छोड़ दें।

लक्ष्य यह है कि जब आप ऐसा परिवर्तन करते हैं, तो यह कक्षाओं और विधियों की न्यूनतम संभव संख्या को प्रभावित करता है। इस मानदंड को फिट करने के लिए आपके डिज़ाइन को कैसे बदलना चाहिए इसके बारे में एक महसूस करें।

एक आईडीई का उपयोग करें जिसमें रिफैक्टरिंग मेनू है, विशेष रूप से चाल विधि रीफैक्टरिंग।(यदि आपने नहीं किया है, तो Refactoring पुस्तक पढ़ें।) यहां और वहां अपनी विभिन्न विधियों को रखने के साथ प्रयोग करें। ध्यान दें कि विधि को "गलत" कब रखा जाता है, और जब आप इसे कहीं और स्थानांतरित करते हैं तो क्या आसान हो जाता है। जब वस्तुएं अपने राज्य की देखभाल करती हैं तो तरीके सही तरीके से रखे जाते हैं; आप किसी वस्तु को अपने राज्य के बारे में प्रश्न पूछने के बजाय "कुछ" करने के लिए "बताएं" और फिर उसके उत्तरों के आधार पर निर्णय ले सकते हैं।

मान लीजिए कि आपके डिजाइन में प्रत्येक स्प्राइट एक ऑब्जेक्ट उदाहरण है। (आप अन्य रणनीतियों का चयन कर सकते हैं।) आम तौर पर, गति एक स्प्राइट की स्थिति को बदल देती है, इसलिए एक विशेष प्रकार के स्प्राइट के लिए गति का वर्णन करने वाली विधि शायद उस स्प्राइट की कक्षा पर निर्भर करती है।

टकराव का पता लगाने का एक संवेदनशील हिस्सा कोड है, क्योंकि इसमें संभावित रूप से sprites के सभी संभावित जोड़े की जांच करना शामिल है। आप टकराव के लिए की जांच करना चाहते हैं और टकराव की वस्तुओं को सूचित करना चाहते हैं। उदाहरण के लिए, आपकी गेंद वस्तु को पैडल के साथ टकराने पर अपनी गति को बदलने की जरूरत है। लेकिन सामान्य रूप से टकराव का पता लगाने के लिए एल्गोरिदम गेंद वर्ग पर नहीं होगा, क्योंकि वस्तुओं के अन्य जोड़े खेल के लिए महत्वपूर्ण परिणामों के साथ टकरा सकते हैं।

और इसी तरह ...

2

ध्यान रखें कि वस्तुओं भी तार्किक तत्व एक भी समस्या का (न केवल असली तत्वों, गेंद और बोर्ड की तरह) के लिए मौजूद हैं आ सकता है।

तो टकराव का पता लगाने के लिए, आपके पास एक कॉलिंग एलीमेंट क्लास हो सकती है जो स्थिति और आकार के राज्यों को संभालती है। इस ऑब्जेक्ट को तब किसी भी ऑब्जेक्ट में संरचना द्वारा एम्बेड किया जा सकता है जिसे गेम में टकराया जाना चाहिए और किसी भी आवश्यक विधि कॉल को प्रतिनिधि करना चाहिए।

+0

यह एक महत्वपूर्ण टिप्पणी है। बहुत से नौसिखियों को लगता है कि ओओ प्रोग्रामिंग वास्तविक दुनिया में मौजूद भौतिक वस्तुओं के लिए हर संभावित तर्क को जोड़ रहा है। –

संबंधित मुद्दे