विषयसूची:

प्रोग्राम योर ओन 2048 गेम डब्ल्यू/जावा!: 8 कदम
प्रोग्राम योर ओन 2048 गेम डब्ल्यू/जावा!: 8 कदम

वीडियो: प्रोग्राम योर ओन 2048 गेम डब्ल्यू/जावा!: 8 कदम

वीडियो: प्रोग्राम योर ओन 2048 गेम डब्ल्यू/जावा!: 8 कदम
वीडियो: How to create your own 2048 game in C++ 2024, नवंबर
Anonim

PranP1My (अपूर्ण) SiteFollow द्वारा लेखक द्वारा अधिक:

बचाए गए पीसी पार्ट्स से Arduino सीएनसी मशीन
बचाए गए पीसी पार्ट्स से Arduino सीएनसी मशीन
बचाए गए पीसी पार्ट्स से Arduino सीएनसी मशीन
बचाए गए पीसी पार्ट्स से Arduino सीएनसी मशीन
DIY आधुनिक लकड़ी के बेंच
DIY आधुनिक लकड़ी के बेंच
DIY आधुनिक लकड़ी के बेंच
DIY आधुनिक लकड़ी के बेंच
कॉन्टैक्टलेस डोर ओपनर (vSTEM)
कॉन्टैक्टलेस डोर ओपनर (vSTEM)
कॉन्टैक्टलेस डोर ओपनर (vSTEM)
कॉन्टैक्टलेस डोर ओपनर (vSTEM)

मुझे खेल २०४८ पसंद है। और इसलिए मैंने अपने संस्करण को प्रोग्राम करने का फैसला किया।

यह वास्तविक खेल के समान ही है, लेकिन इसे स्वयं प्रोग्रामिंग करने से मुझे जो कुछ भी मैं चाहता हूं उसे बदलने की स्वतंत्रता देता है। अगर मुझे सामान्य 4x4 के बजाय 5x5 गेम चाहिए, तो 'बोर्ड' कंस्ट्रक्टर का उपयोग करके एक साधारण बदलाव मुझे ऐसा करने की अनुमति देगा। मान लें कि मैं खेल को और अधिक कठिन बनाना चाहता हूं, ऐसे पदों पर टुकड़े जोड़ना जो इसे यादृच्छिक के बजाय खिलाड़ी के लिए सबसे जटिल बना देगा। एक साधारण एल्गोरिदम का उपयोग करके, मैं बस यही कर सकता हूं। हालांकि मैं इन सभी संशोधनों को इस निर्देश में शामिल नहीं करूंगा, लेकिन जैसे ही मैं जाता हूं, मैं और अधिक जोड़ने की योजना बनाता हूं।

हालांकि, अभी के लिए, हम आपके 2048 के विशिष्ट गेम को प्रोग्राम करेंगे।

आएँ शुरू करें!

(एक साइड नोट: इस निर्देशयोग्य को प्रोग्रामिंग के मध्यम ज्ञान की आवश्यकता है - विशेष रूप से जावा के साथ)

चरण 1: सामग्री

सामग्री
सामग्री

आपको इस परियोजना के लिए अधिक आवश्यकता नहीं होगी क्योंकि यह केवल एक प्रोग्रामिंग पूर्वाभ्यास है।

सामग्री:

  • लैपटॉप
  • ग्रहण (या अपनी पसंद का कोई भी आईडीई)

हाँ। बस, इतना ही।

चरण 2: कार्यक्रम को जानें - बोर्ड

मैंने अपना सारा कोड GitHub पर अपलोड कर दिया है - इसे यहां देखें:

मैंने खेल को 3 वर्गों में विभाजित किया: बोर्ड, टाइल और खेल।

तख़्ता:

