मल्टीप्लेयर गेम के लिए एक सरल गेम सर्वर कैसे तैयार करें?


9

मैं एक साधारण गेम के लिए एक सरल मल्टीप्लेयर गेम सर्वर बनाना चाहूंगा:

यह गेम कमांड एंड कॉनकेयर के समान माना जाता है, आपके पास कुछ टैंक और कुछ सैनिक हैं। आप एक सैनिक का चयन कर सकते हैं और मानचित्र पर क्लिक कर सकते हैं, जहां सैनिक को जाना चाहिए। यदि सैनिक ऐसे क्षेत्र में आता है जहाँ वह नहीं जा सकता है, तो वह घूमता है। और सैनिकों को दुश्मनों द्वारा गोली मार दी जा सकती है।

मुझे गेम सर्वर की संरचना कैसे करनी चाहिए, और क्लाइंट पर क्या करना चाहिए?

यानी अगर कोई सैनिक X से Y की ओर बढ़ता है, लेकिन Z के निर्माण के आसपास, मुझे लगता है कि सर्वर को ठीक उसी स्थान पर गणना करने में सक्षम होना चाहिए जहां सैनिक स्थित है (यदि कोई शत्रु उस पर गोली चलाता है), और क्लाइंट को भी उसके लिए स्थिति जानना होगा सिपाही की पेंटिंग।

सर्वर पर क्या किया जाना चाहिए और मुझे लगता है कि मुझे इसके लिए एक प्रोटोकॉल बनाना होगा। मुझे लगता है कि सर्वर को खेल की स्थिति और समय का ध्यान रखना होगा। किसी को यह कैसे करना सुझाव है? या कुछ पढ़ने की सिफारिश कर सकता है?

जवाबों:


12

सामान्य तौर पर यह एक बहुत ही जटिल विषय है। आपके पास दो परस्पर विरोधी उद्देश्य हैं (कम से कम यदि आप एक समर्पित सर्वर पर हर एक गेम को चलाने की योजना नहीं बनाते हैं):

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

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

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

फिर भी एक और विकल्प हो सकता है कि इसके बजाय peer2peer पर जाएं, प्रत्येक ग्राहक को स्थानीय टीमों के लिए अपडेट के साथ सौदा करने दें, लेकिन फिर यह सवाल उठता है कि कैसे निर्धारित किया जाए कि कौन और क्या हिट करता है।

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


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

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

@ बर्ट: आंशिक रूप से सच है, लेकिन निश्चित रूप से इस बात पर एक टोपी होनी चाहिए कि आप कितना कृत्रिम रूप से परिचय देते हैं, या धीमे कनेक्शन लगातार तेज कनेक्शन को बहुत अधिक पिछड़ने के लिए मजबूर कर सकते हैं, जो निश्चित रूप से अब आप चाहते हैं।
ओ ० '।

सबसे अच्छा रास्ता खोजना कोई समस्या नहीं है अगर क्लाइंट पर किया जाता है, जब तक कि एक बार उसने पाया है कि यह सर्वर को समाधान भेजता है, जो - सभी आंदोलन के साथ - चेक करता है कि क्या यह सही है।
ओ ० '।

2

मूल रूप से दो दृष्टिकोण हैं:

  1. विश्वसनीय ग्राहक
  2. असत्य ग्राहक

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

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

यदि आप किसी प्रकार की लॉबी या चैट करने की योजना बना रहे हैं तो इन विषयों में से प्रत्येक को एक अतिरिक्त सर्वर में संभाल लें। यह चीजों को सड़क पर बहुत आसान बना देगा।


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

1
"मेरे पास कई खिलाड़ी नहीं होंगे ..." मैं उस लाइन को देने वाले डेवलपर्स की संख्या की गिनती नहीं कर सकता और छह हफ्ते बाद वापस आऊंगा: "मेरे पास इन 5000 खिलाड़ियों को अपना गेम खेलने के लिए भुगतान करने की इच्छा है, लेकिन मैं स्केल नहीं कर सकता :( "। बस इतना ध्यान में रखें!
एंड्रियास

9
"विश्वसनीय ग्राहक" एक दृष्टिकोण नहीं है, यह एक गलती है।
ओ ० '।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.