چگونگی یادگیری Pygame
() translation by (you can also view the original English article)
Pygame ، مجموعه ای از ماژول های Python است که به منظور طراحی بازی های کامپیوتری ایجاد شده اند و بر روی پلت فرم های مختلف قابل اجرا هستند. سادگی، راحتی استفاده، و سرگم کننده بودن ویژگی های اصلی ایدئولوژی Pygame هستند و ماژول های آن نیز با تکیه بر همین ویژگی ها ایجاد شده اند. در این نوشتار، چگونگی استفاده از Pygame را به شما نشان خواهم داد، و همچنین نکات و منابع آموزشی مرتبط با آن را با شما درمیان خواهم گذاشت.
در این آموزش فرض بر این است که شما چگونگی نوشتن کد به زبان Python را می دانید. در غیر اینصورت، برای شروع بهترین روش برای یادگیری Python، Python را بیاموزید، خودآموز Python، سایت Codecademy، و Python را از راه دشوار آن بیاموزید را بررسی کنید.
چرا Pygame؟
کار با آن راحت است
پایتون همواره به عنوان مناسب ترین زبان برای شروع برنامه نویسی مورد توجه بوده و به دلیل دستور زبان ساده و منحنی یادگیری تدریجی اش ستایش شده است. به همین دلیل ، بسیاری از برنامه نویسان تازه کار، یادگیری برنامه نویسی را با پایتون آغاز می کنند.
Pygame بر مبنای پایتون ایجاد شده، از فلسفه پایتون پیروی می کند و هدف از آن راحتی استفاده برای کاربران است. علاوه براین ، بازی سازان تازه کار و مشتاق که داری تجربه برنامه نویسی نیستند می توانند از Pygame استفاده کنند، به دلیل اینکه می توانند پیش از شروع کار با Pygame سریعا Python را بیاموزند.
انجمن برنامه نویسان آن گسترده است
پایتون از سال 2000 در دسترس قرار گرفته و آز آن زمان تا کنون ، انجمن گسترده ای از توسعه دهندگان پیرامون آن شکل گرفته است. این انجمن مدعی است که Pygame میلیون ها بار دانلود شده و وب سایت آن نیز میلیون ها بار مورد بازدید قرا گرفته است. در نتیجه وجود این انجمن گسترده، ایرادات و باگ های گزارش شده به سرعت رفع می گردند، راهنمایی و کمک به برنامه نویسان به آسانی در دسترس قرار دارد، و همچنین ویژگی های جدید بسیاری به Pygame افزوده شده است. علاوه بر این، این انجمن متضمن این است که توسعه بازی با Pygame کار جالب و سرگرم کننده ای است; به عنوان مثال، جهت ترویج این پلتفرم هر دو سال یکبار یک رقابت بازی سازی با پایتون برگزار می شود. گستردگی این انجمن مسئله ای است که باعث برتری Pygame نسبت به سایر فریمورک های بازی سازی پایتون است و آن را متمایز می کند.
متن باز است
متن باز بودن Pygame به این معناست که ایرادات و باگ های موجود معمولا به سرعت توسط انجمن رفع می شود. همچنین بدلیل متن باز بودن این فریمورک، شما می توانید آن را در جهت برآورده کردن نیازهای خود توسعه داده و حتی درصورت امکان نسخه توسعه داده شده را در اختیار انجمن Pygame قرار دهید.
پایتون با استفاده از زبان c نوشته شده است و بررسی کوتاهی در کد آن، روشی عالی جهت فهم بهتر چگونگی کارکرد پایتون و Pygame است.
کاملا قابل حمل است
Pygame بسیار قابل حمل است، چنان که از پلتفرم های Windows، Linux ، Mac OS X، BeOS، FreeBSD، NetBSD، OpenBSD، BSD/OS، Solaris، IRIX، و QNX پشتیبانی می کند. علاوه بر پلتفرم های اشاره شده، زیر مجموعه ای از Pygame نیز برای سیستم عامل Android وجود دارد. علاوه براین، Pygame به OpenGL نیازی ندارد و می تواند از DirectX، WinDIB، X11، فریم بافر Linux و موارد بسیار دیگری از API ها برای رندر گرفیکی استفاده کند. این ویژگی متضمن این است که تعداد بیشتری از کاربران می توانند از بازی شما استفاده کنند.
شروع به کار با Pygame
روش نصب
پیش از نصب Pygame، مطمئن شوید که Python را نصب کرده اید. در هنگام نصب Python خواهید دید که دو نسخه متفاوت از آن وجود دارد:Python2 و Python3. شخصا توصیه می کنم که برای استفاده در کنار Pygam از نسخه Python2 استفاده کنید، چرا که استفاده از این نسخه رایج تر بوده و ضمنا برخی از ماژول های Pygame در حال حاضر از Python3 پشتیبانی نمی کنند. با این حال، با استفاده از نسخه Python3 هم کماکان قادر به ساخت بازی های فوق العاده با Pygame خواهید بود.
پس از اینکه از نصب و اجرای Python (هر نسخه ای) بر روی سیستم خود مطمئن شدید، می توانید Pygame را از وب سایت آن دانلود کنید.
محیط های توسعه (IDE)
علاوه بر نصب ماژول های Python، توصیه می کنم که یکی از محیط های توسعه (IDE) مخصوص Python را هم نصب کنید، به این دلیل که فرآیند ساخت بازی و کامپایل آن را برای شما آسان تر خواهد کرد.
توجه داشته باشید که در حال حاضر یک محیط توسعه که IDLE نام دارد، به همراه بسته نصب Python ارائه می شود. با این حال IDLE اغلب به دلیل مسائل مربوط به کارایی مورد انتقاد قرار گرفته است و شخصا نمی توانم استفاده از آن را توصیه کنم.
به شخصه PyScriber را ترجیح میدهم، اما موارد دیگری مانند PyCharm، Wing IDE، ابزارهای Python برای Visual Studio، و Netbeans هم گزینه های مناسبی هستند. مثل همیشه، انتخاب یک IDE به اولویت های شخصی هر فرد برمیگردد، بنابراین پیشنهاد می کنم که تمام گزینه ها را بررسی کنید و ببینید که کدام یک را از همه بیشتر می پسندید.
منابع
اینها تعدادی از منابعی هستند که می توانند در شروع کار با Pygame به شما کمک کنند.
دانشگاه کلورادو(Colorado)
دانشگاه کلورادو یک مقدمه عالی برای Pygame ارائه کرده است. اسلایدهای ارائه شده به همراه این آموزش اطمینان حاصل می کنند که شما اجزای اصلی Pygame و نحوه استفاده از آنها را می دانید. پس از مطالعه این متن، شما باید مفهاهیم اصلی Pygame را درک کرده باشید.
خودآموزها
تعداد زیادی آموزش وجود دارند که Pygame را به صورت گام به گام به شما می آموزند. من سه مورد از آموزشهای مورد علاقه خود را برای معرفی به شما انتخاب کرده ام:
- آموزش های Pygame - معرفی ساده ای از برنامه نویسی بازی: این آموزش ویژگی های اساسی Pygame را پوشش ی دهد.
- آموزش اصول مقدماتی Pygame: یک سری آموزشی متشکل از هفت بخش که با تشریح مفاهیم مقدماتی آغاز می شود، و شامل یک بخش عالی است که منحصرا به آموزش استفاده ازموسیقی و جلوه های صوتی در Pygame می پردازد.
- کتاب بازی Python: یک منبع آموزشی که از مفاهیم اساسی و مقدماتی آغاز می شود اما به تدریس مفاهیم پیشرفته ای همچون sprite ها، کشف تصادم pixel-perfect، و پیمایش (scrolling) نیز می پردازد.
سری آموزش های ویدئویی
توسعه بازی در Python 3 با Pygame یک سری آموزش ویدئویی است که در قالب یک لیست پخش در YouTube در درسترس است. این سری آموزشی شامل 29 ویدئو است و با آموزش مفاهیمی مانند نمایش تصاویر و رندر متن آغاز می شود و در ادامه به تدریس مفاهیمی مانند انیمیشن و دریافت ورودی از کاربر می پردازد. اگر شما آموزش های ویدئویی را به آموزش های متنی ترجیح می دهید، این مجموعه آموزشی را از دست ندهید.
کتاب ها
اگر شما هم در برنامه نویسی Python و هم در Pygame تازه کار هستید ، توصیه می کنم که به کتاب بازی های کامپیوتری خود را با Python بسازید نگاهی بیاندازید. این کتاب در ابتدا مفاهیم مقدماتی Python را به شما می آموزد، و سپس با اتکاء به آنچه که از Python آموخته اید، چگونگی ساخت بازی های ساده خط فرمانی (command-line) را به شما نشان می دهد. پس از مطمئن شدن از اینکه شما مقدمات Python را یادگرفته اید، بخش بعدی کتاب به سراغ آموزش Pygame می رود.
از سوی دیگر، اگر شما مشتاق هستید که مستقیما سراغ یادگیری Pygame بروید، کتاب ساخت بازی با Python و Pygame برای شما مناسب است. در پایان مطالعه این کتاب، شما یازده بازی ساخته اید و آماده خواهید بود که بازی های خودتان را بسازید.
تمامی کتاب های معرفی شده رایگان بوده و به صورت آنلاین در دسترس هستند، بنابراین می توانید همین حالا شروع کنید!
گام های بعدی
مستندات و ویکی را مطالعه کنید
نگاهی به مستندات، گام مهمی در مسیر تسلط شما برPygame می باشد. در اینجا شما مستندات ، آموزش ها، و مراجعی را خواهید یافت که تمام ویژگی های Pygame را پوشش می دهند. این مستندات این امکان را به شما می دهند که دانش لازم در مورد تمام جنبه های Pygame را بدست آورید، و به سطحی فراتر از آنچه که از طریق منابع آموزش قبلی بدست آورده اید برسید.
Pygame Wiki نیز در یافتن پاسخ هر گونه سوالی که احتمالا در مورد پلتفرم Pygame دارید شما را یاری خواهد کرد، بنابراین تردید نکنید و نگاهی به آن بیاندازید.
کدها را بررسی کنید
بررسی کدها به شما کمک خواهد کرد تا بفهمید که چگونه بخش های مختلف Pygame برای ایجاد یک بازی کامل با یکدیگر تعامل دارند. علاوه بر این، مثال های آموزشی بهترین شیوه های انجام کارها را به شما نشان خواهند داد، واحتمالا هنگام بررسی آنها ترفندهایی را یاد می گیرید.
برای جزئیات بیشتر در مورد چگونگی استفاده از ماژول های مختلف، مثال های رسمی Pygame را بررسی کنید، و یا برای دیدن مجموعه کاملی از کدها، پروژه های عمومی Pygame بر روی GitHub را بررسی کنید.
در انجمن مشارکت کنید
Pygame دارای یک کانال IRC(جهت گفتگوی متنی) و نیز یک لیست پستی است. (این لیست پستی با یک رابط کاربری فروم مانند نیز در دسترس است.) اعضای انجمن مشتاقانه آماده کمک به افراد تازه کارهستند، بنابراین از مطرح کردن سوالات خود هراسی نداشته باشید.
زمانی که شما هم تبدیل به یک متخصص Pygame شدید، با انجمن همکاری کنید و راهنمای دیگران باشید. آموختن به دیگران باعث خواهد شد که چیزهای جدیدی یاد بگیرید و همچنین دانسته های قبلی تان را نیز تحکیم می کند.
بازی های خودتان را بسازید
منابع آموزشی که در بالا به آنها اشاره شد برای بدست آوردن یک دانش منسجم از Pygame کافی خواهند بود. از این گذشته، اگر این منابع آموزشی را دنبال کنید، در طول یادگیری از طریق این منابع بازی های متعددی خواهید ساخت. با این حال، به طور جدی از شما می خواهم که بازی های خلاقانه خود را بسازید. کاری فراتر از ساختن بازی Tic-Tac-Toe و یا بازی های تمرکز انجام دهید. هرکسی می تواند یک بازی را با دنبال کردن آموزش گام به گام آن بسازد. اجازه دهید که خلاقیت تان جاری شود و با ساخت یک بازی ابتکاری، مهارت های خود را بیازمایید.
رهنمود هایی برای توسعه
از گروه ها استفاده کنید
Pygame دارای ویژگی بسیار قدرتمندی به نام groups است که از طریق کلاس pygame.sprite.Group
قابل دسترسی است. یک گروه (group) اساسا نگهدارنده ای برای آبجکت های از نوع sprite است.
به عنوان مثال اگر در حال ساخت چند آبجکت گلوله یا bullet
باشم، می توانم آنها را به گروهی با نام bullets
اضافه کنم:
1 |
bullets = pygame.sprite.Group() |
2 |
|
3 |
for i in range (10): |
4 |
bullets.add(Bullet()) |
کار کردن با گروه ها بسیار سریع تر از کار کردن با sprite های منفرد است. شما می توانید به سادگی و با فراخوانی متد Group.update()
، تمام sprite های موجود در یک گروه را بروز رسانی کنید و یا با متد Group.draw()
تمام محتوای Group
را در Surface
خود ترسیم (blit) کنید. علاوه بر این، گروه ها کار تشخیص تصادم را ساده تر می کنند، زیرا در Pygame متدی وجود دارد که برای بررسی تصادم بین دو گروه به کار می رود: pygame.sprite.groupcollide()
Surface های خود را تبدیل (Convert) کنید.
هر جا که یک آبجکت Surface
ایجاد می کنید، با فراخوانی متد convert()
از تبدیل شدن آن مطمئن شوید. این متد فرمت پیکسل یک Surface
را جهت مطابقت با فرمت پیکسل Surface
صفحه نمایش تغییر می دهد. اگر از این متد استفاده نشود، هر دفعه که شما چیزی را به Surface
خود blit کنید، یک تبدیل پیکسل لازم خواهد بود- یک عملیات بسیار کند.
به عنوان مثال، در عوض این کد:
1 |
ballPicture = pygame.image.load('ball.png') |
این فراخوانی را انجام دهید:
1 |
ballPicture = pygame.image.load('ball.png').convert() |
و یا در صورتی که نیاز به تنظیم alpha دارید:
1 |
ballPicture = pygame.image.load('ball.png').convert_alpha() |
توجه داشته باشید که فراخوانی متد convert_alpha()
منجربه افزایش کارایی مشابه با زمانی که متد convert()
فراخوانی می شود نخواهد شد، چرا که فرمت پیکسل دقیقا منطبق با پنجره Surface
نخواهد بود. با این وجود، این کار منجر به بهبود سرعت blit خواهد شد.
Update در مقابل Flip
هر دو متد pygame.display.update()
و و pygame.display.flip()
محتویات پنجره بازی را بروز رسانی می کنند. با این حال، فراخوانی ساده آنها تمام صفحه را بروز رسانی می کند، و در نتیجه نرخ فریم را به شدت کاهش میدهد. به جای استفاده از حالت ساده، در نظر داشته باشید که فقط قسمت مشخصی از صفحه(هرجا که باید تغییر کند) را توسط فراخوانی متد pygame.display.update()
بروز رسانی کنید و و یک آبجکت rect
که نشان دهنده ناحیه ای که باید بروز رسانی شود است را به متد ارسال کنید. با انجام این کار، شاهد بهبود چشمگیری در کارایی خواهید بود.
توجه داشته باشید که در بعضی موارد، کل صفحه نمایش باید به روز رسانی شود و در این موارد هر دو روش به خوبی کار خواهند کرد.
ماژول های افزوده
بیاد آورید که قبلا درهمین پست به انجمن بزرگ و کارآمد Pygame اشاره کردم. توصیه می کنم که با دانلود ماژول های اضافه که توسط اعضای انجمن ساخته شده است، از مزایای انجمن بهره مند شوید. این ماژول ها، توسعه سریعتر بازی های شما را تسهیل کرده و هم چنین فراِیند تولید بازی را ساده تر می کنند.
علاقه مندی های شخصی من این موارد هستند:
- Pyganim: اضافه کردن انیمیشن های sprite به بازی ها را راحت می کند.
- input.py: در هنگام استفاده از روش هایی با چندین controller، کار با کنترل ها در Pygame را راحت تر می کند.
- Python Game Utilities: مجموعه ی بزرگی از ابزارهای مفید برای Pygame.
با مراجعه به سایت Pygame می توانید کتابخانه های بیشتری پیدا کنید.
بازی های قابل اجرا
اگر می خواهید بازی هایی که ساخته اید به معنای واقعی مستقل از پلت فرم باشند، باید این مسئله را مدنظر داشته باشید که ممکن است کاربران شما Python و Pygame را روی سیستم خود نصب نکرده باشند.
استفاده از افزونه py2exe برای ساخت فایل اجرایی برای ویندوز ، و همچنین افزونه py2app برای ایجاد اپلیکیشن های قابل اجرا در سیستم عامل Mac OS X را مدنظر قرار دهید.
نمونه کارها
Pygame کمتر به صورت تجاری مورد استفاده قرار گرفته است، چرا که Python به خاطر قابلیت های ساخت بازی اش شناخته نشده است. با این وجود، Pygame در ساخت بازی های مستقل وموفق بسیاری مورد استفاده قرار گرفته است:
Galcon
Galcon یک بازی کهکشانی چندکاربره در سبک استراتژیک است، و احتمالا برجسته ترین بازی ساخته شده با استفاده از Pygame می باشد. این بازی توسط سایت GameTunnel که یکی از اولین سایتهای بررسی بازی های مستقل است، موفق به دریافت عنوان یکی از ده بازی برتر سال 2007 شد.



