تعرف على كيفية دمج ميزة حفظ وتحميل تقدم اللعبة للحصول على تجربة لعب سلسة.
في تطوير اللعبة الحديثة ، تعد القدرة على حفظ وتحميل تقدم اللعبة ميزة حاسمة تعزز تجربة المستخدم والمشاركة. توفر PyGame ، وهي مكتبة شهيرة لإنشاء ألعاب ثنائية الأبعاد في Python ، الأدوات اللازمة لتنفيذ ميزة الحفظ والتحميل دون عناء.
إنشاء لعبة بسيطة
قبل أن تبدأ ، تأكد من أن لديك نقطة مثبتة على جهازك. بعد تثبيت pip ، قم بتشغيل الأمر أدناه لتثبيت ملف القزم وحدة:
نقطة تثبيت pygame
لتوضيح تنفيذ نظام الحفظ والتحميل في PyGame ، ابدأ بإنشاء لعبة بسيطة.
الكود المستخدم في هذه المقالة متوفر في هذا مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.
في هذه اللعبة ، سيكون لدى اللاعب القدرة على التحرك يمينًا ويسارًا. إليك مثال مقتطف رمز يوضح بنية اللعبة الأساسية:
يستورد القزم
# تهيئة Pygame
pygame.init ()# قم بإعداد نافذة اللعبة
window_width = 800
window_height = 600
window = pygame.display.set_mode ((window_width، window_height))
pygame.display.set_caption ("حفظ وتحميل البرنامج التعليمي للنظام")# متغيرات اللعبة
player_x = 400
player_y = 500
player_speed = 5# حلقة اللعبة
تشغيل = حقيقي
بينما جري:
ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
تشغيل = خطأ شنيعمفاتيح = pygame.key.get_pressed ()
لو مفاتيح [pygame. K_LEFT]:
player_x - = player_speed
لو مفاتيح [pygame. K_RIGHT]:
player_x + = player_speed# امسح الشاشة
window.fill ((0, 0, 0))# ارسم اللاعب
pygame.draw.rect (نافذة ، (255, 255, 255) ، (player_x ، player_y ، 50, 50))# تحديث العرض
pygame.display.flip ()
# إنهاء اللعبة
pygame.quit ()
إدارة حالة اللعبة واستمرار البيانات
قبل تنفيذ وظيفة الحفظ والتحميل ، تحتاج إلى إنشاء طريقة لإدارة حالة اللعبة واستمرار البيانات. نهج واحد مشترك هو استخدم قاموس بايثون لتخزين بيانات اللعبة ذات الصلة. فيما يلي مثال لكيفية تعديل الكود السابق ليشمل إدارة حالة اللعبة:
# متغيرات اللعبة
game_state = {
"player_x": 400,
"player_y": 500
}# حلقة اللعبة
تشغيل = حقيقي
بينما جري:
# ...مفاتيح = pygame.key.get_pressed ()
لو مفاتيح [pygame. K_LEFT]:
game_state ["player_x"] - = player_speed
لو مفاتيح [pygame. K_RIGHT]:
game_state ["player_x"] + = player_speed# ...
pygame.display.flip ()
تنفيذ وظيفة حفظ وتحميل
لتمكين حفظ وتحميل تقدم اللعبة ، يمكنك الاستفادة من لغة Python المدمجة ورطة الوحدة النمطية ، والتي تسمح لنا بتسلسل كائنات بايثون وإلغاء تسلسلها. قم بإنشاء ملف جديد باسم save-game.py وأضف الكود مع التحديثات أدناه:
game_state = {
"player_x": player_x،
"player_y": player_y
}# حفظ حالة اللعبة
defsave_game_state(game_state ، file_name):
يحاول:
مع فتح (اسم_الملف ، "wb") مثل ملف:
pickle.dump (game_state ، ملف)
مطبعة("تم حفظ حالة اللعبة بنجاح!")
يستثني IO خطأ:
مطبعة("خطأ: تعذر حفظ حالة اللعبة.")# تحميل حالة اللعبة
defload_game_state(اسم الملف):
يحاول:
مع فتح (اسم_الملف ، 'rb') مثل ملف:
game_state = pickle.load (ملف)
مطبعة("تم تحميل حالة اللعبة بنجاح!")
يعود game_state
يستثني (خطأ ، مخلل. UnpicklingError):
مطبعة("خطأ: تعذر تحميل حالة اللعبة.")# حلقة اللعبة
تشغيل = حقيقي
بينما جري:# ...
مفاتيح = pygame.key.get_pressed ()
لو مفاتيح [pygame. K_LEFT]:
player_x - = player_speed
game_state ["player_x"] = player_x
لو مفاتيح [pygame. K_RIGHT]:
player_x + = player_speed
game_state ["player_x"] = player_xلو مفاتيح [pygame. K_s]:
save_game_state (game_state ، "save_game.pickle")
لو مفاتيح [pygame. ك_ ل]:
game_state = load_game_state ("save_game.pickle")
player_x = game_state ["player_x"]
# ...
# ...
أدناه هو الإخراج:
تصميم واجهة مستخدم لـ Save Slots
لتوفير واجهة حفظ وتحميل ، يمكنك عرض فتحات حفظ تسمح للاعب باختيار الفتحة التي يجب حفظها أو تحميلها. في هذا المثال ، يتم عرض الخيارات في وحدة التحكم ، ولكن يمكنك استخدامها أطر عمل Python GUI لإنشاء واجهة أكثر سهولة في الاستخدام.
إنشاء save_slots القائمة التي تمثل فتحات الحفظ المتاحة. أيضًا ، أضف ملف selected_slot متغير لتتبع الفتحة التي اختارها اللاعب.
أظهر فتحات الحفظ المتاحة عندما يضغط اللاعب على زر الحفظ (ك_س). يمكن للاعب اختيار فتحة بالضغط على مفتاح الرقم المقابل (K_1, K_2، أو K_3). إذا تم تحديد فتحة ، فسيتم حفظ حالة اللعبة في ملف مسمى على اسم الفتحة المحددة.
وبالمثل ، عندما يضغط اللاعب على زر التحميل (ك_ل) ، اعرض فتحات الحفظ. يمكن للاعب اختيار فتحة بالضغط على المفاتيح ك_ا, ك_ ب، أو ك_ ج لتحميل حالة اللعبة. بدلا من ذلك ، يمكنك استخدام مدخلات اللمس بدلاً من مدخلات لوحة المفاتيح لاختيار الفتحة. إذا تم تحديد فتحة ، يتم تحميل حالة اللعبة من الملف المقابل.
قم بإنشاء ملف جديد باسم واجهة وأضف الكود مع التحديثات أدناه:
# متغيرات اللعبة
save_slots = ['فتحة 1', "الفتحة 2", "الفتحة 3"]
selected_slot = لا أحد# حلقة اللعبة
تشغيل = حقيقي
بينما جري:
ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
تشغيل = خطأ شنيعلو event.type == pygame. زر أسفل:
لو event.key == pygame. ك_س:
# عرض حفظ الفتحات
selected_slot = لا أحد
ل أنا فتحة في عدّد (save_slots):
مطبعة(و "فتحة حفظ {أنا +1}: {فتحة}")
مطبعة("اختر فتحة لحفظ اللعبة.")لو event.key == pygame. ك_ ل:
مطبعة("Select Slot: - a - Slot 1، b - Slot 3، c - Slot 3")
# عرض حفظ الفتحات
selected_slot = لا أحد
ل أنا فتحة في عدّد (save_slots):
مطبعة(و "فتحة حفظ {أنا +1}: {فتحة}")
مطبعة("اختر فتحة لتحميل اللعبة.")لو event.key في [القزم. K_1 ، pygame. K_2 ، pygame. K_3]:
# حفظ أو تحميل اللعبة على أساس الفتحة المحددة
slot_index = event.key - pygame. K_1
selected_slot = save_slots [slot_index]
save_game_state (game_state ، F"{selected_slot}.ورطة")
مطبعة(f "تم حفظ اللعبة في {selected_slot}!")لو event.key في [القزم. K_a ، pygame. K_b ، pygame. K_c]:
slot_index = event.key - pygame. ك_ا
selected_slot = save_slots [slot_index]
game_state = load_game_state (F"{selected_slot}.ورطة")
player_x = game_state ["player_x"]
مطبعة(f "تم تحميل اللعبة من {selected_slot}!")
# ...pygame.display.flip ()
# ...
أدناه هو الإخراج:
التعامل مع خيارات الكتابة
لتوفير خيارات لاستبدال عمليات الحفظ الحالية ، يمكنك تنفيذ رسالة تحذير تطالب المشغل بالتأكيد قبل الكتابة فوق ملف الحفظ. قم بإنشاء ملف جديد باسم overwriting-save.py وتعديل الكود مع التحديثات أدناه:
# حفظ حالة اللعبة
defsave_game_state(game_state ، file_name):
لو os.path.exists (اسم_الملف):
# مطالبة للتأكيد للكتابة فوق ملف الحفظ الحالي
الكتابة فوق = الإدخال ("حفظ الملف موجود بالفعل. هل تريد الكتابة؟ (ص / ن): ")
لو overwrite.lower ()! = "y":
مطبعة("تم إلغاء الحفظ".)
يعوديحاول:
مع فتح (اسم_الملف ، "wb") مثل ملف:
pickle.dump (game_state ، ملف)
مطبعة("تم حفظ حالة اللعبة بنجاح!")
يستثني IO خطأ:
مطبعة("خطأ: تعذر حفظ حالة اللعبة.")# ...
# تحميل حالة اللعبة
defload_game_state(اسم الملف):
لولا os.path.exists (اسم_الملف):
مطبعة("خطأ: حفظ الملف غير موجود.")
يعودلا أحديحاول:
مع فتح (اسم_الملف ، 'rb') مثل ملف:
game_state = pickle.load (ملف)
مطبعة("تم تحميل حالة اللعبة بنجاح!")
يعود game_state
يستثني (خطأ ، مخلل. UnpicklingError):
مطبعة("خطأ: تعذر تحميل حالة اللعبة.")
يعودلا أحد
# ...
في الكود أعلاه ، قبل حفظ حالة اللعبة ، تتحقق مما إذا كان ملف الحفظ موجودًا بالفعل باستخدام os.path.exists (). إذا كان الأمر كذلك ، فإنك تطلب من المشغل التأكيد على الكتابة فوق ملف الحفظ الحالي. إذا اختار اللاعب عدم الكتابة فوق ، يتم إلغاء عملية الحفظ.
وبالمثل ، قبل تحميل حالة اللعبة ، تتحقق مما إذا كان ملف الحفظ موجودًا باستخدام os.path.exists (). إذا لم يحدث ذلك ، فأنت تقوم بإبلاغ اللاعب برسالة خطأ.
أفضل الممارسات لنظام الحفظ والتحميل
عند تنفيذ نظام حفظ وتحميل في PyGame أو أي مشروع تطوير لعبة ، ضع في اعتبارك أفضل الممارسات التالية:
- استخدم بنية بيانات محددة جيدًا لتمثيل حالة اللعبة وتسلسلها باستخدام مكتبة تسلسل مثل ورطة. يتيح لك ذلك حفظ حالة اللعبة بالكامل وتحميلها بسهولة.
- قم بإنشاء دليل أو مجلد مخصص لتخزين الملفات المحفوظة. يساعد هذا في تنظيم الملفات المحفوظة ويمنع ازدحام دليل اللعبة الرئيسي.
- تنفيذ معالجة الأخطاء وتوفير رسائل خطأ إعلامية للمساعدة في تصحيح الأخطاء واستكشاف الأخطاء وإصلاحها. يساعد هذا اللاعبين على فهم أي مشكلات قد تنشأ أثناء عمليات الحفظ والتحميل.
- ضع في اعتبارك تنفيذ فتحات حفظ متعددة للسماح للاعبين بحفظ العديد من الألعاب. يمنح هذا اللاعبين المرونة لاستكشاف مسارات مختلفة أو إعادة تشغيل أقسام معينة من اللعبة دون تجاوز تقدمهم.
اجعل الألعاب أكثر تفاعلاً مع نظام الحفظ والتحميل
يمكن أن تؤدي إضافة ميزة الحفظ والتحميل إلى تعزيز التفاعل والتمتع باللعبة بشكل كبير. يسمح للاعبين بحفظ تقدمهم والعودة إلى اللعبة في الوقت الذي يناسبهم. علاوة على ذلك ، فإنه يفتح إمكانيات إنشاء عوالم ألعاب معقدة ، حيث يكون لاختيارات اللاعب وأفعاله عواقب دائمة.
من خلال تنفيذ نظام الحفظ والتحميل ، يمكنك تمكين اللاعبين لديك للحصول على تجربة ألعاب أكثر غامرة وإرضاءً.