ما لم تكن لعبتك قصيرة جدًا ، فمن المفيد أن تكون قادرًا على حفظ التقدم. حتى الألعاب القصيرة يمكن أن تستفيد من توفير درجات عالية.
يمكن أن تؤدي إضافة نظام حفظ وتحميل إلى لعبتك إلى تحسين تجربة اللاعب بشكل كبير. يسمح للاعبين بمواصلة تقدمهم واستئناف جلسات اللعب وتجربة استراتيجيات مختلفة دون خسارة الإنجازات التي تحققت بشق الأنفس.
ستفاجأ بسرور بمدى سهولة إضافة هذه الميزة إلى لعبتك باستخدام مكتبة Python's Arcade.
قم بإنشاء لعبة بسيطة
ابدأ بإنشاء ملفات لعبة بسيطة حيث يمكن للاعب التحرك يسار و يمين.
الكود المستخدم في هذه المقالة متوفر في هذا مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.
قم بإنشاء ملف جديد باسم لعبة بسيطة وأضف الكود التالي:
يستورد ممر
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SPEED = 5
أزرق = لون الممرات. أزرقفصلGameWindow(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع)
self.player_x = العرض // 2defon_draw(الذات):
arcade.start_render ()
arcade.draw_rectangle_filled (self.game_state.player_x ،
50, 50, 50، أزرق)defتحديث(ذاتي ، delta_time):
يمرdefon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.player_x - = PLAYER_SPEED
أليف مفتاح == arcade.key. يمين:
self.player_x + = PLAYER_SPEEDdefرئيسي():
نافذة = GameWindow (SCREEN_WIDTH ، SCREEN_HEIGHT)
arcade.run ()
لو __name__ == '__رئيسي__':
رئيسي()
يقوم الكود بإنشاء نافذة بها مستطيل أزرق يمثل اللاعب. يمكن للاعب التحرك إلى اليسار واليمين باستخدام مفاتيح الأسهم اليمنى واليسرى.
إدارة دول اللعبة
لتنفيذ نظام الحفظ والتحميل ، تحتاج إلى إدارة حالات اللعبة المختلفة. تمثل حالة اللعبة الحالة الحالية للعبة ، بما في ذلك مواضع العناصر والنتائج والبيانات الأخرى ذات الصلة. في هذا المثال ، ركز فقط على إحداثي x الخاص باللاعب.
لإدارة حالات اللعبة ، قم بتقديم ملف GameState فئة تغلف بيانات اللعبة وتوفر طرقًا لحفظها وتحميلها. ها هو الكود:
فصلGameState:
def__فيه__(الذات):
self.player_x = 0
حفظ بيانات اللعبة
لحفظ بيانات اللعبة ، قم بتوسيع نطاق GameWindow فئة وإضافة طريقة لحفظ حالة اللعبة كلما لزم الأمر. استخدم تنسيق JSON للبساطة. ها هو الكود:
في ال حفظ اللعبة طريقة، إنشاء قاموس بايثون تحتوي على بيانات اللعبة ذات الصلة. ثم قم بتسلسلها في ملف JSON يسمى save.json.
يستورد json
فصلGameWindow(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع)
self.game_state = GameState ()defحفظ اللعبة(الذات):
البيانات = {
"player_x": self.game_state.player_x
}
مع يفتح("save.json", 'w') مثل ملف:
json.dump (بيانات ، ملف)
طباعة (بيانات)defon_draw(الذات):
arcade.start_render ()
arcade.draw_rectangle_filled (self.game_state.player_x ،
50, 50, 50، أزرق)defتحديث(ذاتي ، delta_time):
يمر
defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.game_state.player_x - = PLAYER_SPEED
أليف مفتاح == arcade.key. يمين:
self.game_state.player_x + = PLAYER_SPEED
أليف مفتاح == arcade.key. س:
self.save_game ()
تحميل بيانات اللعبة
لتحميل بيانات اللعبة ، قم بتمديد ملف GameWindow فئة أخرى وإضافة طريقة لتحميل حالة اللعبة. قم بإنشاء ملف جديد باسم تحميل اللعبة وأضف الكود مع التحديثات أدناه:
فصلGameWindow(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع)
self.game_state = GameState ()
self.load_game ()defلعبة تحميل(الذات):
يحاول:
مع يفتح("save.json", 'r') مثل ملف:
data = json.load (ملف)
self.game_state.player_x = البيانات ["player_x"]
يستثني FileNotFoundError:
يمر
defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. L:
self.load_game ()
ال لعبة تحميل الطريقة التي تحاول فتح save.json ملف واسترداد بيانات اللعبة. ثم يقوم بتحديث حالة اللعبة بالبيانات المحملة. إذا كان الملف غير موجود ، يمكنك فقط تجاهل الاستثناء ، وترك حالة اللعبة الافتراضية.
بما في ذلك الميزات الإضافية
يمكنك إضافة المزيد من الميزات لتحسين نظام حفظ وتحميل اللعبة.
حفظ نتائج عالية
يعد حفظ النتائج العالية جنبًا إلى جنب مع حالة اللعبة ميزة شائعة في العديد من الألعاب. أنت تستطيع إدارة النتائج وحفظ الدرجة العالية باستخدام هذا النظام. قم بإنشاء ملف جديد باسم درجات عالية وأضف الكود مع التحديثات أدناه:
فصلGameWindow(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع)
self.high_score = 0defلعبة تحميل(الذات):
يحاول:
مع يفتح("save.json", 'r') مثل ملف:
data = json.load (ملف)
طباعة (بيانات)
self.player_x = data.get ("player_x"، self.player_x)
self.high_score = data.get ('درجة عالية'، self.high_score)
يستثني FileNotFoundError:
يمرdefحفظ اللعبة(الذات):
البيانات = {
"player_x": self.player_x،
'درجة عالية': self.high_score
}
مع يفتح("save.json", 'w') مثل ملف:
json.dump (بيانات ، ملف)
طباعة (بيانات)
defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.player_x - = PLAYER_SPEED
أليف مفتاح == arcade.key. يمين:
self.player_x + = PLAYER_SPEED
self.high_score + = 1
ميزة الحفظ التلقائي
لتزويد اللاعبين براحة البال ومنع فقدان التقدم ، يمكنك حفظ حالة اللعبة تلقائيًا على فترات منتظمة. قم بإنشاء ملف جديد باسم auto-save.py وأضف الكود مع التحديثات أدناه:
يستورد وقت
فصلGameWindow(ممر. نافذة او شباك):
def__فيه__(ذاتي ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ (العرض ، الارتفاع)
self.game_state = GameState ()# احفظ كل 6 ثوان
self.autosave_interval = 6
self.last_save_time = time.time ()defتحديث(ذاتي ، delta_time):
current_time = time.time ()
time_diff = current_time - self.last_save_time. فارق الوقت = الوقت الحالي - self.last_save_time
لو time_diff> = self.autosave_interval:
self.save_game ()
مطبعة("أنقذ")
self.last_save_time = current_time
في مقتطف الشفرة هذا ، يكون ملف تحديث يتحقق الأسلوب مما إذا كان الفاصل الزمني المحدد قد مر منذ آخر حفظ. إذا كان الأمر كذلك ، فإنه يقوم بتشغيل ملف حفظ اللعبة طريقة GameWindow فئة لحفظ حالة اللعبة تلقائيًا. أضبط ال الحفظ_الفترة الزمنية القيمة وفقًا لمتطلبات لعبتك.
التحقق من صحة بيانات اللعبة
يعد التحقق من صحة بيانات اللعبة المحملة أمرًا ضروريًا لضمان سلامتها واتساقها. يمكنك بسهولة دمج التحقق من صحة البيانات في نظام الحفظ والتحميل الخاص بنا:
فصلGameState:
def__فيه__(الذات):
self.player_x = 0defحالة الحفظ(الذات):
لو self.is_valid_state ():
البيانات = {
"player_x": self.player_x
}مع يفتح("save.json", 'w') مثل ملف:
json.dump (بيانات ، ملف)defالدولة الحمل(الذات):
مع يفتح("save.json", 'r') مثل ملف:
data = json.load (ملف)لو self.validate_loaded_data (البيانات):
self.player_x = البيانات ["player_x"]
آخر:
مطبعة("خطأ!")defis_valid_state(الذات):
# نفذ منطق التحقق من الصحة هنا
# إرجاع صحيح إذا كانت الحالة صحيحة ، وخطأ خلاف ذلك
يمر
defالتحقق من صحة البيانات(النفس ، البيانات):
# إجراء التحقق من صحة البيانات المحملة
# إرجاع صحيح إذا كانت البيانات صحيحة ، خطأ خلاف ذلك
يمر
من خلال دمج هذه الميزات الإضافية في نظام الحفظ والتحميل ، يمكنك إنشاء طريقة لعب أكثر تنوعًا وقوة تجربة ، مما يمنح اللاعبين القدرة على حفظ حالات متعددة للعبة ، وتتبع النتائج العالية ، وتمكين الحفظ التلقائي ، وضمان البيانات نزاهة.
أفضل الممارسات لنظام الحفظ والتحميل
يعد تنفيذ نظام الحفظ والتحميل جانبًا مهمًا من جوانب تطوير اللعبة. لضمان نظام قوي وموثوق ، من الضروري اتباع أفضل الممارسات. فيما يلي بعض الممارسات الرئيسية التي يجب مراعاتها:
تشفير البيانات الحساسة
إذا كانت لعبتك تتضمن معلومات حساسة مثل كلمات المرور أو البيانات الشخصية أو عمليات الشراء داخل التطبيق ، فمن الضروري تشفير حالة اللعبة المحفوظة. يضيف التشفير طبقة إضافية من الأمان ، ويحمي خصوصية اللاعب ويمنع الوصول غير المصرح به إلى بياناته. استخدم خوارزميات التشفير والمكتبات لحماية المعلومات الحساسة.
التحقق من صحة البيانات المحملة
قبل تحميل بيانات اللعبة ، من الضروري التحقق من صحتها لضمان سلامتها واتساقها. تحقق من أن البيانات المحملة تلتزم بالتنسيق والبنية والقيود المتوقعة للعبتك.
قم بإجراء عمليات التحقق من صحة حقول البيانات الهامة لتجنب الأعطال أو الغش. تنفيذ آليات قوية للتحقق من صحة البيانات للتعامل مع الأخطاء المحتملة أو البيانات غير المتوقعة.
تعامل مع الأخطاء بأمان
عند التعامل مع عمليات إدخال / إخراج الملف ، يمكن أن تحدث أخطاء. من الضروري التعامل مع هذه الأخطاء بأمان وتقديم رسائل خطأ إعلامية للاعب. قبض على الاستثناءات والتعامل معها ، مثل FileNotFoundError أو إذن خطأ، أثناء عمليات الحفظ والتحميل.
عرض رسائل خطأ سهلة الاستخدام لتوجيه اللاعبين ومنع الإحباط. بالإضافة إلى ذلك ، ضع في اعتبارك تنفيذ تسجيل الأخطاء للمساعدة في تشخيص المشكلات وإصلاحها.
اختبار وظيفة حفظ وتحميل
اختبر بدقة وظائف الحفظ والتحميل في لعبتك لضمان موثوقيتها وصحتها. قم بإنشاء حالات اختبار تغطي سيناريوهات مختلفة ، مثل الحفظ في حالات اللعبة المختلفة ، والتحميل من ملفات الحفظ الصالحة وغير الصالحة ، واختبار حالات الحافة.
تحقق من أن حالة اللعبة تم حفظها وتحميلها بشكل صحيح وأن السلوك المتوقع يحدث. يمكن أن تساعد أطر عمل الاختبار الآلي في إنشاء مجموعات اختبار شاملة.
اجعل الألعاب أكثر متعة مع نظام الحفظ والتحميل
يمكن أن تؤدي إضافة نظام حفظ وتحميل إلى جعل الألعاب أكثر جاذبية من خلال تزويد اللاعبين بشعور بالاستمرارية والتقدم. يمكن للاعبين التجربة بحرية ، وتجربة أساليب مختلفة ، والعودة إلى اللعبة لاحقًا دون فقدان إنجازاتهم.
تتيح هذه الميزة أيضًا للاعبين التنافس مع الأصدقاء أو تحدي أنفسهم للتغلب على نتائجهم العالية السابقة ، مما يضيف إمكانية إعادة اللعب والمشاركة طويلة المدى في لعبتك.