2 डी ग्रिड पर यादृच्छिक दुश्मन प्लेसमेंट


11

मैं अपने आइटम और दुश्मनों को बेतरतीब ढंग से (या यथासंभव अनियमित रूप से) रखना चाहता हूं। फिलहाल मैं XNA की Randomकक्षा का उपयोग X के लिए 800 और Y के लिए 600 के बीच एक संख्या उत्पन्न करने के लिए करता हूं । ऐसा लगता है कि दुश्मन मध्य या नीचे की तुलना में नक्शे के शीर्ष की ओर अधिक घूमते हैं। मैं जनरेटर को सीड नहीं करता हूं, शायद यह विचार करने के लिए कुछ है।

क्या अन्य तकनीकों का वर्णन किया गया है जो 2 डी ग्रिड पर यादृच्छिक दुश्मन प्लेसमेंट में सुधार कर सकते हैं?


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

मैं जानना चाहूंगा कि क्या XNA की रैंडम क्लास पर निर्भर रहने के अलावा कोई तकनीक है जो एक मिनट और अधिकतम के बीच की संख्या उत्पन्न करती है। मैं एक अधिक स्पष्ट सवाल करने की कोशिश करूंगा
रॉब

1
रैंडम वर्ग आपके बारे में बात कर रहा है। .NET फ्रेमवर्क का हिस्सा है, एक्सएनएएनए नहीं। सिर्फ आपकी जानकारी के लिए।
माइकल कोलमैन

@ ओमनियन - मुझे पता है। प्रश्न बनाते समय मैं थोड़ा थका हुआ था;)
रोबब

जवाबों:


16

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


7

बचाव के लिए शॉन हरग्रेव्स!

http://blogs.msdn.com/b/shawnhar/archive/2009/12/17/the-psychology-of-randomness.aspx http://blogs.msdn.com/b/shawnhar/archive/2010/09 /10/links-5-charles-bloom-on-randomness.aspx

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


+1 ने मेरे मुंह से सही शब्द निकाले, यहां तक ​​कि वितरण को हर समय यादृच्छिक वितरण के साथ मिलाया गया लगता है (मैंने खुद भी वही गलती की है)
Spooks

0

निम्नलिखित C # कोड आपके लिए एक समान अंक उत्पन्न करेगा:

Random rand = new Random(); // creates a new random number generator with a time-based seed
int X, Y;
for(int i = 0; i < numberOfPoints; i++)
{
  X = rand.Next(800); // generates a random int between 0 and 799, inclusive
  Y = rand.Next(600); // generates a random int between 0 and 599, inclusive
  AddPointToSet(X,Y); // write this method however you want
}

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.