القائمة الرئيسية

الصفحات

برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame

Animate Character by Pygame،How to Animate Python Game Character by Pygame،Python Game Programming: How to Animate a Game Character Using PygamePython Game Programming،How to Animate a Game Character Using Pygame،Python Game،Programming،How to،Animate Game Character Using Pygame،Python Game Programming: How to Animate a Game Character Using Pygame،How to Animate Python Game Character by Pygame،برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame،برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame،كيفية إضافة لاعب إلى لعبة Python بايثون "PyCharm"،استخدام Pygame لتحريك شخصية اللعبة الخاصة بك،افضل طريقة لتحريك شخصية اللعبة باستخدام Pygame،استخدام Pygame لتحريك شخصية اللعبة الخاصة بك، 




برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame



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


إعداد مفاتيح للتحكم في كائن اللاعب الخاص بك


افتح البرنامج النصي للعبة Python في IDLE أو PyCharm أو محرر نصوص.

نظرًا لأن اللعبة يجب أن "تستمع" باستمرار لأحداث لوحة المفاتيح ، فسوف
 تكتب رمزًا يجب تشغيله باستمرار. هل يمكنك معرفة مكان وضع التعليمات
 البرمجية التي يجب تشغيلها باستمرار طوال مدة اللعبة؟
إذا كانت إجابتك "في الحلقة الرئيسية" ، فأنت على صواب! تذكر أنه ما لم تكن الشفرة في حلقة ،
 فإنها تعمل (على الأكثر) مرة واحدة فقط - وقد لا تعمل على الإطلاق
 إذا كانت مخفية في فصل دراسي أو وظيفة لم يتم استخدامها أبدًا.

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

while main:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit(); sys.exit()
            main = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT or event.key == ord('a'):
                print('left')
            if event.key == pygame.K_RIGHT or event.key == ord('d'):
                print('right')
            if event.key == pygame.K_UP or event.key == ord('w'):
            print('jump')

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == ord('a'):
                print('left stop')
            if event.key == pygame.K_RIGHT or event.key == ord('d'):
                print('right stop')
            if event.key == ord('q'):
                pygame.quit()
                sys.exit()
                main = False   

 
يفضل بعض الأشخاص التحكم في أحرف المشغل باستخدام أحرف لوحة المفاتيح W و
 A و S و D ، ويفضل البعض الآخر استخدام مفاتيح الأسهم. تأكد من تضمين كلا الخيارين.
ملاحظة: من الضروري أن تضع في اعتبارك جميع المستخدمين عند البرمجة.
 إذا كتبت رمزًا يناسبك فقط ، فمن المحتمل جدًا أنك الوحيد الذي يستخدم التطبيق الخاص بك. 
الأهم من ذلك ، إذا كنت تبحث عن رمز كتابة وظيفة مقابل المال ، فمن المتوقع أن تكتب
 رمزًا يناسب الجميع. إن إعطاء المستخدمين لديك خيارات ، مثل خيار استخدام مفاتيح
 الأسهم أو WASD (يطلق عليه إمكانية الوصول ) ، هو علامة على وجود مبرمج جيد.

ابدأ لعبتك باستخدام Python ، وشاهد نافذة وحدة التحكم للإخراج عندما تضغط على الأسهم
 لليمين واليسار ولأعلى ، أو مفاتيح A و D و W :

$ python ./your-name_game.py
  left
  left stop
  right
  right stop
  jump


هذا يؤكد أن Pygame يكتشف ضغطات المفاتيح بشكل صحيح. حان الوقت الآن للقيام بالعمل الشاق لتحريك الكائن.


ترميز وظيفة حركة اللاعب | لعبة Python بايثون


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







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

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.movex = 0 # move along X
        self.movey = 0 # move along Y
        self.frame = 0 # count frames


مع تعيين هذه المتغيرات ، حان الوقت لتشفير حركة الكائن.

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

    def control(self,x,y):
        """
        control player movement
        """
        self.movex += x
        self.movey += y


لتحريك كائن في Pygame ، يجب أن تطلب من Python إعادة 
رسم الكائن في موقعه الجديد - ومكان هذا الموقع الجديد.

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

لإظهار أن الكائن يمشي (أو يطير ، أو أيًا كان ما يفترض أن يفعله الكائن) ،
 تحتاج إلى تغيير موضعه على الشاشة عند الضغط على المفتاح المناسب.
 لجعله يتحرك عبر الشاشة ، فإنك تعيد تحديد موضعه ، المعين من قبل self.rect.x 
