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

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

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

एक सरल गेम बनाएं

बनाकर शुरुआत करें एक सरल खेल जहां खिलाड़ी घूम सकता है बाएँ और दाएँ।

इस आलेख में प्रयुक्त कोड इसमें उपलब्ध है गिटहब रिपॉजिटरी और यह आपके लिए एमआईटी लाइसेंस के तहत उपयोग करने के लिए निःशुल्क है।

नामक एक नई फ़ाइल बनाएँ Simple-game.py और नीचे दिया गया कोड जोड़ें:

आयात आर्केड

स्क्रीन_चौड़ाई = 800
स्क्रीन_ऊंचाई = 600
प्लेयर_स्पीड = 5
नीला = आर्केड.रंग. नीला

कक्षागेमविंडो(आर्केड. खिड़की):
डीईएफ़__इस में__(स्वयं, चौड़ाई, ऊंचाई):
सुपर().__init__(चौड़ाई, ऊंचाई)
self.player_x = चौड़ाई // 2

डीईएफ़on_draw(खुद):

instagram viewer

आर्केड.स्टार्ट_रेंडर()
आर्केड.ड्रॉ_रेक्टेंगल_फिल्ड (स्वयं.गेम_स्टेट.प्लेयर_एक्स,
50, 50, 50, नीला)

डीईएफ़अद्यतन(स्वयं, डेल्टा_समय):
उत्तीर्ण

डीईएफ़on_key_press(स्वयं, कुंजी, संशोधक):
अगर कुंजी == आर्केड.कुंजी। बाएं:
self.player_x -= PLAYER_SPEED
एलिफ़ कुंजी == आर्केड.कुंजी। सही:
self.player_x += PLAYER_SPEED

डीईएफ़मुख्य():
विंडो = गेमविंडो (स्क्रीन_चौड़ाई, स्क्रीन_ऊंचाई)
आर्केड.रन()

अगर __नाम__ == '__मुख्य__':
मुख्य()

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

गेम स्टेट्स का प्रबंधन

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

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

कक्षागेमस्टेट:
डीईएफ़__इस में__(खुद):
self.player_x = 0

गेम डेटा सहेजा जा रहा है

गेम डेटा को सहेजने के लिए, का विस्तार करें गेमविंडो क्लास करें और जब भी आवश्यक हो खेल स्थिति को बचाने के लिए एक विधि जोड़ें। सरलता के लिए JSON प्रारूप का उपयोग करें. यहाँ कोड है:

में खेल को सेव करें तरीका, एक पायथन डिक्शनरी बनाएं प्रासंगिक गेम डेटा युक्त। फिर इसे JSON फ़ाइल में क्रमबद्ध करें जिसे कहा जाता है save.json.

आयात json

कक्षागेमविंडो(आर्केड. खिड़की):
डीईएफ़__इस में__(स्वयं, चौड़ाई, ऊंचाई):
सुपर().__init__(चौड़ाई, ऊंचाई)
self.game_state = GameState()

डीईएफ़खेल को सेव करें(खुद):
डेटा = {
'प्लेयर_एक्स': self.game_state.player_x
}
साथ खुला('save.json', 'डब्ल्यू') जैसा फ़ाइल:
json.dump (डेटा, फ़ाइल)
प्रिंट (डेटा)

डीईएफ़on_draw(खुद):
आर्केड.स्टार्ट_रेंडर()
आर्केड.ड्रॉ_रेक्टेंगल_फिल्ड (स्वयं.गेम_स्टेट.प्लेयर_एक्स,
50, 50, 50, नीला)

डीईएफ़अद्यतन(स्वयं, डेल्टा_समय):
उत्तीर्ण

डीईएफ़on_key_press(स्वयं, कुंजी, संशोधक):
अगर कुंजी == आर्केड.कुंजी। बाएं:
self.game_state.player_x -= PLAYER_SPEED
एलिफ़ कुंजी == आर्केड.कुंजी। सही:
self.game_state.player_x += PLAYER_SPEED
एलिफ़ कुंजी == आर्केड.कुंजी। एस:
self.save_game()

गेम डेटा लोड हो रहा है

गेम डेटा लोड करने के लिए, का विस्तार करें गेमविंडो आगे क्लास करें और गेम स्थिति को लोड करने के लिए एक विधि जोड़ें। नामक एक नई फ़ाइल बनाएँ लोड-गेम.पी.ई और नीचे दिए गए अपडेट के साथ कोड जोड़ें:

कक्षागेमविंडो(आर्केड. खिड़की):
डीईएफ़__इस में__(स्वयं, चौड़ाई, ऊंचाई):
सुपर().__init__(चौड़ाई, ऊंचाई)
self.game_state = GameState()
self.load_game()

डीईएफ़खेल लोड करें(खुद):
कोशिश:
साथ खुला('save.json', 'आर') जैसा फ़ाइल:
डेटा = json.load (फ़ाइल)
self.game_state.player_x = डेटा['प्लेयर_एक्स']
के अलावा FileNotFoundत्रुटि:
उत्तीर्ण

डीईएफ़on_key_press(स्वयं, कुंजी, संशोधक):
अगर कुंजी == आर्केड.कुंजी। एल:
self.load_game()

खेल लोड करें विधि खोलने का प्रयास करती है save.json फ़ाइल करें और गेम डेटा पुनः प्राप्त करें। इसके बाद यह लोड किए गए डेटा के साथ गेम स्थिति को अपडेट करता है। यदि फ़ाइल मौजूद नहीं है, तो आप डिफ़ॉल्ट गेम स्थिति को छोड़कर, अपवाद को अनदेखा कर सकते हैं।

अतिरिक्त सुविधाओं सहित

आप गेम के सेव और लोड सिस्टम को बेहतर बनाने के लिए और अधिक सुविधाएँ जोड़ सकते हैं।

उच्च स्कोर सहेजा जा रहा है

खेल की स्थिति के साथ-साथ उच्च स्कोर सहेजना कई खेलों में एक सामान्य विशेषता है। तुम कर सकते हो स्कोर प्रबंधित करें और इस प्रणाली का उपयोग करके उच्च स्कोर बचाएं। नामक एक नई फ़ाइल बनाएँ हाई-स्कोर.py और नीचे दिए गए अपडेट के साथ कोड जोड़ें:

कक्षागेमविंडो(आर्केड. खिड़की):
डीईएफ़__इस में__(स्वयं, चौड़ाई, ऊंचाई):
सुपर().__init__(चौड़ाई, ऊंचाई)
self.high_score = 0

डीईएफ़खेल लोड करें(खुद):
कोशिश:
साथ खुला('save.json', 'आर') जैसा फ़ाइल:
डेटा = json.load (फ़ाइल)
प्रिंट (डेटा)
self.player_x = data.get('प्लेयर_एक्स', self.player_x)
self.high_score = data.get('उच्च स्कोर', स्व.उच्च_अंक)
के अलावा FileNotFoundत्रुटि:
उत्तीर्ण

डीईएफ़खेल को सेव करें(खुद):
डेटा = {
'प्लेयर_एक्स': self.player_x,
'उच्च स्कोर': self.high_score
}
साथ खुला('save.json', 'डब्ल्यू') जैसा फ़ाइल:
json.dump (डेटा, फ़ाइल)
प्रिंट (डेटा)

डीईएफ़on_key_press(स्वयं, कुंजी, संशोधक):
अगर कुंजी == आर्केड.कुंजी। बाएं:
self.player_x -= PLAYER_SPEED
एलिफ़ कुंजी == आर्केड.कुंजी। सही:
self.player_x += PLAYER_SPEED
self.high_score += 1

स्वतः सहेजें सुविधा

खिलाड़ियों को मानसिक शांति प्रदान करने और प्रगति के नुकसान को रोकने के लिए, आप नियमित अंतराल पर खेल की स्थिति को स्वचालित रूप से सहेज सकते हैं। नामक एक नई फ़ाइल बनाएँ auto-save.py और नीचे दिए गए अपडेट के साथ कोड जोड़ें:

आयात समय

कक्षागेमविंडो(आर्केड. खिड़की):
डीईएफ़__इस में__(स्वयं, चौड़ाई, ऊंचाई):
सुपर().__init__(चौड़ाई, ऊंचाई)
self.game_state = GameState()

# हर 6 सेकंड में बचत करें
self.autosave_interval = 6
self.last_save_time = समय.समय()

डीईएफ़अद्यतन(स्वयं, डेल्टा_समय):
वर्तमान_समय = समय.समय()
time_diff = current_time - self.last_save_time

अगर time_diff >= self.autosave_interval:
self.save_game()
प्रिंट("बचाया")
स्वयं.अंतिम_सहेजें_समय = वर्तमान_समय

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

गेम डेटा का सत्यापन

लोड किए गए गेम डेटा को सत्यापित करना इसकी अखंडता और स्थिरता सुनिश्चित करने के लिए आवश्यक है। आप हमारे सेव और लोड सिस्टम में डेटा सत्यापन को आसानी से शामिल कर सकते हैं:

कक्षागेमस्टेट:
डीईएफ़__इस में__(खुद):
self.player_x = 0

डीईएफ़राज्य बचाओ(खुद):
अगर self.is_valid_state():
डेटा = {
'प्लेयर_एक्स': self.player_x
}

साथ खुला('save.json', 'डब्ल्यू') जैसा फ़ाइल:
json.dump (डेटा, फ़ाइल)

डीईएफ़राज्य लोड करें(खुद):
साथ खुला('save.json', 'आर') जैसा फ़ाइल:
डेटा = json.load (फ़ाइल)

अगर self.validate_loaded_data (डेटा):
self.player_x = डेटा['प्लेयर_एक्स']
अन्य:
प्रिंट("गलती!")

डीईएफ़is_valid_state(खुद):
# यहां सत्यापन तर्क निष्पादित करें
# यदि स्थिति वैध है तो सत्य लौटाएं, अन्यथा गलत लौटाएं
उत्तीर्ण

डीईएफ़मान्य_लोडेड_डेटा(स्वयं, डेटा):
# लोड किए गए डेटा पर सत्यापन करें
# यदि डेटा वैध है तो सही लौटाएं, अन्यथा गलत लौटाएं
उत्तीर्ण

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

सेव और लोड सिस्टम के लिए सर्वोत्तम अभ्यास

सेव और लोड सिस्टम लागू करना गेम विकास का एक महत्वपूर्ण पहलू है। एक मजबूत और विश्वसनीय प्रणाली सुनिश्चित करने के लिए सर्वोत्तम प्रथाओं का पालन करना आवश्यक है। यहां विचार करने योग्य कुछ प्रमुख प्रथाएं दी गई हैं:

संवेदनशील डेटा एन्क्रिप्ट करें

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

लोड किए गए डेटा को मान्य करें

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

क्रैश या धोखाधड़ी से बचने के लिए महत्वपूर्ण डेटा फ़ील्ड पर सत्यापन जांच करें। संभावित त्रुटियों या अप्रत्याशित डेटा को संभालने के लिए मजबूत डेटा सत्यापन तंत्र लागू करें।

त्रुटियों को शालीनता से संभालें

फ़ाइल I/O परिचालनों से निपटते समय त्रुटियाँ हो सकती हैं। इन त्रुटियों को शालीनता से संभालना और खिलाड़ी को सूचनात्मक त्रुटि संदेश प्रदान करना महत्वपूर्ण है। जैसे अपवादों को पकड़ें और संभालें FileNotFoundError या अनुमति त्रुटि, सेव और लोड ऑपरेशन के दौरान।

खिलाड़ियों का मार्गदर्शन करने और निराशा को रोकने के लिए उपयोगकर्ता के अनुकूल त्रुटि संदेश प्रदर्शित करें। इसके अतिरिक्त, समस्याओं के निदान और समाधान में सहायता के लिए त्रुटि लॉगिंग लागू करने पर विचार करें।

सेव और लोड कार्यक्षमता का परीक्षण करें

इसकी विश्वसनीयता और शुद्धता सुनिश्चित करने के लिए अपने गेम की सेव और लोड कार्यक्षमता का पूरी तरह से परीक्षण करें। ऐसे परीक्षण मामले बनाएं जो विभिन्न परिदृश्यों को कवर करते हों, जैसे विभिन्न गेम स्थितियों में बचत करना, वैध और अमान्य सेव फ़ाइलों से लोड करना और किनारे के मामलों का परीक्षण करना।

सत्यापित करें कि गेम स्थिति ठीक से सहेजी और लोड की गई है और अपेक्षित व्यवहार होता है। स्वचालित परीक्षण ढाँचे व्यापक परीक्षण सूट बनाने में सहायता कर सकते हैं।

सेव और लोड सिस्टम के साथ गेम्स को और अधिक मज़ेदार बनाएं

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

यह सुविधा खिलाड़ियों को दोस्तों के साथ प्रतिस्पर्धा करने या अपने पिछले उच्च स्कोर को हराने के लिए खुद को चुनौती देने की अनुमति देती है, जिससे आपके गेम में दोबारा खेलने की क्षमता और दीर्घकालिक जुड़ाव जुड़ जाता है।