विवरण: बोर्ड वर्ग गेमबोर्ड से संबंधित है, 'टाइल' तत्वों की एक सरणी स्थापित करता है, वर्तमान स्कोर और उच्चतम टाइल प्राप्त करता है, और सरणी को एक स्ट्रिंग में डालता है (बाद में 'गेम' में उपयोग करने के लिए)। अधिकांश तर्क यहां भी हैं, कक्षा 2 और 4 को यादृच्छिक स्थानों पर, ऊपर, नीचे, बाएँ और दाएँ घुमाने के तरीके प्रदान करती है, और खिलाड़ियों को यह बताती है कि खेल कब समाप्त हो गया है।

निर्माता:

/* बोर्ड के लिए डिफ़ॉल्ट कंस्ट्रक्टर - एक 4x4 मैट्रिक्स सेट करता है */

सार्वजनिक बोर्ड () {…}

/* बोर्ड के लिए कंस्ट्रक्टर - निर्दिष्ट ग्रिड आकार के साथ एक मैट्रिक्स सेट करता है */

सार्वजनिक बोर्ड (इंट ग्रिड) {…}

तरीके:

/* गेट्टर विधि जो बोर्ड लौटाती है */

सार्वजनिक टाइल गेटबोर्ड () {…}

/* गेट्टर विधि जो स्कोर लौटाती है */

पब्लिक इंट गेटस्कोर () {…}

/* बोर्ड पर उच्चतम टाइल ढूँढता है और उसे लौटाता है */

सार्वजनिक int getHighTile () {…}

/* बोर्ड को कंसोल पर प्रिंट करता है - परीक्षण उद्देश्यों के लिए */

सार्वजनिक शून्य प्रिंट () {…}

/* बोर्ड को एक स्ट्रिंग के रूप में लौटाता है - GUI में प्रयुक्त */

सार्वजनिक स्ट्रिंग टूस्ट्रिंग () {…}

/* एक खाली जगह पर एक 2 (या 4) पैदा करता है जब एक चाल चलती है */

सार्वजनिक शून्य स्पॉन () {…}

/* यह देखने के लिए जांच करता है कि क्या बोर्ड पूरी तरह से ब्लैक आउट हो गया है और यदि ऐसा है, तो यह खिलाड़ियों को पुनः आरंभ करने के लिए प्रेरित करेगा */

सार्वजनिक बूलियन ब्लैकऑट () {…}

/* यह देखने के लिए जांच करता है कि क्या खेल खत्म हो गया है - जब बोर्ड को काला कर दिया जाता है और कोई भी टाइल गठबंधन नहीं कर सकती है */

सार्वजनिक बूलियन गेमओवर () {…}

/* जब 'w' या अप एरो को दबाया जाता है तो कॉल किया जाता है - 'अप' पैरामीटर के साथ बोर्ड पर प्रत्येक टाइल के लिए 'वर्टिकलमूव' को कॉल करता है */

सार्वजनिक शून्य () {…}

/* कॉल किया जाता है जब 's' या डाउन एरो दबाया जाता है - बोर्ड पर प्रत्येक टाइल के लिए 'verticalMove' को पैरामीटर 'डाउन' के साथ कॉल करता है */public void down() {…}

/* जब 'डी' या दायां तीर दबाया जाता है तो कॉल किया जाता है - बोर्ड पर प्रत्येक टाइल के लिए 'क्षैतिज मूव' को पैरामीटर 'दाएं' के साथ कॉल करता है */सार्वजनिक शून्य दाएं() {…}

/* जब 'ए' या बायां तीर दबाया जाता है तो कॉल किया जाता है - बोर्ड पर प्रत्येक टाइल के लिए पैरामीटर 'बाएं' के साथ 'क्षैतिज मूव' कॉल करता है */

सार्वजनिक शून्य छोड़ दिया () {…}

