मैं चारों ओर एक छोटा सा खेल परियोजना के साथ खेल रहा हूँ और जैसा कि मैंने बहुत TDD में अनुभवी नहीं कर रहा हूँ मैं चीजों के एक जोड़े पर कुछ विशेषज्ञ राय प्राप्त करने के लिए अच्छा लगेगा।TDD और खेल भौतिकी
सबसे पहले, मुझे लगता है कि TDD पर जल्दी एहसास हुआ खेल विकास के लिए आदर्श नहीं मालूम था। ऐसा लगता है कि इस विषय पर राय बहुत जंगली रूप से भिन्न होती है। मेरी शुरुआती अशिक्षित राय यह थी कि टीडीडी लग रहा था कि यह सभी गेम तर्क के लिए बहुत अच्छा काम करेगा। मैंने खुद को सोचा कि वीडियो आउटपुट और ध्वनि से निपटने वाली किसी भी चीज को कक्षाओं में समझा जाएगा जिसे दृष्टि से परीक्षण किया जाएगा।
चीजें अच्छी तरह से शुरू हुईं। लक्ष्य 2 डी स्पेस फ्लाइट गेम (देखभाल करने वालों के लिए क्षुद्रग्रह) बनाना था। मैंने जहाज वर्ग के लिए यूनिट परीक्षणों की एक श्रृंखला बनाई। प्रारंभिकरण, रोटेशन जैसी चीजों को आसानी से एक श्रृंखला में परीक्षण किया जा सकता है जैसे: GetRotation(), TurnRotateRightOn(), अद्यतन (1), GetRotation(), Expect_NE (रोटेशन 1, रोटेशन 2)। तब मैंने पहली समस्या को मारा।
TDD के मेरे समझ है कि आप परीक्षण लिखना चाहिए आप कैसे लगता है कि तुम वर्ग का उपयोग करना चाहिए है। मैं जहाज को स्थानांतरित करने में सक्षम होना चाहता हूं इसलिए मैंने एक वर्ग लिखा जो मूल रूप से कहा गया था। GetCoordinates(), ThrustOn(), अद्यतन (1), GetCoordinates()। यह सुनिश्चित करने के लिए ठीक था कि जहाज कहीं स्थानांतरित हो गया। हालांकि, मुझे जल्दी से एहसास हुआ कि मुझे यह सुनिश्चित करना था कि जहाज सही दिशा में और सही गति से आगे बढ़ रहा था। इसके बाद 75 लाइन यूनिट टेस्ट था जहां मुझे मूल रूप से रोटेशन शुरू करना था, निर्देशांक की जांच करना, जोर देना शुरू करना, जहाज को अपडेट करना, नए निर्देशांक प्राप्त करना, नया घूर्णन जांचना था। और भी, मैं खेल में जहाज की गति को कभी भी प्राप्त करने की आवश्यकता नहीं देख सकता (केवल निर्देशांक, जहाज खुद को अपडेट करना चाहिए)। इस वजह से मुझे वेग प्राप्त करने का कोई सीधा तरीका नहीं था। इसलिए परीक्षण को मूल रूप से यह कहना था कि वेग क्या होना चाहिए था, इसलिए मैं यह सुनिश्चित कर सकता था कि यह अपडेट के बाद मुझे कौन से निर्देशांक प्राप्त हो रहा था। यह सब बहुत गन्दा था, और बहुत समय लेने वाला था, लेकिन काम किया। परीक्षण, विफल परीक्षण पास, आदि
जब तक बाद में जब मुझे एहसास हुआ कि मैं एक सार "अभिनेता" वर्ग में जहाज के अद्यतन कोड refactor करना चाहता था यह ठीक था। मुझे एहसास हुआ कि अभिनेता के प्रत्येक उप-वर्ग को एक नई स्थिति की सही गणना करने में सक्षम होने की आवश्यकता होगी, न कि प्रत्येक सबक्लास अपने वेग को उसी तरह अद्यतन करेगा (कुछ टकराव, कुछ नहीं, कुछ स्थिर वेग हैं)। अब, मुझे मूल रूप से उस विशाल और बड़े पैमाने पर परीक्षण कोड को डुप्लिकेट करने और बदलने की संभावना का सामना करना पड़ रहा है और मैं मदद नहीं कर सकता लेकिन सोचता हूं कि एक बेहतर तरीका होना चाहिए।
किसी इकाई परीक्षण के साथ कामकाज की जटिल ब्लैक बॉक्स प्रकार की इस तरह निपटने में किसी भी अनुभव है? ऐसा लगता है कि मुझे मूल रूप से परीक्षण में सटीक वही भौतिकी कोड लिखना है, इसलिए मुझे पता है कि परिणाम क्या होना चाहिए। ऐसा लगता है कि वास्तव में खुद को पराजित कर रहा है, और मुझे यकीन है कि मैं इस तरह से कहीं भी इस बिंदु को याद कर रहा हूं। मैं किसी भी मदद या सलाह की सराहना करता हूं कि कोई भी पेशकश कर सकता है।
क्या यह सवाल gamedev एसई से संबंधित नहीं है? वे शायद इसे बेहतर जवाब दे सकते हैं। – Spoike
मुझे gamedev एसई के बारे में पता नहीं था! मैं भविष्य में इसी तरह के प्रश्न पूछूंगा। धन्यवाद! – Landon