معرفی Pygame

?What is Pygame

29 اردیبهشت 1405
what-is-pygame

بارها و بارها بازی‌ معروفی مثل Snake (آن بازی مار معروف!) را دیده‌اید. همچنین ممکن است با بازی‌هایی مثل Flappy Bird یا Space Invaders آشنا باشید. شاید با خودتان فکر کنید ساخت چنین بازی‌هایی به تیم‌هایی حرفه‌ای نیاز دارند که با کمک زبان‌های پیچیده برنامه‌نویسی آن‌ها را ایجاد کنند. اما شاید باورش سخت باشد ما فقط با کمتر از ۵۰ خط کد پایتون و البته استفاده از کتابخانه جادویی Pygame شما هم می‌توانید بازی‌هایی در آن سطح بسازید. در مقاله پیش‌رو می‌خواهیم به‌طور مفصل توضیح دهیم که Pygame چیست و چگونه کار می‌کند؟ چه مزایا و معایبی دارد و چرا باید آن را انتخاب کنید؟

نگاهی عمیق به مفهوم بازی

مهم‌ترین سرگرمی همه ما در کودکی بازی‌ها بوده‌اند. بازی‌ها به ما کمک کرده‌اند تا مهارت‌های فیزیکی و فکری خود را گسترش دهیم. بازی‌ها بهترین شبیه‌سازی از دنیای واقعی هستند که می‌توانیم زندگی کردن را در آن‌ها تمرین کنیم. حتی رفتار کردن با دوست و دشمن را نیز به ما می‌آموزند. آن‌ها بهترین، جذاب‌ترین و در عین حال موثرترین روش برای آموزش مهارت‌ها هستند.

وقتی بازی مورد علاقه خود را انجام می‌دهیم وارد دنیای دیگری می‌شویم؛ دنیایی که شاید در آن لحظه برای ما واقعی‌تر از دنیای خودمان باشد. خود را جای شخصیت‌های آن‌ها می‌گذاریم، جای آن‌ها می‌جنگیم، عشق می‌ورزیم، شکست می‌خوریم و پیروز می‌شویم. در این دنیا همه ناممکن‌ها ممکن می‌شود و شاید برای همین، دل کندن از آن‌ها سخت است.

بازی‌ها قدمتی به درازای تاریخ دارند و در همه فرهنگ‌ها و ملت‌ها دیده می‌شوند و نشان‌دهنده فرهنگ و افکار هر ملتی هستند. برای ساخت یک بازی، سه عنصر اصلی را باید تعریف کنیم:

  1. بازیکن‌ها: افرادی که در بازی شرکت می‌کنند.

  2. قوانین بازی: قوانینی که نحوه تعامل بازیکن با محیط را مشخص می‌کند (مثلاً در شطرنج هر مهره قانون خاص خود را دارد).

  3. محیط بازی: فضایی که بازی در آن رخ می‌دهد (صفحه شطرنج، زمین فوتبال، یا یک جنگل مجازی).

ساخت بازی با پایتون

برای ساخت بازی با پایتون، راه‌های متعددی وجود دارد؛ از کتابخانه‌های سطح پایین مانند PyOpenGL گرفته تا فریم‌ورک‌های همه‌کاره مثل Kivy و Pyglet. اما اگر به دنبال کوتاه‌ترین، ساده‌ترین و در عین حال قدرتمندترین راه برای شروع هستید، بی‌تردید Pygame بهترین گزینه شماست.

Pygame چیست؟

Pygame یک کتابخانه منبع‌باز (Open-Source) و رایگان برای زبان برنامه‌نویسی پایتون است که به‌طور اختصاصی برای توسعه بازی‌های دو بعدی (2D) و برنامه‌های چندرسانه‌ای طراحی شده است.

به زبان ساده‌تر، Pygame یک پل ارتباطی بین کد پایتون شما و کتابخانه قدرتمند SDL (Simple DirectMedia Layer) است. SDL وظیفه دسترسی به سخت‌افزارهای سیستم مانند کارت گرافیک، صدا، ماوس و صفحه کلید را بر عهده دارد (برای آشنایی بیش تر با SDL می توانید به لینک مراجعه کنید).

بنابراین با Pygame شما دیگر نگران این نیستید که «چگونه یک دکمه کیبورد را تشخیص دهم؟» یا «چگونه یک صدا را پخش کنم؟». Pygame این کارهای تکراری و سطح پایین را برای شما آسان کرده است.

