القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

PyGame هي مكتبة شهيرة لإنشاء مشاريع باستخدام Python ، وتوفر مجموعة قوية من الأدوات لتطوير الألعاب. في هذه المقالة ، ستتعلم كيفية إنشاء قائمة ابدأ واللعبة على الشاشة للعبة بسيطة باستخدام PyGame.

إنشاء لعبة بسيطة

قبل إنشاء قائمة البدء واللعبة على الشاشة ، دعنا أولاً نصنع لعبة بسيطة. في هذه اللعبة ، ستتحكم في شخصية باستخدام مفاتيح الأسهم وتحاول تجنب العقبات. لتبسيط الأمور ، حاول ألا تستخدم أي صور.

للبدء ، تحتاج إلى استيراد الوحدات الضرورية. سوف تستخدم ملف القزم وحدة للوصول إلى وظائف PyGame. لتثبيت الوحدة ، يمكنك ذلك استخدم مدير حزمة النقطة:

نقطة ثَبَّتَ القزم

الآن بعد أن أصبحت وحدتنا جاهزة للاستخدام ، فلنقم بإنشاء لعبة بسيطة مع لاعب يمكنه التحرك يسارًا أو يمينًا باستخدام مفاتيح الأسهم والعقبة. إذا اصطدمت بالعائق ، فستنتهي اللعبة. إليك رمز نفسه:

يستورد القزم
القزم.فيه()

عرض_الشاشة = 750
ارتفاع الشاشة = 450
screen = pygame.display.set_mode ((screen_width، screen_height))

عقبة_س = 400

instagram viewer

عقبة_ص = 400
عرض عقبة = 40
عقبة_ارتفاع = 40
player_x = 200
player_y = 400
عرض اللاعب = 20
player_height = 20

بينماحقيقي:

لحدثفيالقزم.حدث.يحصل():

إذا كان event.type == pygame. يترك:
القزم.يترك()
يترك()


مفاتيح = pygame.key.get_pressed ()
لومفاتيح[القزم. K_LEFT]:
player_x - = 5
لومفاتيح[القزم. K_RIGHT]:
player_x + = 5


إذا player_x + player_width> عقبة_x و player_x < عقبة_x + عرض عقبةوplayer_y + ارتفاع اللاعب > عقبة_ y و player_y < عقبة + عقبة_ارتفاع:
game_over = حقيقي


شاشة.يملأ((0, 0, 0))
القزم.يرسم.rect(شاشة, (255, 0, 0), (عقبة_x, عقبة, عرض عقبة, ارتفاع عقبة))
القزم.يرسم.rect(شاشة, (0, 255, 0), (player_x, player_y, عرض_المشغل, ارتفاع اللاعب))
القزم.عرض.تحديث()

في الكود أعلاه ، قمت بإعداد نافذة اللعبة وأعلنت متغيرات اللعبة. لقد تعاملت أيضًا مع إدخال المستخدم ورسمت العناصر على الشاشة.

إنشاء قائمة ابدأ

الآن بعد أن أصبحت لديك لعبة أساسية ، فلنقم بإنشاء قائمة ابدأ. للقيام بذلك ، ستحتاج إلى إعلان متغير عام لحالة اللعبة. سيتتبع هذا المتغير الحالة الحالية للعبة ، مثل ما إذا كانت قائمة البداية نشطة أم أن اللعبة قيد التشغيل. تحتاج إلى إضافة هذا المتغير في بداية رمز لعبتك:

game_state = "قائمة البدأ"

بعد ذلك ، ستضيف وظيفة لرسم قائمة البداية على الشاشة. يمكنك استخدام وظائف PyGame لرسم النص والأزرار والعناصر الأخرى على الشاشة.

defdraw_start_menu():
شاشة.يملأ((0, 0, 0))
الخط = pygame.font. SysFont ("أريال", 40)
العنوان = font.render ("لعبتي", حقيقي, (255, 255, 255))
start_button = font.render ('يبدأ', حقيقي, (255, 255, 255))
screen.blit (العنوان ، (screen_width / 2 - title.get_width () / 2 ، screen_height / 2 - title.get_height () / 2))
screen.blit (start_button، (screen_width / 2 - start_button.get_width () / 2، screen_height / 2 + start_button.get_height () / 2))
القزم.عرض.تحديث()

يمكنك بعد ذلك إضافة ملف draw_start_menu () وظيفة في حلقة اللعبة الرئيسية.

بينماحقيقي: 

لحدثفيالقزم.حدث.يحصل():
إذا كان event.type == pygame. يترك:
القزم.يترك()
يترك()

لو game_state == "قائمة البدأ":
draw_start_menu ()

لو game_state == "لعبة":
مفاتيح = pygame.key.get_pressed ()
# باقي الكود

الآن ، سيتم رسم قائمة البداية على الشاشة. الخطوة الأخيرة هي التعامل مع مدخلات المستخدم. أنت تستطيع أضف عبارة if إلى حلقة اللعبة الرئيسية للتحقق مما إذا كان المستخدم قد ضغط على زر البدء.

