توفر مكتبة Python Arcade طريقة مباشرة وفعالة لتنفيذ مستويات اللعبة في مشروعاتك.
تطوير اللعبة هو عملية مثيرة وإبداعية تسمح لك بإحياء أفكارك التخيلية. عند تصميم لعبة ما ، فإن أحد العناصر الأساسية التي يمكن أن تعزز تجربة اللاعب بشكل كبير هو تنفيذ مستويات اللعبة.
توفر المستويات الهيكل والتقدم والتحديات ، مما يمنح اللاعبين إحساسًا بالإنجاز والمشاركة أثناء تنقلهم عبر مراحل مختلفة من اللعبة.
قم بإنشاء لعبة بسيطة
قبل أن تبدأ ، تأكد من أن لديك نقطة مثبتة على جهازك. استخدم هذا الأمر لتثبيت ملف ممر مكتبة:
نقطة تثبيت الممرات
قم بإنشاء لعبة أساسية حيث يمكن للاعب أن يتحرك إلى اليسار واليمين.
الكود المستخدم في هذه المقالة متوفر في هذا مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.
استخدم إمكانات مكتبة Arcade للتعامل مع مدخلات المستخدم وتحديث حالة اللعبة وفقًا لذلك. قم بإنشاء ملف جديد باسم لعبة بسيطة وأضف الكود التالي:
يستورد ممر
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600فصللعبتي(ممر. نافذة او شباك):
def__فيه__(الذات):
سوبر () .__ init __ (SCREEN_WIDTH ، SCREEN_HEIGHT ، "لعبتي")
arcade.set_background_color (arcade.color. أبيض)
self.player_x = SCREEN_WIDTH // 2defon_draw(الذات):
arcade.start_render ()
arcade.draw_rectangle_filled (self.player_x، 50, 50, 50، الممرات. أزرق)defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.player_x - = 10
أليف مفتاح == arcade.key. يمين:
self.player_x + = 10defon_key_release(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر أو مفتاح == arcade.key. يمين:
يمرdefرئيسي():
اللعبة = MyGame ()
arcade.run ()
لو __name__ == "__رئيسي__":
رئيسي()
أدناه هو الإخراج:
إنشاء مستويات متعددة
الآن ، قم بتوسيع اللعبة عن طريق إضافة مستويات متعددة. سيكون لكل مستوى خصائصه الفريدة ، مما يوفر تحديات مختلفة للاعب. يمكنك تعديل الكود السابق ليشمل مستويات إضافية. هذا مثال:
فصلالمستوى الاول:
def__فيه__(الذات):
self.player_x = SCREEN_WIDTH // 2defتحديث(الذات):
يمرdefيرسم(الذات):
arcade.draw_rectangle_filled (self.player_x، 50, 50, 50، الممرات. أزرق)فصلالمستوى الثاني:
def__فيه__(الذات):
self.player_x = SCREEN_WIDTH // 2defتحديث(الذات):
يمرdefيرسم(الذات):
arcade.draw_rectangle_filled (self.player_x، 50, 50, 50، الممرات. أحمر)فصللعبتي(ممر. نافذة او شباك):
def__فيه__(الذات):
سوبر () .__ init __ (SCREEN_WIDTH ، SCREEN_HEIGHT ، "لعبتي")
arcade.set_background_color (arcade.color. أبيض)
self.levels = [LevelOne ()، LevelTwo ()]
self.current_level = 0defon_draw(الذات):
arcade.start_render ()
self.levels [self.current_level] .draw ()defon_key_press(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر:
self.levels [self.current_level] .player_x - = 10
أليف مفتاح == arcade.key. يمين:
مستويات self.levels [self.current_level] .player_x + = 10defon_key_release(ذاتي ، مفتاح ، معدِّلات):
لو مفتاح == arcade.key. غادر أو مفتاح == arcade.key. يمين:
يمرdefتحديث(ذاتي ، delta_time):
self.levels [self.current_level] .update ()defرئيسي():
اللعبة = MyGame ()
arcade.run ()
لو __name__ == "__رئيسي__":
رئيسي()
الانتقال بين المستويات
لإنشاء انتقال سلس بين المستويات ، اكتشف متى يتجاوز اللاعب حدودًا معينة. أنت تستطيع تتبع حركة اللاعب، وبمجرد عبور اللاعب للحدود ، يمكنك التبديل إلى المستوى التالي. قم بإنشاء ملف جديد باسم الانتقال بين المستويات وأضف الكود مع التحديثات أدناه:
فصللعبتي(ممر. نافذة او شباك):
# ...defتحديث(ذاتي ، delta_time):
self.levels [self.current_level] .update ()# تحقق مما إذا كان اللاعب قد تجاوز الحدود
لو self.levels [self.current_level] .player_x < 0:
self.current_level + = 1
self.current_level٪ = len (مستويات ذاتية)
self.levels [self.current_level] .player_x = SCREEN_WIDTH
أليف self.levels [self.current_level] .player_x> SCREEN_WIDTH:
self.current_level + = 1
self.current_level٪ = len (مستويات ذاتية)
self.levels [self.current_level] .player_x = 0
# ...
أدناه هو الإخراج:
بما في ذلك الميزات الإضافية
لجعل مستويات لعبتك أكثر جاذبية ، يمكنك دمج ميزات إضافية مثل عمليات رفع الطاقة والأهداف.
أهداف
توفر الأهداف أهدافًا أو أهدافًا محددة للاعب لتحقيقها ضمن المستوى. يضيفون إحساسًا بالهدف والتقدم. فيما يلي مثال على تنفيذ ميزة موضوعية:
فصلموضوعي:
def__فيه__(النفس ، س ، ص):
self.x = x
self.y = ذ
نصف القطر الذاتي = 20defيرسم(الذات):
arcade.draw_circle_filled (self.x، self.y، self.radius، arcade.color. أخضر)فصلالمستوى الاول:
def__فيه__(الذات):
self.objective = الهدف (600, 400)
# ...defتحديث(الذات):
# تحقق مما إذا كان اللاعب قد وصل إلى الهدف
لو arcade.check_for_collision (لاعب ذاتي ، هدف ذاتي):
self.complete_objective ()defيرسم(الذات):
self.objective.draw ()
# ...
defهدف_الكامل(الذات):
# رمز للتعامل مع استكمال الهدف
يمر
المقتنيات
المقتنيات هي عناصر أو مكافآت يمكن للاعب جمعها عبر المستويات. فيما يلي مثال على تنفيذ ميزة قابلة للتحصيل:
فصلتحصيله:
def__فيه__(النفس ، س ، ص):
self.x = x
self.y = ذ
نصف القطر الذاتي = 10
self.is_collected = خطأ شنيعdefيرسم(الذات):
لولا تم جمعها ذاتيًا:
arcade.draw_circle_filled (self.x، self.y، self.radius، arcade.color. البرتقالي)defيجمع(الذات):
self.is_collected = حقيقي
# رمز للتعامل مع تأثير المقتنيات على اللاعبفصلالمستوى الاول:
def__فيه__(الذات):
self.collectible = تحصيل (300, 300)
# ...defتحديث(الذات):
# تحقق مما إذا كان اللاعب يجمع العنصر
لو arcade.check_for_collision (self.player ، self.collectible):
جمع self.collectible.collect ()
defيرسم(الذات):
self.collectible.draw ()
# ...
عوائق
يمكن أن تكون العوائق كائنات ثابتة أو كيانات متحركة تعيق مسار اللاعب. إنها تتطلب من اللاعب وضع إستراتيجيات وإيجاد طرق للتغلب عليها. فيما يلي مثال على تطبيق ميزة العقبات:
فصلعقبة:
def__فيه__(ذاتي ، س ، ص ، عرض ، ارتفاع):
self.x = x
self.y = ذ
عرض النفس = العرض
ارتفاع النفس = الارتفاعdefيرسم(الذات):
arcade.draw_rectangle_filled (self.x، self.y، self.width، self.height، arcade.color. رمادي)
فصلالمستوى الاول:
def__فيه__(الذات):
self.obstacles = [عقبة (400, 200, 100, 50)، عقبة(600, 500, 80, 120)]
# ...
زادت الطاقة
يمكن أن تعزز شكا من قدرات اللاعب أو توفر مزايا مؤقتة. فيما يلي مثال على تنفيذ ميزة power-up:
فصلرفع الطاقة:
def__فيه__(النفس ، س ، ص):
self.x = x
self.y = ذ
نصف القطر الذاتي = 10
self.is_active = حقيقيdefيرسم(الذات):
لو ذاتي غير نشط:
arcade.draw_circle_filled (self.x، self.y، self.radius، arcade.color. أصفر)defتنشيط_قوة_وب(الذات):
self.is_active = حقيقيdefتنشيط_قوة_اب(الذات):
self.is_active = خطأ شنيعفصلالمستوى الاول:
def__فيه__(الذات):
self.power_up = PowerUp (200, 200)
# ...defتحديث(الذات):
# تحقق مما إذا كان المشغل يصطدم بالقوة
لو arcade.check_for_collision (self.player، self.power_up):
self.player.activate_power_up ()
self.power_up.deactivate_power_up ()
defيرسم(الذات):
self.power_up.draw ()
# ...
أفضل الممارسات لتصميم المستوى
يلعب تصميم المستوى دورًا مهمًا في إنشاء تجارب لعب جذابة وممتعة. فيما يلي بعض أفضل الممارسات التي يجب مراعاتها عند تصميم المستويات للعبتك:
أهداف واضحة
يجب أن يكون لكل مستوى هدف أو هدف واضح يتعين على اللاعب تحقيقه. سواء كان الهدف هو الوصول إلى موقع معين أو هزيمة الأعداء أو حل الألغاز ، يجب أن يكون الهدف محددًا جيدًا ويتم توصيله للاعب.
منحنى الصعوبة التدريجي
مستويات التصميم مع زيادة تدريجية في الصعوبة لتوفير منحنى تعليمي سلس للاعبين. ابدأ بتحديات أبسط وأدخل آليات أو عقبات جديدة تدريجيًا مع تقدم اللاعب. يمكن أن تؤدي الارتفاعات المفاجئة في الصعوبة إلى إحباط اللاعبين ، لذلك من المهم الحفاظ على تقدم متوازن.
الوضوح البصري
تأكد من أن تصميم المستوى والعناصر المرئية تنقل بوضوح المعلومات المهمة للاعب. دمج الموسيقى والمؤثرات الصوتية يمكن أن تنقل أيضًا أدلة مهمة وتوفر المعلومات الأساسية للاعب.
اختبار اللعب والتكرار
يعد اختبار اللعب المنتظم ضروريًا لتحسين تصميم المستوى وتحسينه. اجمع التعليقات من اللاعبين وراقب تجاربهم لتحديد المجالات التي قد تتطلب تعديلات. قم بتكرار تصميم مستواك بناءً على هذه الملاحظات لإنشاء طريقة لعب أكثر إمتاعًا وتوازنًا.
مكافأة التوازن والتحدي
كافئ اللاعبين للتغلب على التحديات في مستوياتك. يمكن تحقيق ذلك من خلال تعزيزات القوة ، أو المقتنيات ، أو فتح مناطق جديدة ، أو التقدم السردي. تساعد الموازنة بين صعوبة التحديات والمكافآت ذات المغزى في تحفيز اللاعبين وتوفر إحساسًا بالإنجاز.
اجعل الألعاب أكثر تفاعلاً مع المستويات
من خلال تنفيذ مستويات اللعبة ، يمكنك تحسين تجربة اللاعب الإجمالية وإنشاء بيئة لعب أكثر جاذبية. توفر المستويات التقدم والتحدي والتنوع ، مما يبقي اللاعبين مستثمرين ومتحمسين. إنها تسمح لك بإدخال آليات وعقبات وأعداء ومكافآت جديدة ، مما يضمن أن كل مستوى يشعر بالتميز والإثارة.