حالا که فهمیدیم Pygame چیست باید بدانیم چطور کار می‌کند؟

Pygame چگونه کار می‌کند؟ (معماری داخلی Pygame)

Pygame مستقیما با سخت‌افزار ارتباط برقرار نمی‌کند، بلکه از SDL استفاده می‌کند که خود یک لایه انتزاعی روی سخت‌افزارهای مختلف است. یعنی چه؟ فرض کنید شما یک توریست هستید که می‌خواهید در سه کشور فرانسه، آلمان و انگلیس «مرغ سوخاری» سفارش دهید. بدیهی است که نمی‌توانید با گارسون‌های رستوران‌های هرسه کشور به فارسی صحبت کنید چون آن‌ها زبان شما را اصلا نمی‌فهمند. پس لازم است یک مترجم همزمان (SDL) کنار شما باشد که خواسته شما را به هر سه زبان ترجمه کند. 

در پایتون هم همین اتفاق می‌افتد: مثلا شما به‌عنوان برنامه‌نویس پایتون به برنامه دستور می‌دهید یک دایره سبز ترسیم کند. SDL به‌عنوان لایه انتزاعی یا مترجم درخواست شما را می‌گیرد و به زبان‌های مخصوص ویندوز، مک و لینوکس ترجمه می‌کند.

به همین دلیل بازی‌ای که شما در ویندوز می‌نویسید بدون تغییر کد روی لینوکس یا مک نیز اجرا می‌شود. این ویژگی Cross-Platform نام دارد. اگر Pygame نبود، شما مجبور بودید برای پخش کردن صدا در ویندوز یک کد بنویسید و برای پخش همان صدا در مک، یک کد کاملا متفاوت!

موضوع دیگری که بهتر است به آن اشاره کنیم این است که پایتون زبانی به‌شدت آسان و خواندنی است، اما یک مشکل بزرگ دارد:  کند است! (نسبت به زبان‌هایی مثل C یا C++). فرض کنید که قرار است با پایتون یک بازی بسازید که در آن با سرعت ۶۰ فریم بر ثانیه صفحه عوض می‌شود. چنانچه هربار بخواهید یک نقطه روی صفحه ترسیم کنید، پایتون ناچار است مقدار زیادی محاسبات سنگین انجام دهد، در نتیجه بازی لگ می‌زند. پس راهکار چیست؟ Pygame!

Pygame یک کتابخانه دوزبانه است:

  1. بخش اول (مدیریتی) که با پایتون نوشته شده است و نیازی به سرعت چندانی ندارد (مثلا چه کلیدی فشرده شده است؟ آیا بازی تمام شده است و غیره)
  2. بخش دوم (عملیاتی) که با C و Assembly نوشته شده است و نیاز به سرعت بسیار بالا در حد کسری از ثانیه دارد (مثلا یک بیضی روی صفحه رسم کن! این صدا را پخش کن و غیره)

مقایسه Pygame با سایر کتابخانه‌های پایتون

اگرچه Pygame محبوب‌ترین و آسان‌ترین گزینه برای شروع بازی‌سازی دو بعدی است، اما گزینه‌های دیگری نیز وجود دارند که هرکدام برای کار خاصی طراحی شده‌اند. در این بخش، ۵ کتابخانه و فریم‌ورک معروف دیگر پایتون را معرفی و سپس آن‌ها را با Pygame مقایسه می‌کنیم.

PyKyra (مناسب برای سرعت بالا)

یکی از سریع‌ترین فریم‌ورک‌های توسعه بازی برای پایتون است که هم بر اساس SDL و هم موتور Kyra ساخته شده است. این فریم‌ورک از ویدئو با فرمت MPEG، MP3، Ogg Vorbis، Wav و تصاویر پشتیبانی می‌کند.

Pyglet (مناسب برای گرافیک OpenGL)

یک کتابخانه چندرسانه‌ای Open Source و نیرومند برای پایتون است که می‌توان از آن در ویندوز، مک و لینوکس استفاده کرد. Pyglet از پنجره‌سازی، مدیریت رویداد، گرافیک OpenGL (مناسب برای افکت‌های سه بعدی سبک)، بارگذاری تصاویر و فیلم‌ها و پخش صدا پشتیبانی می‌کند. Pyglet روی پایتون 3.5 قابل اجراست.