لو game_state == "قائمة البدأ":
مفاتيح = pygame.key.get_pressed ()
لومفاتيح[القزم. K_SPACE]:
player_x = 200
player_y = 400
game_state = "لعبة"
game_over = خطأ شنيع

باستخدام هذا الرمز ، ستبدأ اللعبة عندما يضغط المستخدم على زر البداية.

تنفيذ اللعبة على الشاشة

الآن بعد أن أصبحت لديك قائمة البدء ، فلنقم بإنشاء اللعبة على الشاشة. يجب أن تعرض هذه الوظيفة النتيجة النهائية ورسالة تجاوز اللعبة.

defdraw_game_over_screen():
شاشة.يملأ((0, 0, 0))
الخط = pygame.font. SysFont ("أريال", 40)
العنوان = font.render ('انتهت اللعبة', حقيقي, (255, 255, 255))
reset_button = font.render ("R - إعادة التشغيل", حقيقي, (255, 255, 255))
quit_button = font.render ("Q - إنهاء", حقيقي, (255, 255, 255))
screen.blit (العنوان ، (screen_width / 2 - title.get_width () / 2 ، screen_height / 2 - title.get_height () / 3))
screen.blit (reset_button، (screen_width / 2 - reset_button.get_width () / 2، screen_height / 1.9 + reset_button.get_height ()))
screen.blit (quit_button، (screen_width / 2 - quit_button.get_width () / 2، screen_height / 2 + quit_button.get_height () / 2))
القزم.عرض.تحديث()

يمكنك بعد ذلك إضافة هذه الوظيفة إلى حلقة اللعبة الرئيسية.

لو game_state == "قائمة البدأ":
draw_start_menu ()
لو game_state == "انتهت اللعبة":
draw_game_over_screen ()

لو game_state == "لعبة":
مفاتيح = pygame.key.get_pressed ()
لومفاتيح[القزم. K_LEFT]:
player_x - = 5
لومفاتيح[القزم. K_RIGHT]:
player_x + = 5

إذا player_x + player_width> عقبة_x و player_x < عقبة_x + عرض عقبةوplayer_y + ارتفاع اللاعب > عقبة_ y و player_y < عقبة + عقبة_ارتفاع:
game_over = حقيقي
game_state = "انتهت اللعبة"

أخيرًا ، تحتاج إلى التعامل مع مدخلات المستخدم للتعامل مع اختيار المستخدم. يمكنك إضافة عبارة if إلى حلقة اللعبة الرئيسية للتحقق مما إذا كان المستخدم قد ضغط على زر إعادة التشغيل أو الإنهاء.

لو game_state == "قائمة البدأ":
مفاتيح = pygame.key.get_pressed ()
لومفاتيح[القزم. K_SPACE]:
game_state = "لعبة"
player_x = 200
player_y = 400
game_state = "لعبة"
game_over = خطأ شنيع

لو game_state == "انتهت اللعبة":
مفاتيح = pygame.key.get_pressed ()
لومفاتيح[القزم. K_r]:
game_state = "قائمة البدأ"
لومفاتيح[القزم. K_q]:
القزم.يترك()
يترك()

باستخدام هذا الرمز ، ستتم إعادة تشغيل اللعبة عندما يضغط المستخدم على الزر "R" ويخرج عندما يضغط المستخدم على الزر "Q" على لوحة المفاتيح.

فيما يلي الكود الكامل:

يستورد القزم

القزم.فيه()
عرض_الشاشة = 750
ارتفاع الشاشة = 450
screen = pygame.display.set_mode ((screen_width، screen_height))
عقبة_س = 400
عقبة_ص = 400
عرض عقبة = 40
عقبة_ارتفاع = 40
player_x = 200
player_y = 400
عرض اللاعب = 20
player_height = 20
game_state = "قائمة البدأ"

defdraw_start_menu():
شاشة.يملأ((0, 0, 0))
الخط = pygame.font. SysFont ("أريال", 40)
العنوان = font.render ("لعبتي", حقيقي, (255, 255, 255))
start_button = font.render ('يبدأ', حقيقي, (255, 255, 255))
screen.blit (العنوان ، (screen_width / 2 - title.get_width () / 2 ، screen_height / 2 - title.get_height () / 2))
screen.blit (start_button، (screen_width / 2 - start_button.get_width () / 2، screen_height / 2 + start_button.get_height () / 2))
القزم.عرض.تحديث()

defdraw_game_over_screen():
شاشة.يملأ((0, 0, 0))
الخط = pygame.font. SysFont ("أريال", 40)
العنوان = font.render ('انتهت اللعبة', حقيقي, (255, 255, 255))
reset_button = font.render ("R - إعادة التشغيل", حقيقي, (255, 255, 255))
quit_button = font.render ("Q - إنهاء", حقيقي, (255, 255, 255))
screen.blit (العنوان ، (screen_width / 2 - title.get_width () / 2 ، screen_height / 2 - title.get_height () / 3))
screen.blit (reset_button، (screen_width / 2 - reset_button.get_width () / 2، screen_height / 1.9 + reset_button.get_height ()))
screen.blit (quit_button، (screen_width / 2 - quit_button.get_width () / 2، screen_height / 2 + quit_button.get_height () / 2))
القزم.عرض.تحديث()

