क्लाइंट साइड भविष्यवाणी के साथ रीयलटाइम यादृच्छिक आंदोलन को कैसे संभालना है


10

मैं एक रीयलटाइम मल्टीप्लेयर गेम बना रहा हूं जो क्लाइंट और सर्वर पर समान 'भौतिकी' लूप चलाता है। मैं एक स्टीयरिंग व्यवहार 'भटक' का उपयोग कर रहा हूं जो आवश्यक यादृच्छिक आंदोलन है। वैंडर एल्गोरिदम चलाते समय क्लाइंट और सर्वर अलग-अलग रैंडम नंबर जेनरेट करते हैं।

मैं सोच रहा हूं कि मैं स्वाभाविक रूप से यादृच्छिक दिखने वाले आंदोलन को कैसे रख सकता हूं लेकिन कुछ निरंतर का उपयोग करें जो ग्राहक और सर्वर को एक ही निष्कर्ष पर पहुंचाएगा।


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

जवाबों:


14

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

ग्राहक को वास्तविक बीज न भेजने का निर्णय लेने से पहले आपको क्या जानना चाहिए:

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

3

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

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