जब आप घटनाओं का उपयोग किये बिना गेम लिखते हैं ... आप वास्तव में इसे स्वयं क्रियाओं को लागू कर रहे हैं। यह फायदेमंद है, क्योंकि आप अपनी भाषा की अंतर्निहित घटनाओं का उपयोग करके इसे और अधिक कुशल बना सकते हैं। यदि आप जानते हैं कि आप क्या कर रहे हैं तो इस तरह से लिखे गए गेम कम त्रुटि प्रवण हैं।
उदाहरण के लिए, जब मैं अपने भाई को सिखाने की कोशिश कर रहा था कि गेम कैसे लिखे गए हैं, मैंने उनके लिए एक सरल सांप गेम लिखा था। मेरे पास धागे में मुख्य पाश था, सांप को ले जाएं और इसे चक्र में अपनी नई स्थिति पर खींचें। मेरे पास एक ही समय में एक थ्रेड चल रहा होगा जो लगातार 4 चीजों की जांच करता है:
1) यदि सांप अपने आप में दुर्घटनाग्रस्त हो जाता है (गेम ओवर); यदि खेल खत्म होता है, तो मुख्य थ्रेड को रोकें जो सांप की मुख्य स्थिति को अद्यतन करता है, स्क्रीन पर गेम प्रिंट करें, कुंजी इनपुट का इंतजार करें, फिर गेम को पुनरारंभ करें।
2) यदि सांप ने एक सेब खा लिया था; काउंटर वेरिएबल को बढ़ाएं जो कहता है कि कितने सेब खाए गए हैं, और स्क्रीन पर इस नए मूल्य को प्रिंट करें, पहले से क्या लिख रहा था।
3) यदि सांप 10 से विभाज्य सेब की राशि खाया था (साँप 1 सेल द्वारा बढ़ता है, एक प्रतीक्षा चर का कहना है कि कितना समय प्रत्येक आंदोलन साँप बनाता है)
4) के बीच पास करना चाहिए से घटाना यदि एक तीर कुंजी दबा दी गई है। यदि छोड़ा गया है, तो 0 पर स्थानांतरित करें, यदि दाएं सेट को 1 पर ले जाएं, तो डाउन सेट 2 पर ले जाएं, अगर सेट 3 पर ले जाएं। जिस int में यह संग्रहीत है वह 4 प्रतिनिधिों की एक सरणी के लिए सूचक है जो सांप को स्थानांतरित करते हैं सही दिशा में।
सांप की स्थिति को अद्यतन करने वाला मुख्य लूप यह बताएगा कि सांप क्या कर रहा है, इन 4 चीजों की जांच थ्रेड को बताएगा। जिस तरह से मैं यह करता हूं कि मेरे पास स्क्रीन पर हर सेल है कि सांप का सिर प्रतिनिधियों के 2-आयामी सरणी को संदर्भित करता है। प्रतिनिधियों के इस सरणी के बारे में:
गेम कंसोल मोड में लिखा गया है, और कंसोल रंगों का उपयोग करता है। कंसोल 80x50 वर्णों पर सेट है। निम्नानुसार एक प्रतिनिधि: "प्रतिनिधि शून्य पीआरटी()"; तो मैं सरणी बना देता हूं: "पीआरटी [,] pos = new ptr [80,50]"। कहें कि सांप का सिर स्क्रीन पर स्थिति (4,5) पर है, वहां जाने के बाद मुख्य लूप "pos [4,5] .vvoke();" निष्पादित करेगा।
उनमें से एक: जब सांप एक नई स्थिति में जाता है, तो मुख्य लूप थ्रेड स्क्रीन पर सांप को कवर करने वाले प्रत्येक सेल को प्राप्त करेगा, और उस स्थिति में प्रतिनिधि को "शून्य गेमओवर" नामक फ़ंक्शन को इंगित करने के लिए सेट करेगा।() "जो gameover_ चर को सत्य पर सेट करेगा। तो जब लूप थ्रेड गेम गेम के लिए गेम चेक की स्थिति की जांच करता है, तो यह गेम को फ्रीज करता है और स्क्रीन पर गेम प्रिंट करता है।
अन्य: जब स्क्रीन पर एक सेब खींचा जाता है, तो प्रतिनिधि स्थिति (जिसे यादृच्छिक है) पर खींचा जाता है, "शून्य वृद्धिशील_एपल()" को इंगित करने के लिए सेट किया जाता है जो सेब काउंटर को बढ़ाता है, वर्तमान सेब को हटा देता है देखें, और स्क्रीन पर एक नया सेब खींचता है, पुरानी सेब स्थिति को "शून्य शून्य()" पर इंगित करने के लिए सेट करता है जो कुछ भी नहीं करता है, और नई सेब स्थिति "void increment_apple()" को इंगित करने के लिए।
यह मूल रूप से गेम कैसे काम करता है। जैसा कि आप देख सकते हैं, सांप स्क्रीन पर इन पदों पर चलता है, और यह "अगर (snake_position == some_position)" जैसी कोई स्पष्ट जांच किए बिना, गेम स्वचालित रूप से गेम में होने वाली हर चीज के लिए जो कुछ भी माना जाता है, वह करता है, जब आप किसी फॉर्म पर किसी बटन पर क्लिक करते हैं, तो उस ईवेंट को असाइन की गई कार्रवाई स्वचालित रूप से निष्पादित की जाती है, बिना किसी ईवेंट को जांचने के।
तो आप देखते हैं, मैं एक फॉर्म और डिफ़ॉल्ट घटनाओं का उपयोग कर सकता था जो सी # प्रदान करता है, लेकिन मैंने नहीं किया। मैंने कंसोल इंटरफ़ेस का उपयोग किया, और अपनी खुद की घटना प्रणाली लागू की।
इस तरह यह दृश्यों के पीछे काम करता है: आपके फॉर्म ऐप के लिए मुख्य लूप एक थ्रेड में चलाएगा जो स्क्रीन पर सभी बटनों से इनपुट के लिए जांच करता है। इनमें से प्रत्येक आइटम एक बुलियन वैरिएबल सेट करेगा जो वे सच में उपयोग करते हैं। जब आप इस बटन पर क्लिक करते हैं, तो एक लूप चलाने वाला एक और थ्रेड जो आपने दबाया है, जांचता है, और कहता है कि आपने "बटन 1" नामक एक बटन दबाया है, उस बटन को एक प्रतिनिधि सौंपा गया होगा; तब उस प्रतिनिधि को जो कुछ भी इंगित करता है उसके साथ निष्पादित किया जाता है।
समझाने के लिए कड़ी मेहनत की, लेकिन क्या यह आपको समझ में आता है?
** कंसोल ** एप्लिकेशन सामान्य रूप से माउस से इंटरैक्ट नहीं करते हैं और न ही उनके पास पिक्सेल समन्वय प्रणालियों के बारे में कई परवाह है। जबकि मुझे यकीन है कि आप जवाबों का एक गुच्छा प्राप्त करने वाले हैं, यह बताते हुए कि माउस को कैप्चर करना है और क्या नहीं, मुझे लगता है कि आप बेहतर कदम उठाएं और फिर से विचार करें कि आप क्या कर रहे हैं। –
टिप्पणी के लिए बहुत धन्यवाद, लेकिन मैं सी # कंसोल ऐप्स के बारे में जितना सीख सकता हूं उतना सीख रहा हूं। लगभग 3 महीनों में, मैं संतुष्ट हो जाऊंगा, और रूपों, और अंततः नई भाषाओं में आगे बढ़ूंगा। मैंने आपके ब्लॉग का हिस्सा पढ़ा है, और सीखने पर आपके विचारों की सराहना करते हैं कि कौन सी भाषाएं पहले हैं। कुछ ऐसा करने के लिए भाषा प्राप्त करना सामान्य रूप से कुछ मामलों में चुनौती का हिस्सा नहीं है। – Bloodyaugust