टाइलें क्या हैं? खेलों में टाइल किए गए ग्राफिक्स। साधारण टाइलों से प्रक्रियात्मक दुनिया

इस लेख में, मैं आपको सिखाऊंगा कि लगभग किसी भी शैली के लिए स्तर कैसे बनाएं और उनके विकास को बहुत आसान बनाएं। हम एक टाइल मैप इंजन बनाएंगे जिसका उपयोग आप अपनी परियोजनाओं में कर सकते हैं। हम Haxe और OpenFL का उपयोग करेंगे, लेकिन निर्माण प्रक्रिया कई भाषाओं के लिए समान है।

लेख में क्या वर्णित किया जाएगा इसके बारे में थोड़ा

  • टाइल आधारित खेल क्या है?
  • अपनी खुद की टाइलें बनाएं या खोजें
  • स्तर प्रदर्शित करने के लिए कोड लिखना
  • संपादन स्तर

टाइल आधारित खेल क्या है?

बेशक, आप विकिपीडिया में टाइल ग्राफिक्स की परिभाषा पा सकते हैं, लेकिन यह समझने के लिए कि यह क्या है, कुछ चीजें सीखने के लिए पर्याप्त है।
  • टाइल - एक छोटी छवि, आमतौर पर आकार में आयताकार, जो बड़ी छवियों का निर्माण करते समय एक पहेली टुकड़े के रूप में कार्य करती है
  • नक्शा - टाइल्स का एक समूह एक साथ जुड़ गया
  • टाइल-आधारित से तात्पर्य है कि हम खेलों में स्तर कैसे बनाते हैं। कोड टाइलों को पूर्वनिर्धारित स्थानों पर रखता है
हमारे लेख में, टाइलों का एक आयताकार आकार होगा। टाइल ग्राफिक्स का उपयोग करते समय आपको कुछ अच्छी चीजें मिलती हैं। सबसे अच्छी बात यह है कि प्रत्येक स्तर के लिए विशाल चित्र बनाने की कोई आवश्यकता नहीं है। 50-स्तरीय गेम के लिए 1280x768px के रिज़ॉल्यूशन वाली पचास छवियों बनाम सैकड़ों टाइलों वाली एक छवि में बहुत अंतर होता है। एक और फायदा यह है कि टाइल वाले ग्राफिक्स का उपयोग करके वस्तुओं को रखना काफी आसान हो जाता है।

टाइलें बनाएं या खोजें

इंजन बनाने के लिए सबसे पहले आपको टाइलों का एक सेट चाहिए। आपके पास दो विकल्प हैं: पूर्व-निर्मित टाइलों का उपयोग करें या अपना स्वयं का बनाएं। यदि आप तैयार छवि का उपयोग करने का निर्णय लेते हैं, तो वे पूरे इंटरनेट पर आसानी से मिल सकते हैं। नकारात्मक पक्ष यह है कि ये ग्राफिक्स विशेष रूप से आपके गेम के लिए नहीं बनाए गए थे। वहीं, अगर आप सिर्फ एक्सपेरिमेंट कर रहे हैं तो यह विकल्प ठीक है।

मुझे लगता है कि टाइल खोजने में कोई समस्या नहीं होनी चाहिए, इसलिए मैं इस पर विस्तार से ध्यान नहीं दूंगा।

टाइल्स बनाना
आपकी छवियों को बनाना आसान बनाने के लिए वहां कई बेहतरीन टूल हैं। कई डेवलपर अपने काम के लिए इन टूल्स का इस्तेमाल करते हैं।

पिक्सेल कला बनाने के लिए ये सबसे लोकप्रिय उपकरण हैं। अगर आपको कुछ अधिक शक्तिशाली चाहिए, तो GIMP एकदम सही है।

एक बार जब आप एक प्रोग्राम चुन लेते हैं, तो आप अपनी खुद की टाइलों के साथ प्रयोग करना शुरू कर सकते हैं। चूंकि यह लेख आपको दिखाएगा कि अपना खुद का टाइल ग्राफिक्स इंजन कैसे बनाया जाए, मैं खुद टाइलों पर नहीं रहूंगा।

कोडन

जब हमारे पास वह सब कुछ होता है जिसकी हमें आवश्यकता होती है, तो हम सीधे प्रोग्रामिंग में ही गोता लगा सकते हैं।
प्रति स्क्रीन एक टाइल प्रदर्शित करें
आइए सबसे सरल कार्य से शुरू करें, स्क्रीन पर एक टाइल प्रदर्शित करना। सुनिश्चित करें कि आपकी सभी छवियां समान आकार की हैं और अलग-अलग फ़ाइलों में सहेजी गई हैं (हम बाद में एक फ़ाइल में स्प्राइट को संग्रहीत करने के बारे में बात करेंगे)।

एक बार जब आपकी सभी टाइलें प्रोजेक्ट एसेट फ़ोल्डर में हों, तो आप एक साधारण टाइल क्लास लिख सकते हैं। यहाँ हैक्स पर एक उदाहरण दिया गया है
फ्लैश आयात करें। डिस्प्ले। स्प्राइट; फ्लैश आयात करें। डिस्प्ले। बिटमैप; ओपनएफएल.एसेट्स आयात करें; क्लास टाइल स्प्राइट का विस्तार करती है (निजी संस्करण छवि: बिटमैप; सार्वजनिक कार्य नया () (सुपर (); छवि = नया बिटमैप (Assets.getBitmapData ("संपत्ति / ग्रासलेफ्टब्लॉक.पीएनजी")); AddChild (छवि);))
अब, हम केवल स्क्रीन पर एक टाइल लगाते हैं। केवल एक चीज जो वर्ग करता है वह है छवि को संपत्ति फ़ोल्डर से आयात करना और इसे एक बच्चे के रूप में जोड़ना। यह कक्षा कैसी दिखेगी यह इस बात पर निर्भर करता है कि आप किस प्रोग्रामिंग भाषा का उपयोग कर रहे हैं।

अब जब हमारे पास एक टाइल वर्ग है, तो हमें टाइल को तुरंत चालू करना होगा और इसे अपने मुख्य वर्ग में जोड़ना होगा।
फ्लैश आयात करें। डिस्प्ले। स्प्राइट; फ्लैश आयात करें।इवेंट।इवेंट; फ्लैश आयात करें। लिब; क्लास मेन स्प्राइट (सार्वजनिक फ़ंक्शन नया () (सुपर (); var टाइल = नई टाइल (); ऐडचाइल्ड (टाइल);) सार्वजनिक स्थैतिक फ़ंक्शन मुख्य () (Lib.current.addChild (नया मुख्य ());)) बढ़ाता है।
जब कंस्ट्रक्टर को कॉल किया जाता है तो मुख्य वर्ग एक नई टाइल ऑब्जेक्ट बनाता है और इसे डिस्प्ले लिस्ट में जोड़ता है।

जब खेल शुरू होता है, तो मुख्य () फ़ंक्शन को कॉल किया जाएगा और मुख्य प्रकार की एक नई वस्तु को मंच में जोड़ा जाएगा। कृपया ध्यान दें कि आपका नई टाइलेंस्क्रीन के ऊपरी बाएँ कोने में दिखाई देता है।

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

हमारे पास एक विकल्प है: नियमित सरणी या मैट्रिक्स का उपयोग करें। यदि आप मैट्रिक्स से परिचित नहीं हैं, तो बस यह जान लें कि यह एक ऐसा सरणी है जिसमें अधिक सरणियाँ हैं। अधिकांश प्रोग्रामिंग भाषाएं इसे nameOfArray [x] [y] के रूप में दर्शाती हैं।

हम स्क्रीन पर निर्देशांक के रूप में X और Y का उपयोग करते हैं। हो सकता है कि हम इन X और Y का उपयोग अपनी टाइलें प्रदर्शित करने के लिए कर सकें? तो आइए एक नजर डालते हैं मैट्रिक्स पर
निजी वर उदाहरणArr = [,,,,
ध्यान दें कि इस सरणी में शून्य तत्व पांच संख्याओं की एक सरणी है। इसका मतलब है कि आपको पहले y और फिर x मिलता है। यदि आप कोई वस्तु लेने का प्रयास करते हैं, तो आप छठी टाइल तक पहुंच प्राप्त कर लेंगे।

अगर आपको समझ में नहीं आता कि मैट्रिसेस कैसे काम करता है, तो चिंता न करें। इस लेख में, मैं अपने कार्य को सरल बनाने के लिए एक नियमित सरणी का उपयोग करूंगा।
निजी संस्करण उदाहरणArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0];
उदाहरण उपरोक्त दिखाता है कि नियमित सरणी का उपयोग करना बहुत आसान है। हम एक साधारण सूत्र का उपयोग करके निर्देशांक की गणना करके एक विशिष्ट आइटम प्रदर्शित कर सकते हैं।

अब, उस कोड को लिखते हैं जो हमारी सरणी बनाता है। आइए इसे 1 में भरें। नंबर एक का मतलब होगा हमारी पहली टाइल की आईडी।

ऐरे को स्टोर करने के लिए, हमें मेन क्लास के अंदर एक वेरिएबल बनाने की जरूरत है।
निजी वर नक्शा: ऐरे ;
यह थोड़ा अजीब लग सकता है, इसलिए मैं समझाता हूँ।
परिवर्तनीय नाम नक्शा है और प्रकार ऐरे है। इसका मतलब है कि सरणी में संख्याएं हैं।
अब, हमारे मानचित्र को आरंभ करने के लिए हमारी कक्षा के लिए हमारे कंस्ट्रक्टर में कुछ कोड जोड़ें।
नक्शा = नया ऐरे ();
यह स्निपेट एक खाली सरणी बनाता है, जिसे हम शीघ्र ही भरेंगे। लेकिन पहले, आइए गणित में हमारी मदद करने के लिए कुछ चर घोषित करें।
सार्वजनिक स्थिर संस्करण TILE_WIDTH = 60; सार्वजनिक स्थिर संस्करण TILE_HEIGHT = 60; सार्वजनिक स्थिर संस्करण SCREEN_WIDTH = 600; सार्वजनिक स्थिर संस्करण SCREEN_HEIGHT = 360;
हमारे कार्यक्रम में कहीं से भी हमें उन तक पहुंच प्रदान करने के लिए ये चर सार्वजनिक स्थैतिक हैं। आपने देखा होगा कि दिए गए नंबरों के आधार पर, हम तय करेंगे कि ऐरे में कितने सेल स्टोर करने हैं।
var w = Std.int (SCREEN_WIDTH / TILE_WIDTH); वर एच = Std.int (SCREEN_HEIGHT / TILE_HEIGHT); के लिए (i में 0 ... w * h) (मानचित्र [i] = 1)
जैसा कि मैंने कहा, यहां हमने वेरिएबल w के लिए मान 10 और h के लिए 6 सेट किया है। इसके बाद, हमें 10 * 6 नंबरों को फिट करने के लिए सरणी के माध्यम से लूप करना होगा।

अब हमारे पास एक साधारण नक्शा है, लेकिन हमें टाइलों को सही ढंग से व्यवस्थित करने की आवश्यकता है, है ना? ऐसा करने के लिए, आइए टाइल वर्ग पर वापस जाएं और एक फ़ंक्शन बनाएं जो हमें ऐसा करने की अनुमति देता है।
सार्वजनिक समारोह सेटलोक (x: Int, y: Int) (image.x = x * Main.TILE_WIDTH; image.y = y * Main.TILE_HEIGHT;)
जब हम setLoc () फ़ंक्शन को कॉल करते हैं, तो हम x और y निर्देशांक में गुजर रहे होते हैं। फ़ंक्शन इन मानों को लेता है और उन्हें TILE_WIDTH और TILE_HEIGHT से गुणा करके पिक्सेल में निर्देशांक में परिवर्तित करता है

केवल एक चीज जो करना बाकी है, वह है मुख्य वर्ग में मानचित्र पर टाइलें बनाने और उन्हें स्थापित करने की प्रक्रिया का वर्णन करना।
for (i in 0 ... map.length) (var टाइल = new टाइल (); var x = i% w; var y = Math.floor (i / w); टाइल.सेटलोक (x, y); addChild (टाइल);)
हां! सब कुछ सही है। स्क्रीन टाइल्स से भरी हुई है। आइए देखें कि ऊपर क्या हो रहा है

सूत्र
आइए ऊपर बताए गए सूत्र पर चर्चा करें।

हम x की गणना करते हैं, इसे i के शेष भाग को w से भाग देकर निर्धारित करते हैं। यह प्रत्येक पंक्ति की शुरुआत में x मान 0 वापस करने के लिए किया जाता है।

y के लिए हम i/w से तल () लेते हैं।

अंत में, मैं लेवल स्क्रॉलिंग के बारे में कुछ कहना चाहूंगा। आमतौर पर आप ऐसा स्तर नहीं बना पाएंगे जो पूरी तरह से स्क्रीन पर फिट होगा। आपके नक्शे स्क्रीन से काफी बड़े होंगे, इसलिए मानचित्र के उस हिस्से को खींचने की कोई आवश्यकता नहीं है जिसे उपयोगकर्ता नहीं देख पाएगा। इसे उसी गणित का उपयोग करके ठीक किया जा सकता है। आपको गिनना होगा कि कौन सी टाइल स्क्रीन पर दिखाई देगी और कौन सी नहीं।

उदाहरण के लिए: स्क्रीन 500x500 है, और टाइलें 100x100 हैं, और आपकी दुनिया 1000x1000 है। टाइल खींचने से पहले आपको एक साधारण जांच करने की आवश्यकता है।

हमारे लिए जो कुछ बचा है वह विभिन्न प्रकार की टाइलें बनाना और कुछ सुंदर प्रदर्शित करना है।

विभिन्न प्रकार की टाइलें
ठीक है, अब हमारे पास उन्हीं तत्वों से भरा नक्शा है। एक से अधिक प्रकार के तत्व होना अच्छा होगा, जिसका अर्थ है कि हमें अपने कंस्ट्रक्टर को टाइल वर्ग में बदलना होगा।
सार्वजनिक समारोह नया (आईडी: इंट) (सुपर (); स्विच (आईडी) (केस 1: छवि = नया बिटमैप (एसेट्स. getBitmapData ("एसेट / ग्राससेंटरब्लॉक.png")); केस 3: इमेज = नया बिटमैप (Assets.getBitmapData ("एसेट्स / ग्रासराइटब्लॉक.png")); केस 4: इमेज = नया बिटमैप (एसेट। .png ")); केस 5: इमेज = नया बिटमैप (Assets.getBitmapData ("एसेट / ग्लोब.png")); केस 6: इमेज = नया बिटमैप (Assets.getBitmapData ("एसेट / मशरूम.png")); ) AddChild (छवि);)
अब हमारे पास छह विभिन्न प्रकारटाइल्स। मुझे कौन सी छवि प्रदर्शित करनी है यह चुनने के लिए मुझे एक स्विच निर्माण की आवश्यकता है। आपने देखा होगा कि कंस्ट्रक्टर अब एक संख्या को एक पैरामीटर के रूप में लेता है, जो टाइल के प्रकार को इंगित करता है।

आइए मुख्य वर्ग के निर्माता के पास वापस जाएं और हमारे लूप को संपादित करें
के लिए (i 0 में ... map.length) (var टाइल = नई टाइल (मानचित्र [i]); var x = i% w; var y = Math.floor (i / w); टाइल.सेटलोक (x, y); AddChild (टाइल);)
एकमात्र परिवर्तन यह है कि अब हम ब्लॉक प्रकार को कंस्ट्रक्टर को पास करते हैं। यदि आपने इस संपादन के बिना प्रोग्राम को चलाने का प्रयास किया, तो निष्पादन से पहले एक त्रुटि के साथ समाप्त हो जाएगा।

अब सब कुछ ठीक हो गया है, लेकिन आपको नक्शे को यादृच्छिक ब्लॉकों से भरने के बजाय एक डिजाइन के साथ आने की जरूरत है। सबसे पहले, मेन के कंस्ट्रक्टर में लूप को हटा दें जो कि एरे को भर देता है। और फिर अपना नक्शा मैन्युअल रूप से बनाएं
नक्शा = [0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0, 6 , 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3];
यदि आप सरणी को प्रारूपित करते हैं, जैसा कि मैंने किया है, तो आप आसानी से स्तर की अनुमानित उपस्थिति देख सकते हैं। लेकिन कोई भी आपको केवल एक पंक्ति में किसी सरणी को हथियाने के लिए मना नहीं करता है।

जब आप प्रोग्राम शुरू करते हैं, तो आपको कई त्रुटियां दिखाई देंगी। समस्या यह है कि हमारे मानचित्र में एक शून्य ब्लॉक प्रकार है जिसमें कोई छवि नहीं है और हमारी कक्षा को यह नहीं पता कि इसके साथ क्या करना है। आइए इस गलतफहमी को दूर करें
अगर (छवि! = शून्य) addChild (छवि);
यह संक्षिप्त जांच हमें कष्टप्रद नल सूचक त्रुटि से बचाएगी। अंतिम बार संशोधितसेटलोक () फ़ंक्शन को प्रभावित करेगा। हम चर x और y का उपयोग करने का प्रयास कर रहे हैं जिन्हें प्रारंभ नहीं किया गया है
सार्वजनिक समारोह सेटलोक (x: Int, y: Int) (यदि (छवि! = शून्य) (छवि। x = x * Main.TILE_WIDTH; image.y = y * Main.TILE_HEIGHT;))
इन दोनों को धन्यवाद सरल शब्दअब आप खेल शुरू कर सकते हैं और एक साधारण स्तर देख सकते हैं। हम उन टाइलों को देखते हैं जिनकी आईडी 0 खाली जगह है। कुछ पृष्ठभूमि जोड़ें। इसे और अधिक आकर्षक बनाने के लिए।

निष्कर्ष

आपने अभी-अभी एक कहानी-आधारित इंजन बनाया है। अब आप जानते हैं कि टाइल ग्राफिक्स क्या हैं और उनका उपयोग कैसे करें। आपने स्तर बनाना और संपादित करना सीख लिया है। लेकिन यहीं नहीं रुकें, हमारे इंजन में और भी बहुत कुछ सुधार किया जा सकता है। एक टाइल क्या है
आप शायद कल्पना करें कि टाइल क्या है, लेकिन आइए इसे बेहतर तरीके से जानें। टाइल एक निश्चित आकार की तस्वीर की तरह दिखती है। इसके अलावा, इसे इस तरह से खींचा जाता है कि जब अन्य टाइलों के साथ तुलना की जाती है, तो ध्यान देने योग्य "सीम" के बिना एक एकल छवि प्राप्त की जाती है। टाइलों के बारे में सोचना सबसे आसान है क्योंकि टाइलें दीवारों या फर्श को लाइन करने के लिए उपयोग की जाती हैं। सबसे सरल टाइल एक वर्गाकार छवि है, जो लंबवत और क्षैतिज रूप से सममित है (आप इसे चित्रण में देख सकते हैं)। यदि आप इन तस्वीरों को एक साथ रखते हैं, तो आपको टर्फ का एक बड़ा कैनवास मिलता है। और यदि आप परिवर्तन के लिए इस सुरम्य चित्र में एक और प्रकार की टाइल जोड़ते हैं, कहते हैं, एक सड़क का चित्रण, तो आप पहले से ही एक आदिम नक्शा तैयार कर सकते हैं।
आइए अब उन लागतों की गणना करें जो हमें 512x512 कोशिकाओं के आकार के साथ एक नक्शा बनाने के लिए आवश्यक होंगी। मान लीजिए कि टाइल स्वयं 32x32 पिक्सेल आकार की होगी, तो यह 1024 बाइट्स - 1 किलोबाइट मेमोरी पर कब्जा कर लेगी। गणना के बाद, यह पता चला है कि टाइलों की छवियों को संग्रहीत करने के लिए सबसे सरल कार्ड मेमोरी प्लस मेमोरी में लगभग 262 किलोबाइट लेता है। लेकिन अगर हम उसी क्षेत्र को हाथ से खींचते हैं, तो हमें 268 मेगाबाइट (!) तकनीकी प्रगति की वेदी पर रखना होगा। और यह इस तथ्य के बावजूद कि मैंने सादगी के लिए 256 रंग मोड लिया। यह स्पष्ट है कि अब भी हर कंप्यूटर में इतनी मेमोरी नहीं होती है, इसलिए मानचित्रों की टाइल वाली संरचना का उपयोग दो-आयामी के भारी बहुमत और पर्याप्त संख्या में त्रि-आयामी खेलों में किया जाता है। एक साधारण आयताकार टाइल।
आयताकार और वर्गाकार टाइलें पक्षी की दृष्टि का प्रतिनिधित्व करने के लिए अच्छी हैं, लेकिन एक अन्य प्रकार का प्रक्षेपण है जिसे आइसोमेट्रिक कहा जाता है। इसका उपयोग तब किया जाता है जब आपको मात्रा, गहराई, बनावट का बोध कराने की आवश्यकता होती है छद्म 3 डी... इसलिए, आइसोमेट्रिक सिस्टम को कभी-कभी 2.5D कहा जाता है। यहाँ क्या बात है? अब टाइल दर्शक को एक कोण पर देखेगी और, जैसा कि वह अंदर की ओर जा रही थी (चित्रण को देखें)। अनिवार्य रूप से द्वि-आयामी चित्र तीसरे आयाम पर ले जाता है। इस मामले में, वर्ग (टाइल) के आयाम निम्नानुसार निर्धारित किए जाते हैं:
1. लंबाई - छवि में सबसे बाएं बिंदु से सबसे दाएं बिंदु तक।
2. चौड़ाई - "सबसे दूर" से "निकटतम" बिंदु तक दर्शक तक।
3. ऊँचाई - टाइल की "मोटाई"।
आयतन का प्रभाव पैदा करने के लिए, चौड़ाई लंबाई से लगभग आधी होनी चाहिए। इस संबंध के साथ प्रयोग करते हुए, आप वांछित प्रक्षेपण का चयन करते हुए "टाइल्स" को त्रि-आयामी स्थान में घुमाते हैं। इन उद्देश्यों के लिए, 3D स्टूडियो के किसी प्रकार के एनालॉग का उपयोग करना उपयोगी है। वहां एक टाइल बनाएं, उसकी स्थिति चुनें, और फिर पक्षों और परिणामी अनुपातों को मापें।
लेकिन अब कैसे आकर्षित करें सरल आइसोमेट्रिक टाइल। स्क्रीन पर ऐसी टाइल? आखिरकार, सामान्य ड्राइंग फ़ंक्शंस का उपयोग करने के लिए एक आयताकार क्षेत्र दिया जाता है, जिसे वे ठीक करते हैं। मास्क की मदद से इस समस्या का समाधान किया जाता है। चित्रण में, आप देखेंगे कि टाइलों की रूपरेखा सफेद क्षेत्र में गिरती है, और जो पीछे रह जाता है वह काला हो जाता है और एक आयत बनाता है। यह स्टैंसिल सिद्धांत को बदल देता है: छवि को मुखौटा और "कैनवास" पर आरोपित किया जाता है, और केवल वे बिंदु जो इसमें आते हैं सफेद रंग... यहां तक ​​​​कि मानक विंडोज ड्राइंग फ़ंक्शंस को इस तरह का काम करने के लिए प्रशिक्षित किया जाता है, डायरेक्टएक्स फ़ंक्शंस का उल्लेख नहीं करने के लिए। वहीं, मास्क के इस्तेमाल से आप दूसरे असर भी कर सकते हैं। उदाहरण के लिए, आप टाइल की ऊंचाई को छोड़कर केवल उसका हेडर बना सकते हैं। या केवल एक चित्र का उपयोग करके घास के विभिन्न भाग बनाएं। यदि हम एक मुखौटा बनाते हैं, जिसमें पूरी तरह से छेद होते हैं, और इसकी मदद से किसी अन्य प्रकार के पहले से मौजूद टाइल के स्थान पर घास के साथ एक टाइल प्रदर्शित करते हैं, तो हमें एक सतह से दूसरी सतह पर एक सहज संक्रमण मिलेगा। कई मामलों में इसी तरह की तकनीक का उपयोग किया जा सकता है, और "टपका हुआ" मास्क बेतरतीब ढंग से उत्पन्न किया जा सकता है। तब कोई यह अनुमान नहीं लगाएगा कि आपके पास पूर्व-रेंडर किए गए परिदृश्य नहीं हैं। यह एक प्रकार की बहु-पाठ्यचर्या प्राप्त करता है: जब दो परस्पर पारदर्शी छवियों को एक क्षेत्र पर आरोपित किया जाता है। सच है, इसमें पर्याप्त मात्रा में कंप्यूटर समय लगता है।
सबसे सरल मामले में, टाइल की ऊंचाई शून्य है और इसकी गणना नहीं की जाती है। हालांकि, अगर हम केवल ऐसी "ईंटों" का उपयोग करते हैं, तो हम सृजन को प्राप्त करेंगे सबसे अच्छा मामलाएक सुखद घास का मैदान। विभिन्न ऊंचाइयों का उपयोग करके, हम दीवारों और पहाड़ियों के साथ अधिक यथार्थवादी परिदृश्य प्राप्त करेंगे। बेशक, ऐसी "ईंटों" को स्क्रीन पर प्रदर्शित करना अधिक कठिन होगा। अब हमें टाइल बेसलाइन की अवधारणा से परिचित होने की आवश्यकता है।
आधारभूतवह जगह है जहां टाइल जमीन को छूती है। उन्हें चित्र में हाइलाइट किया गया है। गुलाबी... आधार रेखा लंबवत रेखा के साथ कहीं भी चल सकती है, क्योंकि एक ही छवि का उपयोग विभिन्न आकारों की दीवारों के लिए किया जा सकता है। फिर बेसलाइन को टाइल आवंटन मानचित्र पर प्रदर्शित किया जाता है, और टाइलें स्वयं एक उच्च स्थिति से खींची जाने लगती हैं।

2डीएफएक्स

हम पहले ही देख चुके हैं कि कई टाइल वाली परतों का उपयोग करके कौन से प्रभाव पैदा किए जा सकते हैं। वी असली खेल इस प्रकार टाइल के आकार की गणना की जाती है।पूरा नक्शा लौकिक पाई की तरह स्तरित है: पहली सतह- यह पृथ्वी, पत्थर, मिट्टी, पानी और इसी तरह है; दूसरी परत- कोई भी परिधि जैसे पेड़, चट्टानें, मेज और कुर्सियाँ; तीसरी परत- वस्तुएं: लोग, राक्षस, चाबियां और जादू की औषधि।
आप उपरोक्त प्रभावों के लिए और परतें जोड़ सकते हैं, लेकिन आमतौर पर चार से पांच सर्वश्रेष्ठ प्रदर्शन के लिए उपयोग किए जाते हैं। मान लीजिए कि हमारे योजनाबद्ध में एक चौथी परत ऐसी वस्तुओं को बनाने के लिए जोड़ी जा सकती है जो पात्रों के शीर्ष स्तर से ऊपर होंगी, जैसे कि छत। आप सभी इस प्रभाव से मिले हैं: जब कोई नायक किसी इमारत के करीब आता है, तो उसकी छत अचानक गायब हो जाती है, और आप इमारत के अंदर देख सकते हैं। इसलिए, टाइल इंजन को चौथी परत खींचने से रोकने के लिए मजबूर करना बहुत आसान है ताकि उपयोगकर्ता इसके नीचे छिपी हर चीज को देख सके।
टाइल इंजन, जो पैलेट के सिद्धांत पर अपने ग्राफिक्स को आधार बनाते हैं, रंग रोटेशन प्रभाव का व्यापक उपयोग करते हैं। पानी खींचने के लिए कुछ नीली सरगम ​​​​का उपयोग करें। फिर, इस पैमाने को बदलने या, इसके विपरीत, टाइल में सूचकांकों को पुनर्व्यवस्थित करने से, आप बहते पानी का प्रभाव प्राप्त कर सकते हैं। यही चाल अन्य सतहों के लिए भी लागू होती है। मान लीजिए कि एक गुफा में एक चट्टान का चित्रण करने वाली टाइलें हैं, टाइल और उसका मुखौटा। स्क्रीन पर ड्राइंग करते समय
सफेद रंग में गिरने वाला हिस्सा ही दिखाई देता है
मुखौटा क्षेत्र। गहरा किया जा सकता है। और यदि आप चरित्र को एक मशाल देते हैं और उसकी स्थिति के आधार पर आसपास के क्षेत्र को रोशन करते हैं, तो प्रभाव बहुत सुंदर होगा। मैं दिन और रात के गतिशील परिवर्तन की बात भी नहीं कर रहा हूं। पैलेट प्रबंधन बहुत है ब्याज पूछो, इसके अलावा, कुल 256-खिलने की अवधि के दौरान बहुत अच्छी तरह से विकसित और अध्ययन किया गया था, जब कोई भी पैलेट के बिना नहीं करता था। अब भी, जब क्रोमैटिकिटी 16 बिट से कम होती है, तो सभी समान पैलेटों के आधार पर मालिकाना प्रारूपों का उपयोग करके स्प्राइट्स को स्टोर करना अशोभनीय माना जाता है।
वैसे, किसने कहा कि टाइल्स प्रदर्शित करने के लिए, आपको हैक किए गए DirectDraw प्रक्रियाओं का उपयोग करना चाहिए? बेशक, के लिए लंबे समय तकअस्तित्व एल्गोरिदम को कई प्रभावों के लिए विकसित किया गया है: और गतिशील प्रकाश व्यवस्था, और यहां तक ​​कि कण प्रणाली भी। लेकिन वे सभी बहुत धीमी गति से काम करते हैं। लेकिन यह हमारे यार्ड में 1996 नहीं है, और वूडू ग्राफिक्स एक दुर्लभ वस्तु है, क्योंकि हर कोई इसे पहले ही फेंक चुका है। इसलिए, रोज़मर्रा की ज़रूरतों के लिए 3डी एक्सेलेरेटर की क्षमताओं का उपयोग करना बहुत लुभावना होगा।
3D लाइब्रेरी बनावट वाले पॉलीगॉन (समान टाइल) के आउटपुट में मदद कर सकती है - 2D प्रक्रियाओं में सबसे ब्रेकिंग पल। उस ने कहा, फ़िल्टरिंग (बनावट का उर्फ ​​कलात्मक धुंधलापन) निश्चित रूप से एक मामला है। इसके अलावा, केवल त्रि-आयामी खेलों में मौजूद सभी प्रभाव उपलब्ध हो जाते हैं: प्रकाश, पारदर्शिता, छाया, प्रकाश संक्रमण, और इसी तरह। यह विषय अभ्यास करने के लिए काफी दिलचस्प है। शायद टाइल गेम का भविष्य उसके पीछे है।

मानचित्र बनाना
कोई भी नक्शा एक सरणी है जो इसकी परतों पर टाइलों के स्थान के साथ-साथ उनके मापदंडों को निर्दिष्ट करता है। सबसे अधिक साधारण कार्डएक एमएक्सएन मैट्रिक्स है, जहां इसके प्रत्येक तत्व में पारंपरिक रूप से स्वीकृत अनुक्रम से एक टाइल नंबर होता है। यदि आपने कभी 2डी रणनीति या आरपीजी मानचित्र संपादक (या फ़ोटोशॉप में काम किया) का उपयोग किया है, तो आपको आसानी से बात मिल जाएगी। कब एक ही टाइल ऊंचाई में भिन्न हो सकती है,
जब आधारभूत पद्धति का उपयोग किया जाता है। नई परतें जोड़ी जाती हैं, मैट्रिक्स अधिक जटिल हो जाता है, मैट्रिक्स का एक सेट (संरचना) पहले ही प्राप्त हो जाता है, और किसी भी प्रभाव की शुरूआत के साथ, हमें अपना स्वयं का नक्शा प्रारूप मिलता है, जो डिस्क पर एक से अधिक मेगाबाइट लेता है।
टाइलों को अनुक्रमिक क्रमांक देने की आवश्यकता नहीं है। इसके विपरीत, अपनी संपूर्ण संख्या श्रृंखला को कई अंतरालों में तोड़कर शुरुआत करना अच्छा होगा। उदाहरण के लिए, 0 से 63 की सीमा में साधारण टाइलें शामिल हैं जिन पर आप चल सकते हैं (जमीन, स्लैब)। 63 से 127 तक - अभेद्य जंगल के घने, दीवारें और अन्य ठोस वस्तुएं। अगला अंतराल - झीलों और दलदलों का पानी, अंत में, विशेष समूह जो किसी भी क्रिया को करते हैं जब नायक उन पर "कदम" रखता है: पोर्टल, जाल, और इसी तरह। अब, जैसा कि फ़ोटोशॉप ग्राफिक्स का उत्पादन करता है, आप स्वीकृत नियमों के आधार पर नए लोगों को नंबर देते हैं, और भविष्य में आपको साइट की निष्क्रियता का निर्धारण करने या नायक के पोर्टल में प्रवेश करने पर कैसे प्रतिक्रिया करनी है, इससे जुड़ी कई समस्याओं से राहत मिलती है।
नक्शा बनाते समय, पहले आपको आइसोमेट्रिक टाइलें खींचने में समस्या हो सकती है, क्योंकि वे इतने "वक्र" हैं कि यह स्पष्ट नहीं है कि एक को कहाँ खींचना है और दूसरे के साथ जारी रखना है। स्क्रीन द्वारा सुचारू रूप से स्क्रॉल करने या मानचित्र के कुछ हिस्सों को काटने की प्रोग्रामिंग करते समय कठिनाइयाँ उत्पन्न हो सकती हैं। वैसे, टाइल का आकार दो (16x16 या 32x32) की कुछ शक्ति में सबसे अच्छा किया जाता है, यह गणना में आपको और प्रोसेसर दोनों के लिए बहुत मदद करता है। वही नक्शे के आकार के लिए जाता है। यह यथासंभव वर्गाकार होना चाहिए और घटक "ईंटों" के आकार से आयामों से विभाजित होना चाहिए। इस प्रकार, गणना करते समय, आपके पास कभी भी भिन्नात्मक मान नहीं होंगे जिनके साथ काम करना असंभव है। इसलिए, अधिकांश कार्डों में 128x128 या 512x512 जैसे आयाम होते हैं।
वैसे, सममितीय मानचित्र पर वर्णों की गति भी एक कारण से होती है। आखिरकार, हमारा नक्शा "अंदर की ओर" घुमाया गया है और इसका पूर्ण आकार लंबवत रूप से क्षैतिज रूप से आधा है। इसलिए, किसी भी चलने वाली वस्तु को "ऊपर" उसी के अनुसार चलना चाहिए। सामान्यतया, यहां सूत्रों को लागू करना आवश्यक है, सरलतम स्थिति में, दो कदम पक्ष में एक कदम गहरा लेते हैं। यदि आप सटीक गणना में रुचि रखते हैं, तो उन्हें इंटरनेट पर खोजना आसान होगा, चरम मामलों में, सलाह के लिए "साबुन"। यह किसी भी आइसोमेट्रिक आंदोलन पर लागू होता है जो पूरी तरह से सपाट खोज में भी होता है।
सौभाग्य से, ये सभी प्रश्न लंबे समय से कम अध्ययन वाली प्रौद्योगिकियों की श्रेणी से संबंधित नहीं हैं, और वेब पर प्रोग्रामिंग आइसोमेट्रिक 2 डी इंजन पर बहुत सारी पाठ्यपुस्तकें हैं। मैं आपको सलाह देता हूं कि आप साइटों के लेख अनुभाग देखें जैसे कि www.gamedev.net तथा www.flipcode.com , या बस उपयुक्त कीवर्ड के साथ कुछ Yahoo जैसे खोज इंजन को फ़ीड करें।

आइसोमेट्रीएक्स

खैर, उन लोगों के लिए जो "कार्यक्रमों को चुनना" पसंद करते हैं, हम विशेष रूप से नाम का एक इंजन लगाते हैं आइसोमेट्रीएक्स... यह अपने आप में वह सब कुछ जमा करता है जो ऊपर कहा गया था। पिछले समोपाल में चर्चा किए गए अधिकांश 3D इंजन और गेम कंस्ट्रक्टर के विपरीत, यह इंजन आपके गेम की रीढ़ बनने के लिए अभिप्रेत नहीं है। यह मुख्य रूप से आपके लिए व्यवहार में देखने के लिए है कि सभी प्रकार के सैद्धांतिक प्रश्नों को कैसे पूरा किया जा रहा है। इंजन पूरी तरह से लिखा है विजुअल सी ++, का स्रोत कोड और इसका अपना स्तर संपादक है। यदि आप प्रोग्रामिंग में रुचि नहीं रखते हैं, तो भी आप कुछ भी संकलित किए बिना परीक्षण स्तर से भटक सकते हैं।
कार्यों के संदर्भ में, IsometriX मामूली से अधिक लग सकता है: 8-बिट रंग में 640x480, निश्चित रूप से, ऐसा नहीं है। लेकिन जैसा कि मैंने कहा, यह एक और उदाहरण है जिससे आप सीख सकते हैं कि नक्शे के साथ कैसे काम करें, पात्रों को स्थानांतरित करें, टकराव की जांच करें, और बहुत कुछ। साथ ही, विंडोज 9x/2000 पर सब कुछ ठीक काम करता है और संभवतः XP पर होगा।

बिदाई शब्द
वे जो कुछ भी कहते हैं, द्वि-आयामी टाइल इंजन अभी भी सभी जीवित चीजों की तुलना में अधिक जीवित हैं। ड्राइंग के विवरण और सुंदरता के मामले में अभी तक कोई भी 3D गेम क्लासिक 2D के साथ तुलना नहीं कर सकता है। उदाहरण के लिए फॉलआउट टैक्टिक्स को लें - इस गेम में कुछ सबसे उन्नत 2D एडवांस हैं। और कोई भी भाषा इस खेल के ग्राफिक्स को मनहूस कहने के लिए नहीं मुड़ेगी।
इसके अलावा, टाइलें विशाल दुनिया बनाने के लिए आदर्श हैं। विभाजन का उपयोग करते हुए, जब नक्शा कई टुकड़ों में विभाजित होता है, जिनमें से प्रत्येक गतिशील रूप से लोड होता है, तो आप शानदार आकार के नक्शे बना सकते हैं। और यह आरपीजी शैली के खेलों में सक्रिय रूप से उपयोग किया जाता है। यह एक और कारक है जिसके द्वारा डेवलपर्स को त्वरक और मल्टीटेक्स्चरिंग की दुनिया में जाने की कोई जल्दी नहीं है।
और अंत में, टाइल ग्राफिक्स किसी भी 3D इंजन की तुलना में सीखना बहुत आसान है (हालाँकि यह मेरी व्यक्तिपरक राय हो सकती है)। और स्प्राइट्स के साथ संचालन के लिए DirectDraw सीखना Direct3D और यहां तक ​​कि OpenGL की तुलना में अतुलनीय रूप से आसान और स्पष्ट है। इसलिए, तुरंत अग्रिम पंक्ति में आने का प्रयास न करें। शायद आपको अच्छी पुरानी 2डी दुनिया पर भी ध्यान देना चाहिए। खैर, शायद थोड़ा 2.5D ...

(टाइल - टाइल)अनिवार्य रूप से बड़ी पेंटिंग बनाने की एक विधि है (इमेजिस)छोटे तत्वों का उपयोग करना।

सामान्य तौर पर, कुछ सुंदर होता है और फिर से नहीं रूसी शब्द - मौज़ेक... याद रखें कि यह क्या है। यह तब होता है जब आप एक साथ एक बड़ी तस्वीर बनाते हैं, वह एक ही चीज़ के बारे में है, और वहाँ तंग हैं। या याद रखें कि उन्होंने पैसे कैसे देखे और टाइलें बिछाईं।

// बुरा विचार, ब्लॉग विषयों को यहाँ मिलाना ...


किस तरह की छत? टिल्ड। एक अद्भुत गुण, आप संज्ञा को विशेषण में बदल सकते हैं, लेकिन फिर इसका सामान्य रूप से अनुवाद नहीं किया जा सकता है, लेकिन इसे समझना आसान है।
हमारे विषय पर वापस, खेलों में टाइल ग्राफिक्स, यह क्या है?

यह एक ग्राफिक है जिसमें टाइलें होती हैं। (कैप)... उदाहरण:


कभी-कभी यह बहुत ही खूबसूरत हो जाता है


ये कुर्सियाँ और एक मेज भी टाइलें हैं। टाइलें दीवारें, फर्श और अन्य तत्व हैं। यहां के दरवाजे, सबसे अधिक संभावना है, न केवल टाइलें हैं, बल्कि पहले से ही वस्तुएं हैं, क्योंकि उनके साथ बातचीत संभव है।

इसके अलावा, टाइल ग्राफिक्स कुछ हद तक सिद्धांत के अनुसार पिक्सेल कला की याद दिलाते हैं, मोज़ेक की तरह, एक चित्र पिक्सेल द्वारा पिक्सेल खींचा जाता है। तत्व द्वारा तत्व।


अधिक पिक्सेल कला यहाँ


लेकिन इस तस्वीर में (यह बिल्कुल भी खेल नहीं है), ग्राफिक्स टाइल नहीं हैं। यहां सब कुछ व्यक्तिगत रूप से खींचा गया है। यह वह जगह है जहां हम टाइल ग्राफिक्स की पहली समस्या पर आते हैं - कभी-कभी वह बहुत नीरस दिखती है.


गेम मेकर स्टूडियो में टाइल्स का एक विशिष्ट उदाहरण


यहां तक ​​कि StarCraft मानचित्र संपादक को भी याद रखें:


और फिर मेरा लेख पढ़ें - जहां मैंने उसके बारे में लिखा था। पहले बूढ़े आदमी में, यह सब काफी उत्सुकता से किया गया था, और वहाँ आंशिक रूप से एकरसता को दूर करना संभव था, इस तथ्य के कारण कि लगभग हर तत्व बेतरतीब ढंग से उत्पन्न हुआ था, भले ही वह एक ही प्रकार का हो। मैं किस बारे में बात कर रहा हूँ?

हम वही स्क्रीन लेते हैं और उसे बड़ा करते हैं।


टाइल दोहराता नहीं है


और यह मेरा पसंदीदा पहला स्टारक्राफ्ट कब था?

शैतान ही जानता है कि कब और पहले से ही वे इस बात के साथ आए। और अब कुछ गेम निर्माता एक ही प्रकार की टाइलों को पंक्तियों में धकेलना जारी रखते हैं।

खेलों में ग्राफिक्स के साथ मुद्दा बहुत महत्वपूर्ण है, क्योंकि यह अंतिम बजट और विकास के समय को दृढ़ता से निर्धारित करता है।

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

न केवल यह सब ड्रा करें, बल्कि फिर इसे व्यवस्थित करें, और फिर तत्वों को यादृच्छिक बनाने का कोई तरीका लेकर आएं, यदि यह किया जाएगा।

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

टाइलें आमतौर पर एक बंडल (सेट) के रूप में बनाई जाती हैं, जिसे टाइलों का मैट्रिक्स कहा जाता है। यह एक बड़ा टुकड़ा है, जिसे छोटे टुकड़ों में बांटा गया है। कुछ इस तरह:



और अब इस सेट से विशिष्ट टाइलें हटा दी जाती हैं। यह सिर्फ एक हरा वर्ग हो सकता है - घास, पेड़, या कुछ भी।

सब कुछ एक ही समय में काफी सरल और सुंदर है। हिमपात विषय। टाइल्स का तैयार सेट होने के कारण, आपके पास पहले से ही आधा काम हो चुका है, आपको केवल उन्हें खूबसूरती से व्यवस्थित करने की आवश्यकता है।

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

लेकिन लगभग सभी सजावटी (विशुद्ध रूप से दृश्य)तत्वों को टाइल्स के माध्यम से किया जा सकता है।

  • वही पढ़ें:
बता दें कि ये वही स्तम्भ हैं। खैर, आपको स्तंभ के साथ नायक की किसी प्रकार की बातचीत की आवश्यकता क्यों है? आपको केवल एक टक्कर की जरूरत है (जब आप इसके माध्यम से नहीं जा सकते).

और एक टक्कर के लिए, आप बस एक ठोस अदृश्य क्षेत्र को एक वस्तु बना सकते हैं, और पहले से ही इसे स्तंभ के नीचे बता सकते हैं। फिर खंभे के माध्यम से (स्प्राइट - टाइल)पारित करना संभव नहीं होगा, आंदोलन "ठोस" क्षेत्र से अवरुद्ध हो जाएगा।

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

काफी सुविधाजनक, खासकर छोटी टाइलों के लिए।


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

लेकिन जब आप आरपीजी बनाना शुरू करते हैं (या किसी अन्य शैली में एक खेल)बिना ग्राफ़िक्स के, आपको टाइल्स की आवश्यकता होगी। मुझे आशा है कि मैंने इस प्रश्न का उत्तर दिया - टाइल क्या हैं और खेलों में टाइल ग्राफिक्स के स्वीकार्य उदाहरण दिए।

और यदि आप विशिष्ट उदाहरणों में रुचि रखते हैं और गेममेकर स्टूडियो 2 में यह सब कैसे काम करता है, तो आप मेरी जांच कर सकते हैं वीडियो (9 मिनट)... मेरी सदस्यता लें ईकॉन ड्यूड चैनल - स्क्रैच से गेम बनाने के बारे में अगर आपने अभी तक सब्सक्राइब नहीं किया है।

एक टाइल क्या है
आप शायद कल्पना करें कि टाइल क्या है, लेकिन आइए इसे बेहतर तरीके से जानें। टाइल एक निश्चित आकार की तस्वीर की तरह दिखती है। इसके अलावा, इसे इस तरह से खींचा जाता है कि जब अन्य टाइलों के साथ तुलना की जाती है, तो ध्यान देने योग्य "सीम" के बिना एक एकल छवि प्राप्त की जाती है। टाइलों के बारे में सोचना सबसे आसान है क्योंकि टाइलें दीवारों या फर्श को लाइन करने के लिए उपयोग की जाती हैं। सबसे सरल टाइल एक वर्गाकार छवि है, जो लंबवत और क्षैतिज रूप से सममित है (आप इसे चित्रण में देख सकते हैं)। यदि आप इन तस्वीरों को एक साथ रखते हैं, तो आपको टर्फ का एक बड़ा कैनवास मिलता है। और यदि आप परिवर्तन के लिए इस सुरम्य चित्र में एक और प्रकार की टाइल जोड़ते हैं, कहते हैं, एक सड़क का चित्रण, तो आप पहले से ही एक आदिम नक्शा तैयार कर सकते हैं।
आइए अब उन लागतों की गणना करें जो हमें 512x512 कोशिकाओं के आकार के साथ एक नक्शा बनाने के लिए आवश्यक होंगी। मान लीजिए कि टाइल स्वयं 32x32 पिक्सेल आकार की होगी, तो यह 1024 बाइट्स - 1 किलोबाइट मेमोरी पर कब्जा कर लेगी। गणना के बाद, यह पता चला है कि टाइलों की छवियों को संग्रहीत करने के लिए सबसे सरल कार्ड मेमोरी प्लस मेमोरी में लगभग 262 किलोबाइट लेता है। लेकिन अगर हम उसी क्षेत्र को हाथ से खींचते हैं, तो हमें 268 मेगाबाइट (!) तकनीकी प्रगति की वेदी पर रखना होगा। और यह इस तथ्य के बावजूद कि मैंने सादगी के लिए 256 रंग मोड लिया। यह स्पष्ट है कि अब भी हर कंप्यूटर में इतनी मेमोरी नहीं होती है, इसलिए मानचित्रों की टाइल वाली संरचना का उपयोग दो-आयामी के भारी बहुमत और पर्याप्त संख्या में त्रि-आयामी खेलों में किया जाता है।
आयताकार और वर्गाकार टाइलें पक्षी की दृष्टि का प्रतिनिधित्व करने के लिए अच्छी हैं, लेकिन एक अन्य प्रकार का प्रक्षेपण है जिसे आइसोमेट्रिक कहा जाता है। इसका उपयोग तब किया जाता है जब आपको मात्रा, गहराई, बनावट का बोध कराने की आवश्यकता होती है छद्म 3 डी... इसलिए, आइसोमेट्रिक सिस्टम को कभी-कभी 2.5D कहा जाता है। यहाँ क्या बात है? अब टाइल दर्शक को एक कोण पर देखेगी और, जैसा कि वह अंदर की ओर जा रही थी (चित्रण को देखें)। अनिवार्य रूप से द्वि-आयामी चित्र तीसरे आयाम पर ले जाता है। इस मामले में, वर्ग (टाइल) के आयाम निम्नानुसार निर्धारित किए जाते हैं:
1. लंबाई - छवि में सबसे बाएं बिंदु से सबसे दाएं बिंदु तक।
2. चौड़ाई - "सबसे दूर" से "निकटतम" बिंदु तक दर्शक तक।
3. ऊँचाई - टाइल की "मोटाई"।
आयतन का प्रभाव पैदा करने के लिए, चौड़ाई लंबाई से लगभग आधी होनी चाहिए। इस संबंध के साथ प्रयोग करते हुए, आप वांछित प्रक्षेपण का चयन करते हुए "टाइल्स" को त्रि-आयामी स्थान में घुमाते हैं। इन उद्देश्यों के लिए, 3D स्टूडियो के किसी प्रकार के एनालॉग का उपयोग करना उपयोगी है। वहां एक टाइल बनाएं, उसकी स्थिति चुनें, और फिर पक्षों और परिणामी अनुपातों को मापें।
लेकिन अब कैसे आकर्षित करें
स्क्रीन पर ऐसी टाइल? आखिरकार, सामान्य ड्राइंग फ़ंक्शंस का उपयोग करने के लिए एक आयताकार क्षेत्र दिया जाता है, जिसे वे ठीक करते हैं। मास्क की मदद से इस समस्या का समाधान किया जाता है। चित्रण में, आप देखेंगे कि टाइलों की रूपरेखा सफेद क्षेत्र में गिरती है, और जो पीछे रह जाता है वह काला हो जाता है और एक आयत बनाता है। यह एक स्टैंसिल के सिद्धांत को बदल देता है: छवि को मुखौटा और "कैनवास" पर आरोपित किया जाता है, और केवल वे बिंदु जो सफेद रंग में आते हैं, गुजरते हैं। यहां तक ​​कि मानक विंडोज़ ड्राइंग फ़ंक्शंस को ऐसा करने के लिए प्रशिक्षित किया जाता है, डायरेक्टएक्स फ़ंक्शंस का उल्लेख नहीं करने के लिए। वहीं, मास्क के इस्तेमाल से आप दूसरे असर भी कर सकते हैं। उदाहरण के लिए, आप टाइल की ऊंचाई को छोड़कर केवल उसका हेडर बना सकते हैं। या केवल एक चित्र का उपयोग करके घास के विभिन्न भाग बनाएं। यदि हम एक मुखौटा बनाते हैं, जिसमें पूरी तरह से छेद होते हैं, और इसकी मदद से किसी अन्य प्रकार के पहले से मौजूद टाइल के स्थान पर घास के साथ एक टाइल प्रदर्शित करते हैं, तो हमें एक सतह से दूसरी सतह पर एक सहज संक्रमण मिलेगा। कई मामलों में इसी तरह की तकनीक का उपयोग किया जा सकता है, और "टपका हुआ" मास्क बेतरतीब ढंग से उत्पन्न किया जा सकता है। तब कोई यह अनुमान नहीं लगाएगा कि आपके पास पूर्व-रेंडर किए गए परिदृश्य नहीं हैं। यह एक प्रकार की बहु-पाठ्यचर्या प्राप्त करता है: जब दो परस्पर पारदर्शी छवियों को एक क्षेत्र पर आरोपित किया जाता है। सच है, इसमें पर्याप्त मात्रा में कंप्यूटर समय लगता है।
सबसे सरल मामले में, टाइल की ऊंचाई शून्य है और इसकी गणना नहीं की जाती है। हालांकि, अगर हम केवल ऐसी "ईंटों" का उपयोग करते हैं, तो हम एक सुखद समाशोधन के निर्माण को सर्वोत्तम रूप से प्राप्त करेंगे। विभिन्न ऊंचाइयों का उपयोग करके, हम दीवारों और पहाड़ियों के साथ अधिक यथार्थवादी परिदृश्य प्राप्त करेंगे। बेशक, ऐसी "ईंटों" को स्क्रीन पर प्रदर्शित करना अधिक कठिन होगा। अब हमें टाइल बेसलाइन की अवधारणा से परिचित होने की आवश्यकता है।
आधारभूतवह जगह है जहां टाइल जमीन को छूती है। उन्हें तस्वीर में गुलाबी रंग में हाइलाइट किया गया है। आधार रेखा लंबवत रेखा के साथ कहीं भी चल सकती है, क्योंकि एक ही छवि का उपयोग विभिन्न आकारों की दीवारों के लिए किया जा सकता है। फिर बेसलाइन को टाइल आवंटन मानचित्र पर प्रदर्शित किया जाता है, और टाइलें स्वयं एक उच्च स्थिति से खींची जाने लगती हैं।

2डीएफएक्स

हम पहले ही देख चुके हैं कि कई टाइल वाली परतों का उपयोग करके कौन से प्रभाव पैदा किए जा सकते हैं। असली खेलों में
पूरा नक्शा लौकिक पाई की तरह स्तरित है: पहली सतह- यह पृथ्वी, पत्थर, मिट्टी, पानी और इसी तरह है; दूसरी परत- कोई भी परिधि जैसे पेड़, चट्टानें, मेज और कुर्सियाँ; तीसरी परत- वस्तुएं: लोग, राक्षस, चाबियां और जादू की औषधि।
आप उपरोक्त प्रभावों के लिए और परतें जोड़ सकते हैं, लेकिन आमतौर पर चार से पांच सर्वश्रेष्ठ प्रदर्शन के लिए उपयोग किए जाते हैं। मान लीजिए कि हमारे योजनाबद्ध में एक चौथी परत ऐसी वस्तुओं को बनाने के लिए जोड़ी जा सकती है जो पात्रों के शीर्ष स्तर से ऊपर होंगी, जैसे कि छत। आप सभी इस प्रभाव से मिले हैं: जब कोई नायक किसी इमारत के करीब आता है, तो उसकी छत अचानक गायब हो जाती है, और आप इमारत के अंदर देख सकते हैं। इसलिए, टाइल इंजन को चौथी परत खींचने से रोकने के लिए मजबूर करना बहुत आसान है ताकि उपयोगकर्ता इसके नीचे छिपी हर चीज को देख सके।
टाइल इंजन, जो पैलेट के सिद्धांत पर अपने ग्राफिक्स को आधार बनाते हैं, रंग रोटेशन प्रभाव का व्यापक उपयोग करते हैं। पानी खींचने के लिए कुछ नीली सरगम ​​​​का उपयोग करें। फिर, इस पैमाने को बदलने या, इसके विपरीत, टाइल में सूचकांकों को पुनर्व्यवस्थित करने से, आप बहते पानी का प्रभाव प्राप्त कर सकते हैं। यही चाल अन्य सतहों के लिए भी लागू होती है। मान लीजिए कि एक गुफा में एक चट्टान का चित्रण करने वाली टाइलें हैं,
गहरा किया जा सकता है। और यदि आप चरित्र को एक मशाल देते हैं और उसकी स्थिति के आधार पर आसपास के क्षेत्र को रोशन करते हैं, तो प्रभाव बहुत सुंदर होगा। मैं दिन और रात के गतिशील परिवर्तन की बात भी नहीं कर रहा हूं। पैलेट प्रबंधन एक बहुत ही रोचक विषय है, और यह भी बहुत अच्छी तरह से डिज़ाइन किया गया है और कुल 256-खिलने की अवधि में अध्ययन किया, जब किसी ने पैलेट के बिना नहीं किया। अब भी, जब क्रोमैटिकिटी 16 बिट से कम होती है, तो सभी समान पैलेटों के आधार पर मालिकाना प्रारूपों का उपयोग करके स्प्राइट्स को स्टोर करना अशोभनीय माना जाता है।
वैसे, किसने कहा कि टाइल्स प्रदर्शित करने के लिए, आपको हैक किए गए DirectDraw प्रक्रियाओं का उपयोग करना चाहिए? बेशक, अस्तित्व के लंबे समय में, कई प्रभावों के लिए एल्गोरिदम विकसित किए गए हैं: गतिशील प्रकाश व्यवस्था, और यहां तक ​​​​कि कण प्रणाली भी। लेकिन वे सभी बहुत धीमी गति से काम करते हैं। लेकिन यह हमारे यार्ड में 1996 नहीं है, और वूडू ग्राफिक्स एक दुर्लभ वस्तु है, क्योंकि हर कोई इसे पहले ही फेंक चुका है। इसलिए, रोज़मर्रा की ज़रूरतों के लिए 3डी एक्सेलेरेटर की क्षमताओं का उपयोग करना बहुत लुभावना होगा।
3D लाइब्रेरी बनावट वाले पॉलीगॉन (समान टाइल) के आउटपुट में मदद कर सकती है - 2D प्रक्रियाओं में सबसे ब्रेकिंग पल। उस ने कहा, फ़िल्टरिंग (बनावट का उर्फ ​​कलात्मक धुंधलापन) निश्चित रूप से एक मामला है। इसके अलावा, केवल त्रि-आयामी खेलों में मौजूद सभी प्रभाव उपलब्ध हो जाते हैं: प्रकाश, पारदर्शिता, छाया, प्रकाश संक्रमण, और इसी तरह। यह विषय अभ्यास करने के लिए काफी दिलचस्प है। शायद टाइल गेम का भविष्य उसके पीछे है।

मानचित्र बनाना
कोई भी नक्शा एक सरणी है जो इसकी परतों पर टाइलों के स्थान के साथ-साथ उनके मापदंडों को निर्दिष्ट करता है। सबसे सरल नक्शा एक एमएक्सएन मैट्रिक्स है, जहां इसके प्रत्येक तत्व में पारंपरिक रूप से स्वीकृत अनुक्रम से एक टाइल नंबर होता है। यदि आपने कभी 2डी रणनीति या आरपीजी मानचित्र संपादक (या फ़ोटोशॉप में काम किया) का उपयोग किया है, तो आपको आसानी से बात मिल जाएगी। कब नई परतें जोड़ी जाती हैं, मैट्रिक्स अधिक जटिल हो जाता है, मैट्रिक्स का एक सेट (संरचना) पहले ही प्राप्त हो जाता है, और किसी भी प्रभाव की शुरूआत के साथ, हमें अपना स्वयं का नक्शा प्रारूप मिलता है, जो डिस्क पर एक से अधिक मेगाबाइट लेता है।
टाइलों को अनुक्रमिक क्रमांक देने की आवश्यकता नहीं है। इसके विपरीत, अपनी संपूर्ण संख्या श्रृंखला को कई अंतरालों में तोड़कर शुरुआत करना अच्छा होगा। उदाहरण के लिए, 0 से 63 की सीमा में साधारण टाइलें शामिल हैं जिन पर आप चल सकते हैं (जमीन, स्लैब)। 63 से 127 तक - अभेद्य जंगल के घने, दीवारें और अन्य ठोस वस्तुएं। अगला अंतराल - झीलों और दलदलों का पानी, अंत में, विशेष समूह जो किसी भी क्रिया को करते हैं जब नायक उन पर "कदम" रखता है: पोर्टल, जाल, और इसी तरह। अब, जैसा कि फ़ोटोशॉप ग्राफिक्स का उत्पादन करता है, आप स्वीकृत नियमों के आधार पर नए लोगों को नंबर देते हैं, और भविष्य में आपको साइट की निष्क्रियता का निर्धारण करने या नायक के पोर्टल में प्रवेश करने पर कैसे प्रतिक्रिया करनी है, इससे जुड़ी कई समस्याओं से राहत मिलती है।
नक्शा बनाते समय, पहले आपको आइसोमेट्रिक टाइलें खींचने में समस्या हो सकती है, क्योंकि वे इतने "वक्र" हैं कि यह स्पष्ट नहीं है कि एक को कहाँ खींचना है और दूसरे के साथ जारी रखना है। स्क्रीन द्वारा सुचारू रूप से स्क्रॉल करने या मानचित्र के कुछ हिस्सों को काटने की प्रोग्रामिंग करते समय कठिनाइयाँ उत्पन्न हो सकती हैं। वैसे, टाइल का आकार दो (16x16 या 32x32) की कुछ शक्ति में सबसे अच्छा किया जाता है, यह गणना में आपको और प्रोसेसर दोनों के लिए बहुत मदद करता है।

वही नक्शे के आकार के लिए जाता है। यह यथासंभव वर्गाकार होना चाहिए और घटक "ईंटों" के आकार से आयामों से विभाजित होना चाहिए। इस प्रकार, गणना करते समय, आपके पास कभी भी भिन्नात्मक मान नहीं होंगे जिनके साथ काम करना असंभव है। इसलिए, अधिकांश कार्ड 128x128 या 512x512 जैसे आयाम हैं।
वैसे, सममितीय मानचित्र पर वर्णों की गति भी एक कारण से होती है। आखिरकार, हमारा नक्शा "अंदर की ओर" घुमाया गया है और इसका पूर्ण आकार लंबवत रूप से क्षैतिज रूप से आधा है। इसलिए, किसी भी चलने वाली वस्तु को "ऊपर" उसी के अनुसार चलना चाहिए। सामान्यतया, यहां सूत्रों को लागू करना आवश्यक है, सरलतम स्थिति में, दो कदम पक्ष में एक कदम गहरा लेते हैं। यदि आप सटीक गणना में रुचि रखते हैं, तो उन्हें इंटरनेट पर खोजना आसान होगा, चरम मामलों में, सलाह के लिए "साबुन"। यह किसी भी आइसोमेट्रिक आंदोलन पर लागू होता है जो पूरी तरह से सपाट खोज में भी होता है।
सौभाग्य से, ये सभी प्रश्न लंबे समय से कम अध्ययन वाली प्रौद्योगिकियों की श्रेणी से संबंधित नहीं हैं, और वेब पर प्रोग्रामिंग आइसोमेट्रिक 2 डी इंजन पर बहुत सारी पाठ्यपुस्तकें हैं। मैं आपको सलाह देता हूं कि आप साइटों के लेख अनुभाग देखें जैसे कि www.gamedev.net तथा www.flipcode.com , या बस उपयुक्त कीवर्ड के साथ कुछ Yahoo जैसे खोज इंजन को फ़ीड करें।

आइसोमेट्रीएक्स

खैर, उन लोगों के लिए जो "कार्यक्रमों को चुनना" पसंद करते हैं, हम विशेष रूप से नाम का एक इंजन लगाते हैं आइसोमेट्रीएक्स... यह अपने आप में वह सब कुछ जमा करता है जो ऊपर कहा गया था। पिछले समोपाल में चर्चा किए गए अधिकांश 3D इंजन और गेम कंस्ट्रक्टर के विपरीत, यह इंजन आपके गेम की रीढ़ बनने के लिए अभिप्रेत नहीं है। यह मुख्य रूप से आपके लिए व्यवहार में देखने के लिए है कि सभी प्रकार के सैद्धांतिक प्रश्नों को कैसे पूरा किया जा रहा है। इंजन पूरी तरह से लिखा है विजुअल सी ++, का स्रोत कोड और इसका अपना स्तर संपादक है। अगर तुम
प्रोग्रामिंग दिलचस्प नहीं है, आप अभी भी कुछ भी संकलित किए बिना परीक्षण स्तर पर घूम सकते हैं।
कार्यों के संदर्भ में, IsometriX मामूली से अधिक लग सकता है: 8-बिट रंग में 640x480, निश्चित रूप से, ऐसा नहीं है। लेकिन जैसा कि मैंने कहा, यह एक और उदाहरण है जिससे आप सीख सकते हैं कि नक्शे के साथ कैसे काम करें, पात्रों को स्थानांतरित करें, टकराव की जांच करें, और बहुत कुछ। साथ ही, विंडोज 9x/2000 पर सब कुछ ठीक काम करता है और संभवतः XP पर होगा।

बिदाई शब्द


वे जो कुछ भी कहते हैं, द्वि-आयामी
टाइल इंजन अभी भी सभी जीवित चीजों की तुलना में अधिक जीवित हैं। ड्राइंग के विवरण और सुंदरता के मामले में अभी तक कोई भी 3D गेम क्लासिक 2D के साथ तुलना नहीं कर सकता है। उदाहरण के लिए फॉलआउट टैक्टिक्स को लें - इस गेम में कुछ सबसे उन्नत 2D एडवांस हैं। और कोई भी भाषा इस खेल के ग्राफिक्स को मनहूस कहने के लिए नहीं मुड़ेगी।
इसके अलावा, टाइलें विशाल दुनिया बनाने के लिए आदर्श हैं। विभाजन का उपयोग करते हुए, जब नक्शा कई टुकड़ों में विभाजित होता है, जिनमें से प्रत्येक गतिशील रूप से लोड होता है, तो आप शानदार आकार के नक्शे बना सकते हैं। और यह आरपीजी शैली के खेलों में सक्रिय रूप से उपयोग किया जाता है। यह एक और कारक है जिसके द्वारा डेवलपर्स को त्वरक और मल्टीटेक्स्चरिंग की दुनिया में जाने की कोई जल्दी नहीं है।
और अंत में, टाइल ग्राफिक्स किसी भी 3D इंजन की तुलना में सीखना बहुत आसान है (हालाँकि यह मेरी व्यक्तिपरक राय हो सकती है)। और स्प्राइट्स के साथ संचालन के लिए DirectDraw सीखना Direct3D और यहां तक ​​कि OpenGL की तुलना में अतुलनीय रूप से आसान और स्पष्ट है। इसलिए, तुरंत अग्रिम पंक्ति में आने का प्रयास न करें। शायद आपको अच्छी पुरानी 2डी दुनिया पर भी ध्यान देना चाहिए। खैर, शायद थोड़ा 2.5D ...
  • अनुवाद

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


नीचे दी गई छवि टाइलों (टाइलसेट) का एक सेट दिखाती है, जिसके आधार पर वीडियो से दुनिया उत्पन्न होती है। वास्तविक वातावरण में इसका प्रतिनिधित्व करने में आपकी सहायता के लिए दुनिया को नोट्स प्रदान किए जाते हैं।


हम टाइलिंग को अंतिम ग्रिड के रूप में परिभाषित कर सकते हैं, जिसमें प्रत्येक टाइल अपने स्वयं के ग्रिड सेल में होती है। सही दुनियाहम इसे एक ऐसी दुनिया के रूप में परिभाषित करते हैं जिसमें आसन्न टाइलों के किनारों के रंग समान होने चाहिए।
टाइलिंग का केवल एक लोहे का नियम है: टाइलों के किनारों का रंग मेल खाना चाहिए। इसी नियम के आधार पर संपूर्ण उच्च स्तरीय संरचना का विकास होता है।

सही टाइलिंग इस तरह दिखती है:

यह एक टाइलिंग है जो पानी, समुद्र तट, घास, इमारतों वाले शहरों (नीली आयत) और बर्फीली चोटियों वाले पहाड़ों के साथ एक मानचित्र का प्रतिनिधित्व करना चाहिए। काली रेखाएँ टाइलों के बीच की सीमाएँ दिखाती हैं।

मुझे लगता है कि यह दुनिया का वर्णन करने और बनाने का एक दिलचस्प तरीका है, क्योंकि प्रक्रियात्मक पीढ़ी एल्गोरिदम में अक्सर टॉप-डाउन दृष्टिकोण का उपयोग किया जाता है। उदाहरण के लिए, एल-सिस्टम एक पुनरावर्ती वस्तु विवरण का उपयोग करते हैं, जिसमें उच्च-स्तरीय, बड़े विवरण निम्न-स्तर वाले की तुलना में पहले पहचाने जाते हैं। इस दृष्टिकोण में कुछ भी गलत नहीं है, लेकिन मुझे लगता है कि टाइलसेट बनाना दिलचस्प है जो केवल साधारण निम्न-स्तरीय संबंधों को एन्कोड कर सकता है (उदा। समुद्र का पानीऔर घास को तट से अलग किया जाना चाहिए, इमारतों में केवल उत्तल कोण 90 डिग्री पर होने चाहिए) और उच्च-स्तरीय पैटर्न (जैसे, वर्गाकार भवन) दिखाई देने चाहिए।

टाइलिंग एक एनपी-पूर्ण बाधा संतुष्टि समस्या है

बाधा संतुष्टि समस्याओं (सीएसपी) से परिचित पाठक के लिए, यह पहले से ही स्पष्ट है कि सीमित दुनिया की टाइलिंग एक सीएसपी है। ZUO में हमारे पास बहुत सारे वेरिएबल, बहुत सारे मान होते हैं जो प्रत्येक वेरिएबल ले सकता है (जिसे इसकी परिभाषा का दायरा कहा जाता है) और बहुत सारे प्रतिबंध। हमारे मामले में, चर मानचित्र पर निर्देशांक हैं, प्रत्येक चर की परिभाषा का क्षेत्र एक टाइलसेट है, और बाधाएं हैं कि टाइल के किनारों को पड़ोसियों के किनारों के अनुरूप होना चाहिए।

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

विधि 1: पिछड़े हॉप्स के साथ लालची प्लेसमेंट

हम यादृच्छिक स्थानों का चयन करते हैं और वहां उपयुक्त टाइलें लगाते हैं। यदि हम अटक जाते हैं, तो उनमें से कुछ को हटा दें और पुनः प्रयास करें।

संपूर्ण मानचित्र को अनसुलझे के रूप में प्रारंभ करें

जब तक मानचित्र पर अनसुलझी टाइलें हैं
यदि मानचित्र पर कोई उपयुक्त टाइल लगाई जा सकती है
टी<- коллекция всех возможных расположений подходящих тайлов
मैं<- случайная выборка из t, взвешенная по вероятностям тайлов
l को मानचित्र पर रखें
अन्यथा
एक यादृच्छिक UNSOLVED टाइल का चयन करें और उसके सभी पड़ोसियों को UNSOLVED स्थिति असाइन करें


एक टाइलसेट से एक टाइलिंग बनाने का पहला प्रयास यह था कि पूरा ग्रिड एक अनसुलझे स्थिति में था, जिसके बाद मैंने इसके लिए एक उपयुक्त स्थान पर एक यादृच्छिक टाइल को पुनरावृत्त रूप से रखा, या, यदि कोई उपयुक्त स्थान नहीं था, तो अगले एक छोटे से क्षेत्र को सौंपा। एक अनसुलझे टाइल के लिए एक "अनसुलझे" स्थिति में और टाइल्स की लालची व्यवस्था को जारी रखा। लालची पोजिशनिंग एक टाइल की स्थिति के लिए एक रणनीति है, जब तक कि इसके किनारे पहले से रखी गई टाइलों से मेल खाते हैं, भले ही ऐसी व्यवस्था एक आंशिक टाइलिंग बनाएगी जो पहले से रखी गई टाइलों को बदले बिना पूरा नहीं किया जा सकता है। जब यह स्थिति उत्पन्न होती है और हम अब टाइलों की व्यवस्था नहीं कर सकते हैं, तो हमें पहले से स्थित कुछ टाइलों को हटाना होगा। लेकिन हम नहीं जानते कि उनमें से कौन सा हटाना सबसे अच्छा है, क्योंकि अगर हम समस्या को हल कर सकते हैं, तो हम शायद पहले स्थान पर टाइलों के सही स्थान की समस्या को भी हल कर सकते हैं। एल्गोरिथम को किसी दिए गए क्षेत्र के लिए उपयुक्त टाइल खोजने का एक और मौका देने के लिए, हम सभी टाइलों को अनसुलझे बिंदु के आसपास "अनसुलझे" स्थिति में सेट करते हैं और लालची रणनीति को निष्पादित करना जारी रखते हैं। हमें उम्मीद है कि देर-सबेर सही टाइलिंग मिल जाएगी, लेकिन इसकी कोई गारंटी नहीं है। एल्गोरिथ्म सही टाइलिंग मिलने तक चलेगा, जिसमें अनंत समय लग सकता है। इसमें यह निर्धारित करने की क्षमता नहीं है कि एक टाइलसेट अघुलनशील है।

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

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

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

संतोषजनक बाधाओं के संदर्भ में

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

यह खोज किसी स्थानीय अखंडता पद्धति का उपयोग नहीं करती है। अर्थात्, हम टाइलों की व्यवस्था करने का प्रयास नहीं करते हैं, जो बाद में भविष्य में एक खोज चरण के बाद भी एक अनसुलझी स्थिति की ओर ले जाती है। वर्तमान बिंदु से संभावित स्थानों पर कई टाइलों के प्रभाव को ट्रैक करके खोज को गति देना संभव है। उस ने कहा, उम्मीद है, यह खोज को अपना काम रद्द करने में इतना समय खर्च करने से रोकेगा। यह वही है जो हमारा एल्गोरिदम करता है।

विधि 2: सबसे अधिक प्रतिबंध और स्थानीय जानकारी के वितरण के साथ स्थान

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

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

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

उदाहरण के लिए, यदि मानचित्र पर पानी की टाइल है, तो उसके आगे की टाइलों में पानी होना चाहिए। उनके बगल की टाइलों में भी पानी हो सकता है, लेकिन अन्य संभावनाएं भी हैं, उदाहरण के लिए, घास, यदि मूल जल टाइल के बगल में एक तट रखा गया है। हम तैनात टाइल से जितना आगे बढ़ते हैं, उतने ही अधिक टाइल प्रकार संभव होते जाते हैं। इस अवलोकन का लाभ उठाने के लिए, हम मूल टाइल के बगल में प्रत्येक टाइल के स्थान तक पहुंचने के तरीकों की संख्या की गणना कर सकते हैं। कुछ मामलों में, संक्रमण के केवल एक क्रम से एक टाइल से दूसरी टाइल में दी गई दूरी पर संक्रमण हो सकता है। अन्य मामलों में, कई अलग-अलग संक्रमण अनुक्रम हो सकते हैं। टाइल रखने के बाद, हम आसन्न बिंदुओं पर टाइलों के संभाव्यता वितरण का निर्धारण उन तरीकों की संख्या की गणना करके कर सकते हैं जिनसे हम उस टाइल से संक्रमण कर सकते हैं जिसे हमने आसन्न टाइलों में रखा है। इस एल्गोरिथम द्वारा किया गया लुक-फ़ॉरवर्ड एल्गोरिथम इन संक्रमणों की संख्या को ट्रैक कर रहा है और उन्हें संभाव्यता वितरण के रूप में मान रहा है जिससे नई टाइलें चुनी जा सकती हैं।


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

यह सबसे कुशल एल्गोरिदम है जिसे मैं इस कार्य के लिए लागू करने में सक्षम हूं। इसका एक और फायदा है: निष्पादित होने पर यह सुंदर प्रस्तुतिकरण बनाता है। शायद बैकट्रैकिंग के कुछ रूपों को पेश करके इस एल्गोरिदम को बेहतर बनाने का एक तरीका है। यदि परिणामी समाप्त टाइलिंग में कोई गलत बिंदु है, तो आसन्न टाइलों की व्यवस्था को रद्द करना और उनके बिंदुओं पर परिणामी वितरण से पुन: नमूनाकरण करना हमें इस तैयार टाइलिंग के लिए एक सुधार खोजने की अनुमति दे सकता है। बेशक, यदि आप सही टाइलिंग मिलने तक खोज जारी रखना चाहते हैं, तो निर्दिष्ट गारंटीकृत निष्पादन समय को पार करें।

अनुकूलन

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

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


इसे पूरा करने के लिए, मैं कल्पना करूंगा कि जब एक खाली मानचित्र पर एक टाइल स्थित होती है, तो यह आसन्न मानचित्र बिंदुओं के वितरण में महत्वपूर्ण परिवर्तन करती है। मैं इन अपडेट को कॉल करूंगा वृत्तएक टाइल, यानी, एक खाली नक्शे पर रखे जाने पर उसके चारों ओर प्रक्षेपित टाइल के प्रभाव का क्षेत्र। जब दो टाइलें एक-दूसरे के बगल में रखी जाती हैं, तो उनके गोले परस्पर क्रिया करते हैं और अंतिम वितरण बनाते हैं, जो दोनों स्थानों से प्रभावित होते हैं। यह देखते हुए कि कई टाइलें किसी दिए गए अनसुलझे स्थान के पास स्थित हो सकती हैं, बड़ी संख्या में अंतःक्रियात्मक बाधाएं होंगी, उस बिंदु पर दिखाई देने वाली विभिन्न टाइलों की संभावना को निर्धारित करने के लिए एक गणना निर्णय लेना एक बहुत धीमी प्रक्रिया है। क्या होगा, इसके बजाय, हम केवल मानचित्र पर पहले से स्थित टाइलों के पूर्व-गणना क्षेत्रों के बीच बातचीत के एक साधारण मॉडल पर विचार करते हैं?
एक टाइल की स्थिति बनाते समय, मैं मानचित्र पर उस बिंदु पर पहले से संग्रहीत वितरण द्वारा मानचित्र पर प्रत्येक बिंदु के लिए उस टाइल के गोले के वितरण को गुणा करके प्रत्येक आइटम के लिए संभाव्यता मानचित्र को अद्यतन करता हूं। वितरण मानचित्र के साथ यह क्या कर सकता है, इसके उदाहरण पर विचार करना सहायक हो सकता है। मान लीजिए कि मानचित्र पर दिए गए बिंदु में वर्तमान में एक वितरण है जो समान संभावना के साथ घास या पानी चुन सकता है, और हम इस बिंदु के आगे एक पानी की टाइल लगाते हैं। पानी के टाइल वाले गोले में पानी की टाइल के बगल में पानी की उच्च संभावना और घास की टाइल की कम संभावना होगी। जब हम इन वितरण तत्वों को तत्व से गुणा करते हैं, तो परिणाम में पानी की संभावना अधिक होगी, क्योंकि यह दो बड़ी संभावनाओं का उत्पाद है, लेकिन घास की संभावना कम हो जाएगी, क्योंकि यह संग्रहीत उच्च संभावना का उत्पाद है एक गोले में संग्रहीत कम संभावना के साथ नक्शा।
यह रणनीति हमें उस प्रभाव का कुशलतापूर्वक अनुमान लगाने की अनुमति देती है जो प्रत्येक टाइल स्थान का संभाव्यता मानचित्र पर होना चाहिए।

संतोषजनक बाधाओं के संदर्भ में

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

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

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

टाइल चुनने की संभावनाओं को बदलकर टाइलिंग में हेरफेर

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

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

अपना खुद का टाइलसेट बनाना

संक्षेप में:
  • जीथब पर मेरे भंडार को क्लोन करें
  • प्रसंस्करण स्थापित करें
  • रिपॉजिटरी के डेटा / फोल्डर में टाइल्स बदलें।png
  • wangTiles.pde खोलने के लिए प्रसंस्करण का उपयोग करें और प्ले बटन पर क्लिक करें
जीथब पर पोस्ट किए गए कोड के साथ (आप इसे बदल सकते हैं, लेकिन इसे अपने जोखिम और जोखिम पर करें - मैंने इसे हाई स्कूल में लिखा है), आप एक छवि संपादक का उपयोग करके अपने खुद के टाइलसेट बना सकते हैं और टाइलिंग सॉल्वर को दुनिया बनाते हुए देख सकते हैं। उन्हें... बस रिपॉजिटरी को क्लोन करें और dungeon.png इमेज को एडिट करें, फिर wangTiles.pde को चलाने के लिए प्रोसेसिंग का उपयोग करें और जेनरेट किए गए मैप एनीमेशन को देखें। नीचे मैं उस "भाषा" का वर्णन करूंगा जिसकी इस टाइलिंग सॉल्वर की आवश्यकता है।

टाइलसेट विनिर्देश


टाइल्स को 4x4 ग्रिड में व्यवस्थित किया गया है। ऊपरी बाएँ 3x3 क्षेत्र में प्रत्येक सेल में एक रंग टाइल होती है, और शेष 7 पिक्सेल में टाइल मेटाडेटा होता है। टाइल के केंद्र के नीचे के पिक्सेल को टाइल पर टिप्पणी करने और उसे टाइलसेट से बाहर करने के लिए लाल रंग से रंगा जा सकता है। सॉल्वर इसे कभी भी मानचित्र पर नहीं रखेंगे। टाइल के दायीं ओर शीर्ष पिक्सेल को टाइल के सभी चार घुमावों को टाइलसेट में जोड़ने के लिए काले रंग में रंगा जा सकता है। यह एक आसान सुविधा है जब आप चार ओरिएंटेशन में मौजूद कोण की तरह कुछ जोड़ना चाहते हैं। अंत में, मार्कअप का सबसे महत्वपूर्ण हिस्सा टाइल के नीचे बाईं ओर स्थित पिक्सेल है। यह मानचित्र पर किसी टाइल के प्रदर्शित होने की आधार प्रायिकता को नियंत्रित करता है। पिक्सेल जितना गहरा होगा, टाइल के दिखने की संभावना उतनी ही अधिक होगी।

संबंधित कार्य

बहुत से लोगों ने वैंग टाइलों पर शोध किया है, जो रंगीन किनारों वाले टाइलसेट हैं और उन टाइलों के किनारों से मेल खाना चाहिए जिनके बगल में उन्हें रखा गया है, ठीक उसी तरह जैसे हम देख रहे हैं।

"मोस्ट कॉन्स्ट्रेन्ड प्लेसमेंट विद फ़ज़ी आर्क कंसिस्टेंसी" सॉल्वर ट्विटर के वेव फंक्शन कोलैप्स प्रोजेक्ट के समान है



यादृच्छिक लेख

यूपी