/* दो टाइलों के मूल्यों की एक साथ तुलना करता है और यदि वे समान हैं या यदि एक 0 (सादे टाइल) के बराबर है - तो उनके मान जोड़े जाते हैं (बशर्ते कि हम जिन टाइलों की तुलना कर रहे हैं वे दो अलग-अलग टाइलें हैं और वे उपयुक्त दिशा की ओर बढ़ रही हैं) - पंक्ति के माध्यम से पुनरावर्ती रूप से चलता है */

सार्वजनिक शून्य क्षैतिजमोव (इंट पंक्ति, इंट कॉल, स्ट्रिंग दिशा) {…}

/* दो टाइलों के मूल्यों की एक साथ तुलना करता है और यदि वे समान हैं या यदि एक 0 (सादे टाइल) के बराबर है - तो उनके मान जोड़े जाते हैं (बशर्ते कि हम जिन टाइलों की तुलना कर रहे हैं वे दो अलग-अलग टाइलें हैं और वे उपयुक्त दिशा की ओर बढ़ रही हैं) - कॉलम के माध्यम से पुनरावर्ती रूप से चलता है */

सार्वजनिक शून्य लंबवतमोव (इंट पंक्ति, इंट कॉल, स्ट्रिंग दिशा) {…}

हाँ, यह बहुत सारी विधियाँ हैं - लेकिन चिंता न करें, अधिकांश को समझना बेहद आसान है। उसके ऊपर, 'बोर्ड' वर्ग सबसे जटिल है, इसलिए इसके बाद सब कुछ अपेक्षाकृत सरल होगा।

चरण 3: कार्यक्रम को जानें - टाइल

टाइल:

विवरण: टाइल वर्ग व्यक्तिगत टाइलों से संबंधित है, और सभी वर्गों में सबसे छोटा है। प्रत्येक टाइल का एक पूर्णांक मान और एक रंग होता है। इसके दो कंस्ट्रक्टर हैं जो 0 (डिफ़ॉल्ट) या मान # की टाइलें बनाते हैं। विधियाँ अधिकतर स्व-व्याख्यात्मक हैं, जिसमें 'गेट्टर' और 'सेटर' विधियाँ कुल का एक बड़ा हिस्सा बनाती हैं।

निर्माता:

/* 0 */ के मान के साथ एक मूल टाइल का निर्माण करता है

सार्वजनिक टाइल () {…}

/* संख्या के मान वाली टाइल का निर्माण करता है */

सार्वजनिक टाइल (इंट नंबर) {…}

तरीके:

/* टाइल का मान प्राप्त करता है */

सार्वजनिक int getValue () {…}

/* टाइल का मान सेट करता है - दो टाइलों को एक साथ जोड़ते समय उपयोग किया जाता है */

सार्वजनिक शून्य सेटवैल्यू (इंट वैल्यू) {…}

/* एक स्ट्रिंग के रूप में टाइल का प्रतिनिधित्व करता है - GUI में उपयोग किया जाता है */

सार्वजनिक स्ट्रिंग टूस्ट्रिंग () {…}

/* टाइल के रंग को उसके मान के आधार पर सेट करता है */

सार्वजनिक शून्य सेटकलर () {…}

/* टाइल का रंग प्राप्त करता है */

सार्वजनिक शून्य getColor () {…}

चरण 4: कार्यक्रम को जानें - गेम

खेल

विवरण: गेम क्लास में मुख्य विधि, अधिकांश GUI विधियाँ और प्रमुख इंटरैक्शन हैं। यह टाइल और बोर्ड दोनों कक्षाओं को लेता है, और उन्हें एक साथ काम करने में सक्षम बनाता है।

निर्माता:

कोई नहीं

तरीके:

/* उपयुक्त आकारों के साथ GUI सेट करता है और एक कुंजी श्रोता जोड़ता है */

सार्वजनिक स्थैतिक शून्य सेटअपजीयूआई () {…}

/* यह देखने के लिए जाँच करता है कि क्या ततैया या तीर कुंजियों को दबाया गया है और उचित क्रियाएँ करता है - JFrame को हर चाल के साथ अद्यतन करता है */