PyOpenGL (مناسب برای گرافیک سه‌بعدی محض)

یک کتابخانه گرافیکی است که توسط ویندوز، لینوکس و macOS پشتیبانی می‌شود. PyOpenGL به تنهایی کارایی ندارد و باید در کنار کتابخانه‌های GUI دیگر مانند Pygame، PyQt یا Tkinter استفاده شود. اگر قصد دارید یک موتور سه‌بعدی را از صفر بنویسید، این کتابخانه برای شما ساخته شده است.

Kivy (مناسب برای اپلیکیشن موبایل و تاچ‌اسکرین)

یک کتابخانه منبع‌باز و Cross-Platform برای توسعه سریع برنامه‌هاست. روی لینوکس، ویندوز، macOS، اندروید، iOS و حتی Raspberry Pi اجرا می‌شود. اگر می‌خواهید بازی شما با لمس صفحه کار کند یا آن را در گوشی موبایل اجرا کنید، Kivy انتخاب بهتری نسبت به Pygame است.

Panda3D (مناسب برای بازی‌های حرفه‌ای سه‌بعدی)

یک موتور منبع‌باز و کاملاً رایگان برای بازی‌های سه‌بعدی، تجسم‌سازی، شبیه‌سازی و واقعیت مجازی است. Panda3D شامل ابزارهای خط فرمان برای پردازش و بهینه‌سازی است و از کتابخانه‌های معروفی مانند Bullet، Assimp، OpenAL و FMOD پشتیبانی می‌کند.

کتابخانه کاربرد اصلی سختی یادگیری پشتیبانی از 3D
Pygame بازی‌های 2D، شروع سریع آسان خیر
Pyglet بازی‌های 2D و بازی‌های 3D سبک متوسط بله (OpenGL)
Panda3D بازی‌های حرفه‌ای 3D سخت بله
Kivy اپلیکیشن‌های موبایل (اندروید/iOS) و بازی‌های لمسی متوسط محدود
PyOpenGL گرافیک سه‌بعدی محض سخت بله

مزایای Pygame

  1. کار با آن ساده است.
  2. برای بازی‌سازی با پایتون شناخته شده‌تر است و جامعه برنامه‌نویسان بیشتری دارد.
  3. cross-platfrom و می‌تواند در لینوکس ویندوز و مک نوشته و اجرا شود.
  4. نیاز به یک سیستم حرفه‌ای برای شروع کار ندارید.
  5. از پردازنده‌های چندهسته‌ای سیستم به‌راحتی می‌توان استفاده کرد.
  6. برای عملیات سریع از کد بهینه‌شده C و Assembly استفاده می‌کند.
  7. قابل حمل است.
  8. حجم کد کمی دارد.

معایب Pygame

در کنار مزایای فوق، Pygame سه عیب کلیدی دارد که پیش از شروع یادگیری باید با آن‌ها آشنا باشید:

ایراد اول: قادر به ساخت بازی‌های سه‌بعدی نیست
Pygame اساسا برای ساخت بازی‌های دو بعدی طراحی شده است. Pygame از قدرت کارت گرافیک (GPU) استفاده نمی‌کند و به همین خاطر برای رندر سه‌بعدی خیلی کند است. پس اگر آرزو دارید GTA یا Call of Duty را بسازید، بروید سراغ موتوریهای حرفه‌ای مثل Unity یا Unreal Engine

ایراد دوم: ویرایشگر بصری ندارد
در موتورهای بازی‌سازی حرفه‌ای مثل Unity، شما قادرید اشیا و عناصر محیط را با ماوس بکشید و در صحنه رها کنید (Drag & Drop) اما در Pygame همه کارها فقط با کدنویسی انجام می‌شود، حتی برای قرار دادن یک دکمه در صفحه باید کد بنویسید. پس ممکن است برای پروژه‌های بزرگ واقعا دیوانه‌کننده و خسته‌کننده باشد!

ایراد سوم: در پروژه‌های دوبعدی بسیار پیچیده، کند است
Pygame برای ساخت ۹۰ درصد پروژه‌های دوبعدی نیاز شما را برطرف می‌کند و سرعت مناسب دارد اما اگر می‌خواهید بازی‌های بسیار پیچیده دوبعدی بسازید که در آن‌ها هزاران آبجکت متحرک وجود دارد، Pygame دچار افت فریم می‌شود و اصطلاحا لگ می‌زند. به دلیل آن هم در بالا اشاره کردیم: Pygame از پردازنده CPU استفاده می‌کند، نه GPU.
برای پروژه‌های خیلی سنگین، می‌توان از کتابخانه‌های سطح پایین‌تر مثل Pyglet بهره برد.