Frets on Fire
Frets on Fire یک بازی متن باز و مشابه با Guitar Hero است که با استفاده از Pygame و توسط کمپانی Unreal Voodoo و به عنوان افتتاحیه مسابقه بازی سازی Assembly 2006 ساخته شد.



Dangerous High School Girls in Trouble!
Dangerous High School Girls in Trouble! یک بازی در سبک نقش آفرینی (role-playing) است که برنده جوایز بسیاری شده است. سازنده آن یک توسعه دهنده مستقل به نام Mousechief است و به عنوان فینالیست در رقابت IndieCade 2008 حضور داشته است.



PyWeek
PyWeek یک چالش بازی سازی است که هر دوسال یکبار برگزار می شود و فقط بازی هایی با استفاده از Python ساخته شده اند حق شرکت در آن را دارند. بنابراین، بسیاری از بازی های شرکت کننده در این رویداد با استفاده از Pygame ساخته شده اند. لیستی از برندگان قبلی در سایت PyWeek موجود است.



جمع بندی
در این مطلب، مقدمه ای از توسعه بازی بوسیله Python و Pygame را به شما ارائه کردم. امیدوارم که در علاقه مند کردن شما به Pygame و آموختن چیزهایی بیشتری از آن به شما موفق بوده باشم. از پرسیدن سوالات خود چه در اینجا و چه در فروم های گوناگون Pygame دریغ نکنید. شما اکنون آماده هستید تا سفر خود را به دنیای Pygame آغاز کنید. بهترین ها را برایتان آرزومندم!