وخصائص self.rect.y، إلى موضعه الحالي بالإضافة إلى أي مقدار movex 
أو moveyيتم تطبيقه. (يتم تعيين عدد وحدات البكسل التي تتطلبها الحركة لاحقًا):

    def update(self):
        """
        Update sprite position
        """
        self.rect.x = self.rect.x + self.movex   
     

افعل نفس الشيء للوضع Y:

        self.rect.y = self.rect.y + self.movey


للرسوم المتحركة ، قم بتقديم إطارات الرسوم المتحركة كلما تحرك الكائن الخاص بك ، 
واستخدم إطار الرسوم المتحركة المقابل كصورة المشغل:

        # moving left
        if self.movex < 0:
            self.frame += 1
            if self.frame > 3*ani:
                self.frame = 0
            self.image = self.images[self.frame//ani]

        # moving right
        if self.movex > 0:
            self.frame += 1
            if self.frame > 3*ani:
                self.frame = 0
            self.image = self.images[self.frame//ani]


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

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

player_list = pygame.sprite.Group()
player_list.add(player)
steps = 10  # how many pixels to move


الآن بعد أن أصبحت لديك الوظيفة والمتغير المناسبين ، استخدم ضغطات المفاتيح 
لتشغيل الوظيفة وإرسال المتغير إلى الكائن الخاص بك.
قم بذلك عن طريق استبدال printالعبارات الموجودة في الحلقة الرئيسية
 الخاصة بك باسم كائن اللاعب (المشغل) ، والوظيفة (.control) ،
 وعدد الخطوات على طول المحور X والمحور Y التي تريد أن يتحرك بها كائن اللاعب مع كل حلقة:

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT or event.key == ord('a'):
                player.control(-steps,0)
            if event.key == pygame.K_RIGHT or event.key == ord('d'):
                player.control(steps,0)
            if event.key == pygame.K_UP or event.key == ord('w'):
                print('jump')

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == ord('a'):
                player.control(steps,0)
            if event.key == pygame.K_RIGHT or event.key == ord('d'):
                player.control(-steps,0)
            if event.key == ord('q'):
                pygame.quit()
                sys.exit()
                main = False


تذكر ، stepsمتغير يمثل عدد وحدات البكسل التي يتحركها كائنك عند الضغط على مفتاح. 







إذا أضفت 10 بكسل إلى موقع كائن المشغل الخاص بك عند الضغط على D أو السهم الأيمن ،
 فعندما تتوقف عن الضغط على هذا المفتاح ، يجب عليك طرح 10 ( -steps) 
لإعادة زخم الكائن الخاص بك إلى 0.
جرب لعبتك الآن. تحذير: لن تفعل ما تتوقعه.


مقالات ذات صلة :





تحديث رسم الكائن على لعبة Python بايثون


لماذا لم يتحرك شبحك بعد؟ لأن الحلقة الرئيسية لا تستدعي updateالوظيفة.
أضف كودًا إلى الحلقة الرئيسية لتخبر Python أن تقوم بتحديث موضع كائن اللاعب الخاص بك. 
أضف السطر مع التعليق:


    player.update()  # update player position
    player_list.draw(world)
    pygame.display.flip()
    clock.tick(fps)


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

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


تقليب اللاعب على لعبة Python بايثون



يمكنك قلب الرسم باستخدام transform وظيفة Pygame. 
هذا ، مثل جميع الوظائف الأخرى التي كنت تستخدمها لهذه اللعبة ، 
هو الكثير من الأكواد المعقدة والرياضيات المقطرة في كلمة رئيسية واحدة 
سهلة الاستخدام ، بايثون. هذا مثال رائع على لماذا يساعدك إطار العمل في البرمجة. 
بدلاً من الاضطرار إلى تعلم المبادئ الأساسية لرسم وحدات البكسل على الشاشة ،
 يمكنك السماح لـ Pygame بالقيام بكل العمل وإجراء مكالمة إلى funciton موجود بالفعل.

تحتاج فقط إلى التحويل في المثيل عندما يسير الرسم في الاتجاه المعاكس الذي يواجهه افتراضيًا.
 يواجه رسومي على اليمين ، لذلك أقوم بتطبيق التحويل على 
كتلة التعليمات البرمجية اليسرى. تأخذ الوظيفة pygame.transform.flip
ثلاث حجج ، وفقًا لوثائق Pygame : ما يجب قلبه ، وما إذا كان سيتم قلبه أفقيًا ، 
وما إذا كان سيتم قلبه رأسيًا. في هذه الحالة ، هذه هي الرسوم (التي قمت بتعريفها
 بالفعل في الكود الحالي) ، True للأفقي ، والخطأ للانعكاس العمودي.

قم بتحديث الكود الخاص بك:

        # moving left
        if self.movex < 0:
            self.frame += 1
            if self.frame > 3*ani:
                self.frame = 0
            self.image = pygame.transform.flip(self.images[self.frame // ani], True, False)


لاحظ أنه تم إدراج وظيفة التحويل في التعليمات البرمجية الموجودة لديك.
 لا يزال يتم تعريف المتغير self.imageكصورة من قائمة صور البطل الخاصة بك ،
ولكن يتم "التفافه" في وظيفة التحويل.

جرب الكود الخاص بك الآن ، وشاهد بطلك يقوم بتغيير الوجه في كل مرة توجهه في اتجاه مختلف.

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







كل الكود المستخدم في هذا البرنامج التعليمي
كمرجع لك ، إليك جميع الرموز المستخدمة في سلسلة المقالات هذه حتى الآن:

#!/usr/bin/env python3
# by Seth Kenlon
# GPLv3
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
from typing import Tuple
import pygame
import sys
import os
'''
Variables
'''
worldx = 960
worldy = 720
fps = 40
ani = 4
world = pygame.display.set_mode([worldx, worldy])
BLUE = (25, 25, 200)
BLACK = (23, 23, 23)
WHITE = (254, 254, 254)
ALPHA = (0, 255, 0)
'''
Objects
'''
class Player(pygame.sprite.Sprite):
    """
    Spawn a player

Animate Character by Pygame،How to Animate Python Game Character by Pygame،Python Game Programming: How to Animate a Game Character Using PygamePython Game Programming،How to Animate a Game Character Using Pygame،Python Game،Programming،How to،Animate Game Character Using Pygame،Python Game Programming: How to Animate a Game Character Using Pygame،How to Animate Python Game Character by Pygame،برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame،برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame،كيفية إضافة لاعب إلى لعبة Python بايثون "PyCharm"،استخدام Pygame لتحريك شخصية اللعبة الخاصة بك،افضل طريقة لتحريك شخصية اللعبة باستخدام Pygame،استخدام Pygame لتحريك شخصية اللعبة الخاصة بك،
Animate Character by Pygame،How to Animate Python Game Character by Pygame،Python Game Programming: How to Animate a Game Character Using PygamePython Game Programming،How to Animate a Game Character Using Pygame،Python Game،Programming،How to،Animate Game Character Using Pygame،Python Game Programming: How to Animate a Game Character Using Pygame،How to Animate Python Game Character by Pygame،برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame،برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame،كيفية إضافة لاعب إلى لعبة Python بايثون "PyCharm"،استخدام Pygame لتحريك شخصية اللعبة الخاصة بك،افضل طريقة لتحريك شخصية اللعبة باستخدام Pygame،استخدام Pygame لتحريك شخصية اللعبة الخاصة بك،
Animate Character by Pygame،How to Animate Python Game Character by Pygame،Python Game Programming: How to Animate a Game Character Using PygamePython Game Programming،How to Animate a Game Character Using Pygame،Python Game،Programming،How to،Animate Game Character Using Pygame،Python Game Programming: How to Animate a Game Character Using Pygame،How to Animate Python Game Character by Pygame،برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame،برمجة العاب Python: كيفية تحريك شخصية اللعبة باستخدام Pygame،كيفية إضافة لاعب إلى لعبة Python بايثون "PyCharm"،استخدام Pygame لتحريك شخصية اللعبة الخاصة بك،افضل طريقة لتحريك شخصية اللعبة باستخدام Pygame،استخدام Pygame لتحريك شخصية اللعبة الخاصة بك،


لقد قطعت شوطا طويلا وتعلمت الكثير ، ولكن هناك الكثير لتفعله. 
في المقالات القليلة التالية ، ستضيف نقوشًا للعدو ، ومحاكاة الجاذبية ، وغير ذلك الكثير. 
في غضون ذلك ، تدرب مع بايثون!


جدول المحتويات