मैं एक साधारण ब्लॉक-आधारित पहेली गेम पर काम कर रहा हूं।
खेल खेल में खेल क्षेत्र के चारों ओर बहुत सारे ब्लॉक होते हैं, इसलिए यह एक तुच्छ भौतिकी सिमुलेशन है। मेरा कार्यान्वयन, हालांकि, आदर्श से दूर मेरी राय में है और मैं सोच रहा हूं कि क्या आप मुझे इसे बेहतर करने के लिए कोई संकेत दे सकते हैं।
मैंने कोड को दो क्षेत्रों में विभाजित किया है: गेम लॉजिक और UI, जैसा कि मैंने बहुत सारे पहेली गेमों के साथ किया है:
- खेल तर्क खेल के सामान्य नियमों (जैसे शतरंज में औपचारिक नियम प्रणाली) के लिए जिम्मेदार है
- यूआई खेल क्षेत्र और टुकड़ों (जैसे शतरंज बोर्ड और टुकड़े) को प्रदर्शित करता है और एनिमेशन के लिए ज़िम्मेदार है (उदाहरण के लिए शतरंज के टुकड़ों का एनिमेटेड आंदोलन)
खेल तर्क एक तार्किक ग्रिड के रूप में खेल राज्य का प्रतिनिधित्व करता है, जहां प्रत्येक इकाई ग्रिड पर एक सेल की चौड़ाई / ऊंचाई है। चौड़ाई 6 के ग्रिड के लिए, आप चौड़ाई के एक ब्लॉक को 2 चार बार घुमा सकते हैं जब तक कि यह सीमा से टकरा न जाए।
यूआई इस ग्रिड को लेता है, और तार्किक आकारों को पिक्सेल आकारों में परिवर्तित करके खींचता है (अर्थात, इसे स्थिर करके गुणा करता है)। हालाँकि, चूंकि गेम में शायद ही कोई गेम लॉजिक है, मेरे गेम लॉजिक लेयर [1] में टक्कर का पता लगाने के अलावा बहुत कुछ नहीं है। यहां देखिए यह कैसे काम करता है:
- खिलाड़ी एक टुकड़ा खींचना शुरू कर देता है
- यूआई उस टुकड़े के कानूनी आंदोलन क्षेत्र के लिए खेल तर्क पूछता है और खिलाड़ी को उस क्षेत्र के भीतर खींचने देता है
- खिलाड़ी एक टुकड़ा जाने देता है
- UI टुकड़ा को ग्रिड पर भेजता है (ताकि यह एक वैध तार्किक स्थिति में हो)
- यूआई गेम लॉजिक को नई तार्किक स्थिति बताता है (उत्परिवर्ती तरीकों के माध्यम से, जिससे मैं बचूंगा)
मैं इससे बहुत खुश नहीं हूँ:
- मैं अपने गेम लॉजिक लेयर के लिए यूनिट टेस्ट लिख रहा हूं, लेकिन यूआई नहीं, और यह यूआई में सभी पेचीदा कोड है: टुकड़े को दूसरों या सीमा से टकराने से रोकना और इसे ग्रिड पर स्नैप करना।
- मुझे यह पसंद नहीं है कि यूआई नए राज्य के बारे में गेम लॉजिक बताता है, बल्कि मैं इसे
movePieceLeft()
अपने अन्य गेम की तरह एक विधि या ऐसा कुछ कहूंगा , लेकिन मैं उस दृष्टिकोण से दूर नहीं हुआ, क्योंकि गेम तर्क यूआई में संभव है कि खींच और तड़क के बारे में कुछ भी नहीं जानता है।
मुझे लगता है कि मेरे खेल तर्क परत से छुटकारा पाने और इसके बजाय भौतिकी परत को लागू करने के लिए सबसे अच्छी बात होगी। मुझे उससे संबंधित कुछ प्रश्न मिले हैं:
- क्या इस तरह की भौतिकी परत आम है, या खेल तर्क परत ऐसा करने के लिए यह अधिक विशिष्ट है?
- ग्रिड और पीस ड्रैगिंग कोड के लिए स्नैपिंग UI या भौतिकी परत से संबंधित होगा?
- क्या ऐसी भौतिकी परत आमतौर पर पिक्सेल आकार या किसी प्रकार की तार्किक इकाई के साथ काम करती है, जैसे कि मेरा गेम लॉजिक परत?
- मैंने एक गेम के कोड बेस में इवेंट-आधारित टकराव का पता लगा लिया है, यानी खिलाड़ी सिर्फ टुकड़ा खींचेगा, यूआई उस आज्ञाकारी को प्रस्तुत करेगा और भौतिकी प्रणाली को सूचित करेगा, और भौतिकी प्रणाली ऑनकॉलिशन () विधि को कॉल करेगी। एक बार टक्कर का पता लगने पर टुकड़े पर। क्या अधिक आम है? यह दृष्टिकोण या पहले कानूनी आंदोलन क्षेत्र के लिए पूछना?
[१] परत का मतलब शायद मेरे लिए सही शब्द नहीं है, लेकिन सबसिस्टम लगता है कि ओवरब्लाउन है और क्लास गुमराह कर रही है, क्योंकि प्रत्येक परत में कई कक्षाएं शामिल हो सकती हैं।