بينماحقيقي:
لحدثفيالقزم.حدث.يحصل():
إذا كان event.type == pygame. يترك:
القزم.يترك()
يترك()
لو game_state == "قائمة البدأ":
draw_start_menu ()
مفاتيح = pygame.key.get_pressed ()
لومفاتيح[القزم. K_SPACE]:
player_x = 200
player_y = 400
game_state = "لعبة"
game_over = خطأ شنيع
أليف game_state == "انتهت اللعبة":
draw_game_over_screen ()
مفاتيح = pygame.key.get_pressed ()
لومفاتيح[القزم. K_r]:
game_state = "قائمة البدأ"
لومفاتيح[القزم. K_q]:
القزم.يترك()
يترك()

أليف game_state == "لعبة":
مفاتيح = pygame.key.get_pressed ()
لومفاتيح[القزم. K_LEFT]:
player_x - = 5
لومفاتيح[القزم. K_RIGHT]:
player_x + = 5

إذا player_x + player_width> عقبة_x و player_x < عقبة_x + عرض عقبةوplayer_y + ارتفاع اللاعب > عقبة_ y و player_y < عقبة + عقبة_ارتفاع:
game_over = حقيقي
game_state = "انتهت اللعبة"

شاشة.يملأ((0, 0, 0))
القزم.يرسم.rect(شاشة, (255, 0, 0), (عقبة_x, عقبة, عرض عقبة, ارتفاع عقبة))
القزم.يرسم.rect(شاشة, (0, 255, 0), (player_x, player_y, عرض_المشغل, ارتفاع اللاعب))
القزم.عرض.تحديث()

أليف انتهت اللعبة:
game_state = "انتهت اللعبة"
game_over = خطأ شنيع

يبدأ الرمز باستيراد ملف القزم الوحدة النمطية وتهيئتها. ثم تقوم بإنشاء نافذة لعبة وتعلن عن متغيرات اللعبة الضرورية ، بما في ذلك موضع اللاعب والعائق ، والبعد ، وحالة اللعبة.

يحدد الكود وظيفتين ، draw_start_menu () و draw_game_over_screen ()، لرسم قائمة البداية واللعبة على الشاشة. تستخدم هذه الوظائف وظائف PyGame لرسم النص والأزرار على الشاشة.

تبدأ حلقة اللعبة الرئيسية بالتعامل مع الأحداث والتحقق من حالة اللعبة. إذا كانت حالة اللعبة قائمة البدأ، يتم رسم قائمة البداية على الشاشة. إذا كانت حالة اللعبة انتهت اللعبة، يتم رسم شاشة اللعبة على الشاشة. إذا كانت حالة اللعبة هي أي شيء آخر ، يتم تحديث اللعبة وتجذب اللاعب والعائق إلى الشاشة.

يتم تحديث اللعبة عن طريق التعامل مع الضغط على المفاتيح والتحقق من وجود تصادم بين اللاعب والعائق. إذا كان هناك تصادم ، تقوم اللعبة بتعيين ملف انتهت اللعبة علم ل حقيقي وتعيين حالة اللعبة على انتهت اللعبة.

بعد تحديث اللعبة ، يتم رسم اللاعب والعائق على الشاشة. أخيرًا ، يتحقق الرمز مما إذا كان ملف انتهت اللعبة تم تعيين العلم ، وإذا كان كذلك ، فإنه يعيد تعيين العلم ويضبط حالة اللعبة على انتهت اللعبة.

تتكرر هذه العملية باستمرار حتى يتم إغلاق نافذة اللعبة.

زيادة تفاعل المستخدم مع واجهة مستخدم جذابة بصريًا

يمكن أن يؤدي استخدام واجهة مستخدم جيدة التصميم (UI) إلى زيادة تفاعل المستخدم بشكل كبير في لعبة PyGame. يعد الخط الواضح وسهل القراءة والرسومات الجذابة بصريًا والتنقل السهل وتعليقات المستخدم كلها عناصر مهمة يجب مراعاتها عند تصميم واجهة المستخدم. من خلال تنفيذ هذه العناصر ، يمكنك إنشاء واجهة مستخدم تساعد في الحفاظ على اهتمام اللاعب وانغماسه في اللعبة.

تذكر اختبار واجهة المستخدم الخاصة بك وجمع التعليقات من اللاعبين للتأكد من أنها فعالة في زيادة المشاركة. بشكل عام ، يمكن أن يؤدي قضاء الوقت في إنشاء واجهة مستخدم قوية إلى تحسين تجربة اللاعب وتمتعه باللعبة بشكل كبير.