2012-04-01 12 views
13

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

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

केवल एक ही जानकारी जो भेजने की जरूरत है वह खिलाड़ियों, क्रीप्स और गोलियों की स्थिति है।

मैं चारों ओर पढ़ रहा हूं और ट्विस्ट आ रहा है, लेकिन मैंने पहले नेटवर्किंग नहीं की है और मुझे यकीन नहीं है कि यह एक ओवरकिल हो सकता है।

तो, क्या यह एक सापेक्ष नौसिखिया के लिए Pygame में नेटवर्किंग को लागू करना संभव है? क्या कोई मुझे सही दिशा दिखा सकता है?

उत्तर

11

यह हाल ही में रेडडिट पर पूछा गया था, इसलिए मैं वहां से अपने उत्तर की प्रतिलिपि बना दूंगा। मैं अधिक लिंक प्रदान करने में सक्षम नहीं होने के लिए क्षमा चाहता हूं, मेरे पास < 10 प्रतिनिधि है इसलिए मैं केवल एक समय में दो पोस्ट कर सकता हूं।

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

पायथन विशिष्ट सॉकेट के लिए, आप आगे बढ़ सकते हैं और केवल howto (user745294 उपरोक्त लिंक पोस्ट) का उपयोग कर सकते हैं। Here "अच्छा प्रोग्रामर गेम गेमिंग के बारे में जानने की ज़रूरत है" शीर्षक वाला एक अच्छा लेख है। यह विभिन्न प्रकार की प्रमुख नेटवर्किंग शैलियों (क्लाइंट-सर्वर, पी 2 पी, udp वी। टीसीपी, इत्यादि) में जाता है और उनके नेटवर्किंग के लिए उपयोग किए जाने वाले कुछ प्रमुख गेम के पीछे इतिहास।

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

http://www.mediafire.com/?bjwr225lpefzkfj

+0

यदि आप मीडियाफायर नहीं जाना चाहते हैं तो क्लाइंट/सर्वर के कुछ कोडपैड लिंक यहां दिए गए हैं (आपको अपना स्वयं का bg.png और sprite.png प्रदान करना होगा)। सर्वर: http://codepad.org/p9lVrmqn क्लाइंट: http://codepad.org/e6pwGj24 – nemec

+1

मीडियाफायर लिंक वैसे भी मर चुका है, ऐसा लगता है। कोडपैड लिंक हालांकि महान हैं, धन्यवाद! –

0

अग्निछाया (अजगर दूरस्थ वस्तु) अजगर में नेटवर्किंग के लिए एक और समाधान के रूप में नहीं है।

http://irmen.home.xs4all.nl/pyro/

+0

किसी भी अविश्वसनीय संचार के लिए पाइरो का उपयोग न करें। यह निश्चित रूप से इंटरनेट पर खेले जाने वाले गेम के लिए उपयुक्त नहीं है। http://packages.python.org/Pyro4/security.html#pickle-as-serialization-format – Glyph

+0

मैं मानता हूं कि इसके लिए सबसे अच्छा उपयोग केस नहीं है, इंगित करने के लिए धन्यवाद। – Tshirtman

0

कच्चे सॉकेट का उपयोग करते हुए निम्न स्तर और खतरे से भरा है। जैसा कि पहले कहा गया था, मुड़ जटिल है और समय उठने और चलने में लग रहा है। अपने आप को कुछ सिर दर्द को बचाने के लिए मैं https://github.com/dotcloud/zerorpc-python

की तरह कुछ की कोशिश करता हूँ आप निम्न समाधानों की जरूरत है:

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

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

अद्यतन:

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

+2

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

1

चूंकि आप पहले से ही पायगम का उपयोग कर रहे हैं, मुझे लगता है कि पिगमेम के लिए बनाई गई यह प्रकाश नेटवर्किंग lib आपको जो चाहिए वह करेगा और आपको सिखाएगी। "Mastermind Networking Lib" via pygame.org

6

आप Py12ame के साथ नेटवर्किंग के लिए Twisted का उपयोग कर सकते हैं। लॉन्चपैड पर The "game" project के कुछ उदाहरण हैं कि कैसे मुख्य लूप को एक साथ एकीकृत कर सकते हैं; मूल रूप से, Pygame फ्रेम खींचने और इनपुट को संभालने के लिए twisted.internet.task.LoopingCall का उपयोग करें, जबकि आपकी पसंद के ट्विस्ट रिएक्टर को सामान्य रूप से चलाना।

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