सार्वजनिक शून्य कुंजी दबाया गया (कीइवेंट ई) {…}

/* GUI को स्ट्रिंग्स, बोर्ड, टाइल्स की एक श्रृंखला के साथ पेंट करता है और यह सुनिश्चित करता है कि गेम खत्म होने पर उन्हें फिर से रंग दिया जाए */

सार्वजनिक शून्य पेंट (ग्राफिक्स जी) {…}

/* एक अलग टाइल खींचता है - जिसे पेंट विधि से बुलाया जाता है */

सार्वजनिक शून्य ड्रॉटाइल्स (ग्राफिक्स जी, टाइल टाइल, इंट एक्स, इंट वाई) {…}

/* मुख्य विधि - GUI सेट करती है और खेल शुरू करती है */

सार्वजनिक स्थैतिक शून्य main (String args) {…}

चरण 5: महत्वपूर्ण तरीके - आंदोलन

आंदोलन के तरीकों को समझना सबसे महत्वपूर्ण है, लेकिन अच्छी खबर यह है कि एक बार जब आप ऊर्ध्वाधर आंदोलनों को समझ लेते हैं, तो आप उस समझ को क्षैतिज आंदोलनों पर लागू कर सकते हैं। वास्तव में, तीन लंबवत आंदोलन विधियां तीन क्षैतिज विधि आंदोलनों के समान ही होती हैं, सिवाय एक पंक्तियों के पार और दूसरी स्तंभों के पार। इस कारण से, आइए केवल ऊर्ध्वाधर गति विधियों पर ध्यान दें।

निजी शून्य लंबवत मूव (इंट पंक्ति, इंट कॉल, स्ट्रिंग दिशा)

{टाइल का प्रारंभिक = बोर्ड [बॉर्डर] [कर्नल]; टाइल तुलना = बोर्ड [पंक्ति] [कॉल]; अगर (initial.getValue() == 0 || Initial.getValue() == तुलना.getValue ()) { अगर (पंक्ति> बॉर्डर || (दिशा। बराबर ("नीचे") && (पंक्ति < बॉर्डर))) {इंट एडस्कोर = इनिशियल.गेटवैल्यू () + तुलना.गेटवैल्यू (); अगर (initial.getValue() != 0) {स्कोर += एडस्कोर; } प्रारंभिक.सेटवैल्यू (ऐडस्कोर); तुलना.सेटवैल्यू (0); } } और { अगर (दिशा। बराबर ("नीचे")) { सीमा--; } और { सीमा++; } लंबवत मूव (पंक्ति, कर्नल, दिशा); } }

उपरोक्त विधि, लंबवत मूव, को 'अप' और 'डाउन' विधियों द्वारा बुलाया जाता है। आइए 'अप' विधि पर एक नजर डालते हैं।

सार्वजनिक शून्य ()

{के लिए (int i = 0; i <ग्रिड; i++) {बॉर्डर = 0; के लिए (इंट जे = 0; जे <ग्रिड; जे ++) {अगर (बोर्ड [जे] । गेटवैल्यू ()! = 0) {अगर (बॉर्डर <= जे) {वर्टिकलमूव (जे, आई, "अप"); } } } } }

यह विधि पूरे बोर्ड के माध्यम से जाती है और "अप" पैरामीटर के साथ प्रत्येक टाइल के लिए वर्टिकलमूव को कॉल करती है। वर्टिकलमूव तब स्थिति 'j' और 'i' पर टाइल की तुलना 'बॉर्डर' और 'i' स्थिति पर टाइल से करता है। यदि दोनों समान हैं, तो वे संयुक्त हैं। यदि वे नहीं हैं, तो बॉर्डर टाइल 1 से बढ़ जाती है (जैसा कि पैरामीटर 'ऊपर' है), और वर्टिकलमूव को फिर से कहा जाता है।

सिफारिश की: