2010-10-22 12 views
6

मेरे पास एक ग्रिड आधारित गेम (प्लेटफार्म) है जहां मैंने टाइल्स पर सबकुछ आधारित किया है। मेरे पास ठोस और तरल हैं जो टाइल्स हैं। मैं पानी के टाइल को किसी न किसी तरह से पानी अनुकरण करने का एक अच्छा तरीका खोजने की कोशिश कर रहा हूं।2 डी ग्रिड वॉटर/तरल सिमुलेशन (प्लेटफार्म टाइल आधारित)

इस समय मेरे पास वर्तमान प्रणाली है: जब पानी के टाइल को एक और पानी टाइल से ऊपर जोड़ा जाता है, तो यह नीचे पानी टाइल में 1 जोड़ता है। संख्या दबाव इंगित करता है।

[0] <- This water tile has 0 in pressure. 
[1] <- This water tile has 1 in pressure. 

अगर मैं नीचे एक के बगल में एक और पानी टाइल जोड़ने के लिए, यह से छोड़ दिया खोजों, सही और ऊपर अगर कोई पानी टाइल्स हैं और सबसे बड़ी inheritates:

यहाँ कैसे यह इस समय की तरह लग रहा है इसके चारों ओर दबाव।

उदाहरण:

[0][0] 
[1][1][1][1] 
[2][2][2][2][2] 

तो मैं हर पानी टाइल दबाव है कि बराबर या 1 कोशिश से भी बड़ा स्थानांतरित करने के लिए है कि बनाने:

[0] 
[1][1] 

और यहाँ कुछ पानी टाइल्स को जोड़ने के बाद एक बड़ा उदाहरण है यदि खाली जगह है तो बाएं/दाएं, फिर 0 पर दबाव डालें और जांचें कि क्या कोई पड़ोसी पानी की टाइल से खुद को दबाव में रख सकता है या नहीं।

यह प्रणाली उस मामले को छोड़कर बहुत अच्छी तरह से काम करती है जब पानी की टाइलें शीर्ष से हटा दी जाती हैं।

अगर मैं पिछले उदाहरण से शीर्ष पानी टाइल्स निकालें:

[1][1][1][1] 
[2][2][2][2][2] 

तो हम दबाव 1 के साथ शीर्ष पंक्ति है, यह देखते 0 अब होनी चाहिए और निचली पंक्ति होना चाहिए 1.

क्या कोई बेहतर प्रणाली है जिसे मैं इसे और अधिक उचित करने के लिए कार्यान्वित कर सकता हूं?

निम्न प्रतिबंध हैं:

प्रत्येक टाइल केवल अपने पड़ोसियों की जाँच कर सकते टाइल। टाइल में कोई फ़ंक्शन परिभाषित किया जा सकता है। टाइल डेटा संग्रह करने के लिए कोई चर हो सकता है।

क्या आप लोग बेहतर प्रणाली के साथ आ सकते हैं जो मेरे से बेहतर काम करता है?

सामान्य परीक्षण का मामला मुझे क्या करना है:

[] 
[] should become [][] 

[] 
[] 
[] should become [][][] 

    [] 
[][][] should become [][][][] 

मान लिया जाये कि खेल थोड़ी देर के लिए चलाता है।

कोई सुझाव स्वागत से अधिक होगा!

उत्तर

0

शायद आप दबावों के बारे में भूल सकते हैं (क्योंकि आप वास्तव में उन्हें दबाव के रूप में उपयोग नहीं कर रहे हैं) और बस एक बूल tryMove या ऐसा कुछ उपयोग करें।

प्रत्येक अनुकरण कदम दो substeps में टूट जाना चाहिए:

टाइल्स में सबसे पहले लूप: सत्य पर tryMove

  1. तो नीचे दिए गए स्थान के लिए स्वतंत्र है, सेट, इस टाइल खत्म।
  2. यदि ऊपर टाइल है, तो कोशिश करने के लिए tryMove सेट करें और गलत पर कोशिश करें।
  3. यदि कोई पड़ोसी आगे बढ़ने की कोशिश कर रहा है, तो कोशिश करने के लिए trymove सेट करें। टाइल्स में

दूसरा पाश:

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

मुझे लगता है कि यह आपकी समस्या को ठीक करना चाहिए।

0

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

मुझे बाएं फिर रिकर्सन की सही प्रकृति को पुन: सत्यापित करने दें। अनिवार्य रूप से, जब यह कार्य पानी के आधार स्तर पर पहुंच जाता है, तो इसे बाएं और दाएं को बदलने के लिए पानी की टाइल चुनना शुरू करना चाहिए। तो यह पहली बार टाइल सीधे बाएं, फिर सीधे दाएं, फिर दो बाएं, फिर दो दाएं, आदि की जांच करेगा। अगर इसे हवा टाइल मिलती है, तो इसे निकटतम पानी टाइल का विस्थापन करना चाहिए। अगर यह कुछ और (आमतौर पर एक दीवार) पाता है तो उसे उस तरफ छोड़ देना चाहिए। एक बार यह दोनों तरफ छोड़ दिया जाता है, तो आपको इसके बजाय अन्य व्यवहारों पर विचार करना चाहिए, जैसे सतह पर चारों ओर घूमते हुए सबसे ऊपर पानी।

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

संबंधित मुद्दे