آیا Pygame برای من مناسب است؟

اگر تازه‌کار هستید و به‌تازگی پایتون را آموخته‌اید و قصدتان این است که وارد دنیای بازی‌سازی شوید و مفاهیم اصلی بازی‌سازی را به‌صورت عملی و حرفه‌ای درک کنید، Pygame مناسب شماست اما باید در نظر داشته باشید که فقط در ساخت بازی‌های کلاسیک دوبعدی می‌تواند به شما کمک کند. مزایای فوق العاده Pygame مانند سادگی، متن‌باز بودن، رایگان بودن و داشتن جامعه برنامه‌نویسان بزرگ فارسی زبان می‌توانند مسیر یادگیری بازی‌سازی با Pygame را واقعا برایتان لذتبخش کنند.

اما چنانچه هدف شما ساخت یک بازی سه‌بعدی پیچیده است و تمایل دارید مراحل ساخت بازی را خیلی سریع اجرا کنید و حوصله خط‌به‌خط کد زدن ندارید، Pygame را به شما توصیه نمی‌کنیم. همچنین اگر می‌خواهید برای موبایل یا به صورت لمسی یک بازی بسازید، Pygame نمی‌تواند در این مسیر کمکی کند. Pygame همچنین از ایجاد افکت‌های پیشرفته گرافیکی مثل سایه و نور ناتوان است.

معرفی کتاب‌های خوب در زمینه آموزش Pygame

برای آشنایی بهتر و گسترش دانش خود در pygame پیشنهاد می‌کنیم کتاب‌های زیر را مطالعه کنید:

عنوان کتاب: Invent Your Own Computer Gameswith Python
نویسنده: Al Sweigart

عنوان کتاب: Game Development Using Python
نویسنده: James R

عنوان کتاب: Program Arcade Games: With Python and Pygame
نویسنده: Paul Craven

عنوان کتاب: Python Crash Course - A Hands-On, Project-Based Introduction to Programming
نویسنده: Eric Matthes

عنوان کتاب: Python and Tkinter Programming
نویسنده: John Grayson

کتاب های آموزش pygame

نتیجه

Pygame یک کتابخانه کارآمد و محبوب برای ساخت بازی‌های دوبعدی در زبان پایتون است. این ابزار به شما کمک می‌کند برای سرگرمی یا به‌عنوان پروژه‌های دانشگاهی، بازی‌های جذابی بسازید. اگر به‌دنبال یادگیری مسیر بازی‌سازی هستید، Pygame یک قدم اول عالی برای شماست اما مقصد نهایی نیست.

اگر تازه‌کار هستید، توصیه می‌کنیم همین حالا Pygame را شروع کنید. بعد از ساخت ۲ یا ۳ بازی کامل، اگر احساس کردید دیگر جوابگوی شما نیست، آن وقت می‌توانید سراغ گزینه‌های حرفه‌ای‌تر مثل Unity بروید. در هرحال دانشی که از Pygame یاد می‌گیرید (حلقه بازی، رویدادها، فیزیک ساده) در هر موتور دیگری هم به کارتان می‌آید.

ما یک سری آموزش Pygame برای شما تهیه کرده‌ایم که می‌توانید از طریق فهرستی که زیر همین درس قرار دارد، به ترتیب درس‌های آن را مطالعه کنید. برای آغاز این سری آموزشی باید درک مقدماتی از مفاهیم پایتون داشته باشید. در صورت تمایل به یادگیری مفاهیم ابتدایی پایتون، می‌ توانید دوره ویدیویی آموزش مقدماتی پایتون را که بصورت رایگان در سایت روکسو منتشر شده است، مشاهده کنید. نکته دیگر اینکه pygame با بیش‌تر نسخه های پایتون کار می‌کند. در این سری آموزشی از پایتون نسخه 3. 8. 3 استفاده شده است.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری بازی‌سازی با پایتون توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

طاها مقدم
05 مرداد 1403
لطفا برای کسانی که سن کم تری دارند مثلا10 تا 14 سال بهتر توضیح بدید لطفا برای تمامی مقاله های پایتون از این نظر استفاده کنید

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.