بازی های ساخته شده با پایتون – لیست معروف ترین نمونه ها
بازی هایی مانند «ایو آنلاین» (EVE Online)، «دنیای تانکها» (World of Tanks) و «تمدن چهار سید مایر» (Sid Meier’s Civilization IV) جزو چند مورد از مشهورترین بازی های ساخته شده با پایتون هستند. در زمان توسعه بازی های پیچیده و حرفهای بیشتر اوقات ممکن است از زبانها و تکنولوژیهای مختلفی استفاده شود. پایتون هم یکی از کاربردیترین زبانها در حوزههایی مانند اسکریپتنویسی، مادسازی و غیره است. بنابراین جای تعجب ندارد که در بخشهای از بازی های مشهور و بزرگ هم زبان برنامه نویسی پایتون استفاده شده باشد.
- با کاربرد پایتون در معماری بازیهای حرفهای آشنا میشوید.
- نقش پایتون را در اسکریپتنویسی و مادسازی بررسی میکنید.
- شیوه استفاده از پایتون در بازیهای مشهور را مقایسه میکنید.
- مزایا و محدودیتهای پایتون در بازیسازی را میآموزید.
- الگوهای معماری چندزبانه در توسعه بازی را بررسی میکنید.
- معیارهای انتخاب پایتون برای بخشهای مختلف بازی را یاد میگیرید.


در این مطلب از مجله فرادرس ابتدا چند مورد از بازی های ساخته شده با پایتون را بررسی میکنیم. سپس هر بازی را به شکل تخصصی بررسی کرده و کاربرد پایتون در آن بازی را توضیح میدهیم. هدف از این مطلب آن نیست که بازی ها و داستان آنها را مرور کنیم. بلکه میخواهیم روش استفاده از پایتون و مزایا و محدودیتهای این زبان برنامه نویسی در سبکهای مختلف بازی را بررسی کنیم.
معروف ترین بازی های ساخته شده با پایتون
در فهرست پایین، چند مورد از بازی های ساخته شده با پایتون را معرفی کردهایم.
- «سیمز ۴» (The Sims 4)ّ
- «ایو آنلاین» (EVE Online)
- «دنیای تانکها» (World of Tanks)
- «تمدن چهار سید مایر» (Sid Meier’s Civilization IV)
- «!Doki Doki Literature Club»
- «Long Live the Queen»
- «Frets on Fire»
- «The Temple of Elemental Evil»

در ادامه مطلب تمام موارد بالا را یک به یک معرفی خواهیم کرد.
تا این قسمت از مطلب، چند مورد از مهمترین بازی های ساخته شده با پایتون را معرفی کردهایم. در ادامه تمام این بازیها و نحوه استفاده از پایتون را در آنها توضیح میدهیم. در صورت تمایل به مطالعه چنین مطالبی، پیشنهاد میکنیم که اپلیکیشن مجله فرادرس را بر روی دستگاههای همراه خود نصب کنید.
برای نصب اپلیکیشن رایگان مجله فرادرس، کلیک کنید.
چرا از پایتون در بازیسازی استفاده میشود؟
سوال اصلی این نیست که آیا پایتون، سرعت کافی دارد یا نه. سوال مهمتر این است که کدام لایه از سیستم به انعطافپذیری نیاز دارد و این لایه تا چه اندازه باید با موتور اصلی بازی در ارتباط باشد. بنابراین نکته مهم، محل استفاده از آن در معماری پروژه است. به طور معمول از پایتون به عنوان زبان اصلی بخشهای حساس و سنگین موتور بازی استفاده نمیکنند.
با این حال، این زبان عملکرد خوبی از خود در بخشهایی مانند اسکریپتنویسی، مادسازی، ابزارهای توسعه و لایههای سرویس نشان داده است. زیرا در این قسمتها، سرعت در تغییر و توسعه از عملکرد صرف در اجرای فریمها مهمتر است. بنابراین حضور پایتون در ساختار فنی بازی ها بیشتر از چیزی است که طرفداران متعصب موتورهای بازی تصور میکنند.
گاهی از اوقات گفته میشود بازی خاصی با پایتون ساخته شده است. این عبارت میتواند حداقل سه معنی مختلف داشته باشد.
- در حالت اول: پایتون منطق گیمپلی را اجرا میکند.
- در حالت دوم: از پایتون به عنوان ابزاری برای توسعهدهندگان و مادسازها استفاده میشود.
- در حالت سوم: پایتون سیستمهای جانبی را در کنار هسته سطح پایین اجرا میکند.

هرکدام از این رویکردها تصمیمی متفاوت هستند و چالشهای مخصوص خود را دارند.
| ایده اصلی | مزیت | چالش یا نکته مهم |
|---|---|---|
| استفاده از پایتون در لایههای کمکی | توسعه سریع و انعطافپذیر | مناسب نبودن برای بخشهای سنگین موتور |
| استفاده در معماری | ارتباط بهتر با موتور بازی | نیاز به طراحی درست سیستم |
| استفادههای مختلف از پایتون در بازی ها | پشتیبانی از گیمپلی، ابزار و مادسازی | هر رویکرد چالش متفاوتی دارد. |
بازی «ایو آنلاین» (EVE Online) و «تمدن ۴» (Civilization IV) مثالهای مناسبی هستند، چون در دو سمت متفاوت این معماری قرار میگیرند. برای مثال بازی EVE Online سالها از پایتون در ساختار خود به صورت جدی و زنده استفاده کرده است. شرکت «CCP» نیز درباره پایتون «Stackless» و معماری این بازی توضیحاتی منتشر کرده است.
در مقابل، «تمدن ۴» نمونهای واضحتری از کار با پایتون به عنوان لایهای محدود برای اسکریپتنویسی و مادسازی است. این موضوع در مستندات API پایتون بازی «تمدن ۴» نیز توضیح داده شده است.
The Sims 4
بازی «The Sims 4» چهار یکی از محبوبترین بازی های شبیهسازی زندگی در جهان است. این بازی نه تنها به خاطر گیمپلی جذابش مشهور شده، بلکه طراحی فنی آن هم توجه بسیاری از توسعهدهندگان را جلب کرده است. یکی از بخشهای مهم این طراحی، استفاده از زبان برنامهنویسی پایتون است.

پایتون زبانی سطح بالا و خوانا است. این زبان از سبکهای مختلف برنامهنویسی مانند «رویهای» (Procedural)، «شی گرا» (Object-Oriented) و «برنامه نویسی تابعی» (Functional Programming) پشتیبانی میکند. در ضمن از پایتون به دلیل داشتن ویژگیهای زیر برای اتصال بخشهای مختلف نرمافزار نیز استفاده میشود.
- ساختارهای داده قدرتمند
- «نوعدهی پویا» (Dynamic Typing)
- و انعطافپذیری بالا
در بازی The Sims 4، پایتون وظایف مختلفی را مدیریت میکند. برای مثال، از آن برای انجام کارهایی مانند موارد زیر، استفاده میشود.
- کنترل رویدادهای بازی
- رفتار شخصیتها
- ارتباط با موتور بازی
- نوشتن سریعتر و سادهتر کدها
- اعمال تغییرات و گسترش راحتتر بازی

بهروزرسانی پایتون در The Sims 4
در یکی از بهروزرسانیهای بازی، سیستم پایتون The Sims 4 تغییر کرد. این تغییر روی افزونههایی تاثیر گذاشت که با قالب «pyo.» ساخته شده بودند. بعد از این بهروزرسانی، قالب «pyc.» جایگزین «pyo.» شد. به همین دلیل، بسیاری از مادهای اسکریپتی قدیمی دیگر کار نمیکردند. البته مادهایی که کاملا در قالب «package.» ساخته شده بودند، تحت تاثیر این تغییر قرار نگرفتند.
استفاده از پایتون در The Sims 4 نشان میدهد این زبان برای توسعه بازی، انتخابی انعطافپذیر و کارآمد است. توسعهدهندگان بازی با کمک پایتون توانستند سیستمی پیچیده و قابل گسترش ایجاد کنند. سیستمی که هنوز هم با کمک کاربران و مادسازها رشد کرده و تغییر پیدا میکند.
چطور بازی سازی با پایتون را در فرادرس یاد بگیریم؟
به منظور یادگیری بازیسازی با پایتون لازم است صبور باشیم و مرحلهبهمرحله به پیش برویم. این مراحل از آشنایی با مفاهیم اولیه شروع میشوند و تا یادگیری پیشرفته برنامهنویسی و کتابخانههای تخصصی ادامه پیدا میکنند. در زمان ورود به این حوزه لازم است که از منابع آموزشی درست استفاده کنیم. زیرا انتخاب محتوای مناسب علاوه بر بهتر کردن کیفیت یادگیری، سرعت آن را هم بیشتر میکند. وبسایت آموزشی فرادرس مطالب متنی و فیلمهای آموزشی متنوعی درباره بازیسازی با پایتون منتشر کرده است.

با مراجعه به محتوای تولید شده در این وبسایت میتوانید مهارتهای خود را به میزان چشمگیری ارتقا دهید. این مجموعه آموزشی پر از فیلمهایی است که به منظور کمک به یادگیری مهارتهای مختلف و کار با تکنولوژیهای گوناگون تولید شدهاند. مشاهده فیلمهای پروژهمحور جزو بهترین گزینهها برای حرفهای شدن در بازیسازی با پایتون است. در فهرست پایین، چند نمونه از فیلمهای آموزش ساخت بازی با پایتون را معرفی کردهایم.
- فیلم آموزش پایتون با طراحی بازی سنگ کاغذ قیچی + گواهینامه
- فیلم آموزش پیاده سازی بازی مار در پایتون با یادگیری تقویتی عمیق
- فیلم آموزش ساخت بازی در پایتون و PyGame، بازی شوتر فضایی در پای گیم + گواهینامه
- فیلم آموزش پروژه محور پایتون Python درباره ساخت بازی حدس کلمات
- فیلم آموزش پروژه محور پایتون درباره ساخت بازی حافظه تصویری با کتابخانه Tkinter و Turtle + گواهینامه
در بخش بعد روش استفاده از زبان برنامه نویسی پایتون در بازی EVE Online را بررسی کردهایم.
EVE Online

بازی «ایو آنلاین» (EVE Online) نشان میدهد که پایتون فقط برای ساخت نمونههای اولیه یا پروژههای ساده و سرگرمی ساخته نشده است. نکته اصلی در این پروژه، معماری سیستم بود. شرکت «CCP Games» از پایتون در بازیی از نوع «MMO» بزرگ و آنلاین استفاده کرد.
هرچند بخشهای حساس به عملکرد را با کدهای سطح پایین توسعه داده است. مطلبی که این شرکت درباره پایتون Stackless و معماری EVE Online منتشر کرده است، هنوز هم یکی از منابع مهم برای درک این نوع ساختار به حساب میآید.
«ایو آنلاین» مانند بازی هایی نیست که فقط برای مادسازی یا ابزارهای جانبی از پایتون استفاده میکنند. در این بازی، پایتون بخشی از ساختار سرویسها و سیستم شبیهسازی است. در این قسمتها مواردی مانند توسعه سریع، انعطافپذیری و مدیریت قوانین سطح بالا اهمیت بیشتری نسبت به حداکثر توان پردازشی دارند. در ضمن از پایتون برای کنترل رفتار موجودیتها و هماهنگی بخشهای مختلف سمت سرور نیز استفاده شده است.
این انتخاب در بازی های آنلاین دائمی منطقی به نظر میرسد، زیرا این بازی ها ویژگیهای خاصی دارند که سه مورد از آنها را در پایین نوشتهایم.
- قوانین بازی مدام تغییر میکنند.
- رفع مشکلات عملیاتی اهمیت زیادی دارد.
- تیم توسعه نیز به روشی نیاز دارد که با کمک آن بتوان منطق تجاری بازی را بدون بازنویسی موتور اصلی تغییر داد.
نکات مهم برای توسعهدهندگان ارشد
بازی «ایو آنلاین» مرزی را نشان میدهد که بسیاری از تیمها هنوز آن را به درستی درک نکردهاند. حلقههای رندر، بخشهای حساس فیزیک و کدهای سطح پایین شبکه، محدودیتهای خاصی دارند. در مقابل، هماهنگیهای سمت سرور، قوانین گیمپلی و سیستمهای عملیاتی زنده با محدودیتهای متفاوتی روبهرو هستند. قرار دادن همه این بخشها در دستهای یکسان، بیشتر اوقات به تصمیم اشتباه درباره انتخاب زبان برنامهنویسی منجر میشود.
معماری چندزبانه زمانی موفق عمل میکند که هر لایه وظیفهای مشخص و قراردادی ثابت داشته باشد. در مورد «ایو آنلاین» نکته مهم این نیست که «پایتون برای همهچیز به اندازه کافی سریع است». بلکه از پایتون در جایی استفاده شده که انعطافپذیری، ارزش بیشتری دارد. این موضوع شامل موارد زیر است.
- «منطق وابسته به وضعیت» (Stateful Logic)
- «کدهای هماهنگکننده» (Coordination Code)
- و سیستمهایی که تحت فشار محیط عملیاتی مدام تغییر میکنند.
این موضوع شبیه آن است که موتور اصلی تا حد ممکن کوچک باقی بماند ولی لایهای در سطح بالاتر برای قوانینی ایجاد شود که هر هفته تغییر میکنند.
این مرزبندی روی نگهداری سیستم نیز تاثیر میگذارد. وقتی بخشی از اجرای برنامه برعهده پایتون قرار میگیرد، تمام رابطهای در دسترس به بخشی از محصول تبدیل میشوند. در این صورت مدیریت نسخهها سختتر است. زیرا باید میان چند زبان برنامهنویسی به صورت همزمان دیباگ کنیم. از طرف دیگر API-های داخلی نیز به نامگذاری دقیق، مالکیت مشخص و مستندسازی ماندگار نیاز دارند. این مستندات باید حتی بعد از تغییر اعضای تیم نیز قابل استفاده باشند.
تیمهای علاقهمند به استفاده از این الگو بهتر است همان اصولی را بررسی کنند که در ابزارهای هوش مصنوعی برای کدنویسی پایتون و «طراحی پلتفرمهای داخلی» (Internal Platform Design) رعایت میشود. دلیل این موضوع هم روشن است. لایه اسکریپتنویسی فقط زمانی مفید است که از دستورالعمل واضح و شفافی پیروی کند.
درس مهم و ماندگار «ایو آنلاین» ساده است. کدهای پایتون برای داشتن عملکرد خوب در توسعه حرفهای بازی باید به شکل مناسبی ایزوله شده و با مرزهای دقیق و شفاف محافظت شوند. این مسئله فقط به بازیسازی اختصاص ندارد، بلکه برای عملکرد درست هر سیستم نرمافزاری در بلندمدت ضروری است.
World of Tanks

بازی «دنیای تانکها» (World of Tanks) نمونه یکی از الگوهای رایج در پروژههای حرفهای است. در این الگو بهجای کدنویسی هسته اصلی موتور بازی با پایتون از این زبان برای توسعهپذیر کردن سیستمهای داخلی استفاده میشود.
برای نوشتن حرفهای اسکریپتهای پایتون باید روش برنامه نویسی تابعی را بلد باشیم. در صورت نیاز به کمک در این زمینه پیشنهاد میکنیم فیلم آموزش برنامه نویسی تابعی در پایتون + گواهینامه را در فرادرس مشاهده کنید. برای کمک به مخاطبان مجله، لینک دسترسی مستقیم به این فیلم را در پایین نیز قرار دادهایم.
الگوی توسعه بازی World of Tanks بسیار مهم است. زیرا بسیاری از تیمهای توسعه محصول میتوانند از آن استفاده کنند. اینجا دیگر با داستان «استفاده از پایتون برای همهچیز» روبهرو نیستیم. بلکه موضوع اصلی، «استفاده از پایتون در بخشهای مشخص و حسابشده» است.
این نوع بازی ها از پایتون برای موارد زیر استفاده میکنند.
- اسکریپتنویسی
- توسعه سیستمهای داخلی
- کدنویسی لایههای مربوط به مادسازی
- و غیره

در حالی که بخشهای سنگین موتور بازی با کمک دیگر زبانها توسعه داده میشوند. دلیل اصلی این تقسیمبندی آن است که تیمهای برنامه نویسی محیطی سادهتر و منعطفتر برای توسعه و تغییرات سریع داشته باشند. در ضمن اینکه کدهای حساس به عملکرد هم مجبور نباشند همان مسیر را دنبال کنند.
توسعهپذیری کنترلشده در بازیسازی با پایتون
وقتی به بازی های محبوب ساخته شده با پایتون نگاه میکنیم، الگوی مشترکی به نام « توسعهپذیری کنترل شده» (Controlled Extensibility) دیده میشود. در این روش، لازم نیست که کاربرانبه همه بخشهای سیستم به شکل کامل دسترسی داشته باشند. فقط بخشی از زمان اجرای برنامه در اختیار آنها قرار میگیرد. آنهم هم فقط در حدی که برای منطق رابط کاربری، قوانین بازی یا رفتار مادها کافی باشد.
این رویکرد چند مزیت مهم دارد.
- تکرار و توسعه سریعتر قابلیتها: طراحان و برنامهنویسان گیمپلی میتوانند رفتارهای سطح بالا (یعنی قابلیتهای بازی) را بدون بازسازی بخشهای داخلی موتور بازی تغییر دهند.
- مدل توسعه امنتر: میتوان بخشهایی مانند رندر، شبکه و سیستمهای سطح پایین را جدا نگه دارد. در عین حال نیز لایه اسکریپتی قدرتمندی را پیادهسازی کند.
- فرصتهای بهتر برای ابزارسازی: به طور معمول فرایندهای سازگار با پایتون هماهنگی خوبی با اتوماسیون و تولید کد دارند. این موضوع زمانی بیشتر به چشم میآید که تیم توسعه در بخشهای دیگر پروژه نیز از پایتون استفاده کنند.
با این حال، نگهداری این نوع سیستمها همیشه ساده نیست. زمانی که بخش اسکریپتنویسی پروژه بزرگتر میشود، پایداری API-ها هم اهمیت بیشتری پیدا میکند. چون کوچکترین تغییر میتواند روی بخشهای مختلف پروژه تاثیر بگذارد. تیمهایی که از این روش استفاده میکنند، معمولا ابزارهای کمکی فرایند توسعه را هم بررسی میکنند.
برای مثال میتوان به ابزارهای هوش مصنوعی مخصوص برنامهنویسی با پایتون اشاره کرد. زیرا در پروژههای به شدت وابسته به اسکریپتنویسی، مقدار زیادی کد کمکی و ابزار مخصوص توسعه تولید میشود. همه این بخشها باید مرتب، خوانا و قابل نگهداری باشند.
اضافه کردن لایه پایتونی به معماری نرمافزار کار سختی نیست. اما نگهداری محیط پایدار و قابل اعتماد برای پایتون میتواند به چالش بسیار بزرگی تبدیل شود.
Sid Meier’s Civilization IV

بازی «تمدن چهار سید مایر» (Sid Meier’s Civilization IV) یکی از گزینههای مهم در بین بازی های ساخته شده با پایتون است. این بازی یکی از بهترین نمونههای استفاده از پایتون به عنوان لایه اصلی برای اسکریپتنویسی در گیمپلی و مادسازی به شمار میرود.
در تمدن چهار، پایتون به بخشی از معماری عمومی بازی شده است. شرکت «Firaxis» از پایتون به عنوان زبان اصلی موتور بازی استفاده نکرده است بلکه پایتون را در بخشهایی به کار برد که بازی های استراتژی بیشترین تغییرات را در آنها دارند. این بخشها شامل موارد زیر هستند.
- منطق رویدادها
- رفتارهای گیمپلی
- سیستمهای مرتبط با رابط کاربری
- و نقاط اتصال مادسازی

برای توسعهدهندگان سینیور پایتون، بازی «تمدن چهار» (Civilization IV) به همان دلیلی جذاب است که سیستمهای سازمانی مبتنی بر پلاگین جذاب هستند. تیم توسعه، API سطح بالایی طراحی کردهاند تا افرادی خارج از تیم توسعه موتور بازی هم بتوانند به صورت موثر با آن کار کنند. با طراحی این مرزبندی، لایه اسکریپتنویسی دیگر فقط بخشی از جزئیات داخل پروژه نیست. بلکه به رابط رسمی و قابل نگهداری تبدیل شده است.
یکی از کتابخانههای بسیار مناسب برای بازیسازی در پایتون، کتابخانه Pygame است. در فرادرس روش ساخت بازی ماشین با پایتون توسط این کتابخانه را آموزش دادهایم. در صورت تمایل به بررسی این برنامه و کدهای بازی میتوانید مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.
اهمیت مرزبندی میان موتور بازی و لایه اسکریپتنویسی
در هر بازی استراتژی نوبتی، بخش زیادی از منطق بازی بیشتر از قدرت «برای پردازش برنامه» به سرعت «برای توسعه و تغییر» نیاز دارد. قوانینی مانند سیستم مبارزه، رفتار دیپلماسی، اسکریپتنویسی سناریوها، مدیریت رویدادها و محتوای مادها سریعتر از بخشهایی مثل رندر یا الگوریتمهای پایه مسیریابی تغییر میکنند. برای توسعه این لایه سطح بالا پایتون انتخاب مناسبی است.
البته این موضوع تا زمانی درست است که موتور بازی مسئول سیستمهای حساس به عملکرد باشد و لایه اسکریپتنویسی تنها قوانین و منطق رفتاری را مدیریت کند.
این تقسیمبندی به کار مهندسی واقعی نیاز دارد.
- باید مالکیت وضعیتها به صورت شفاف مشخص شود.
- قراردادهای مربوط به رویدادها باید با دقت طراحی شوند.
- همچنین باید تعیین شود که اسکریپتها تا چه اندازه میتوانند سیستم را (بدون ایجاد مشکل برای شبیهسازی بازی)تغییر دهند.
بازی Civilization IV نمونه قدرتمندی از این مدل محسوب میشود. بازی ساخته شده با این تصمیم بسیار بیشتر از چیزی که به طور معمول در سیستمهای بسته دیده میشود، فعال و زنده باقی ماند.
هر سطح توسعهپذیری مناسب معمولا به سه بخش اصلی نیاز دارد.
- نقاط اتصال پایدار: رویدادها و Callback-ها باید نام، زمان اجرا و آرگومانهای قابل پیشبینی داشته باشند.
- دسترسی محدود و کنترل شده: اسکریپتهای پایتون بهجای بررسی بخشهای داخلی و حساس موتور بازی فقط باید قوانین بازی و رفتار محتوا را کنترل کنند.
- ساختارهای خوانا: مادسازها و برنامهنویسان گیمپلی باید به راحتی منطق API-های در دسترس خود را درک کنند. نه اینکه فقط آنها را برای صدا زدن توابع به کار ببرند.
در واقع هدف این نیست که بگوییم پایتون در بازیسازی از دیگر زبانها بهتر عمل میکند یا برای مثال اسکریپتنویسی با پایتون از اسکریپتنویسی با زبان برنامه نویسی «Ruby» قدرتمندتر است. بلکه باید ببینیم آیا برنامه نوشته شده میتواند به سوالات زیر پاسخ بدهد یا نه.
- آیا کدهای بازی ساختار اتصال تمیز و مناسبی دارد؟
- آیا قراردادهای آن پایدار هستند؟
- آیا محدودیتهای کافی وجود دارد تا لایه اسکریپتنویسی به موتور دومی برای بازی تبدیل نشود؟
بازی Civilization IV تا حد زیادی این تعادل را به درستی برقرار کرد. پایتون به این بازی انعطافپذیری بالایی داد و باعث شکلگیری جامعه فعال مادسازی «تمدن چهار» شد. در مقابل، هزینه این تصمیم مدیریت و نگهداری مداوم API-ها بود.
زمانی که بازیکنان توسعه ابزارهای خود را روی لایه اسکریپتنویسی آغاز میکنند، مسئولیت توسعهدهندگان بازی سنگینتر میشود. از آن پس توسعهدهندگان بازی متعهد شدهاند که از تمام توابع، رویدادها و مدل اشیا در دسترس مادسازها پشتیبانی کنند.
در نهایت توجه کنید که برای افزایش عمر بازی با کمک لایه اسکریپتنویسی باید با API مانند محصول واقعی و مستقل رفتار کنیم. نه اینکه آن را به چشم میانبری موقت برای توسعه بازی ببینیم.
Doki Doki Literature Club

بازی «!Doki Doki Literature Club» نماینده دسته متفاوتی از بازی های ساخته شده با پایتون است. در اینجا از پایتون فقط به عنوان ابزاری برای ساخت لایه اسکریپتنویسی داخل موتور اصلی بازی استفاده نشده است. این بازی از طریق «Ren’Py» ساخته شد. Ren’Py موتوری مبتنی بر پایتون است که ساختار کاملی برای توسعه بازی های داستانمحور در اختیار تیمها قرار میدهد.
در بعضی از بازی ها تمرکز اصلی روی روایت داستان است. در این دسته از بازی ها بیشتر اوقات، رندر سطح پایین چندان مشکل خاصی نیست. به طور معمول چالش اصلی موارد زیر هستند.
- جریان محتوا
- منطق شاخهای داستان
- مدیریت وضعیتها
- ترتیب نمایش دیالوگها
- و سرعت بالای توسعه محتوای داستانی

موتور مبتنی بر پایتون در زمان پیادهسازی این ساختارها عملکرد خوبی از خودش نشان میدهد.
موتورهای مبتنی بر پایتون در چه شرایطی مناسب هستند؟
Ren’Py وقتی انتخاب قدرتمندی است که پیچیدگی اصلی بازی بیشتر به محتوای طراحی شده و قوانین شاخهای داستان مربوط باشد. اما اگر چالش اصلی پروژه به فیزیک پیشرفته، رندر سهبعدی سنگین یا سیستمهایی وابسته به بهینهسازی سطح پایین مربوط شود، این موتور گزینه چندان مناسبی نخواهد بود.
بازی !Doki Doki Literature Club به طور عملی نشان میدهد که انتخاب موتور بازی باید بر اساس نوع بار کاری انجام شود.
- بازی های داستانمحور از ویژگی اسکریپتنویسی سود زیادی میبرند.
- تیمهای کوچک از ابزارهایی با ساختار مشخص و آماده استفاده، بهره بیشتری میبرند.
- جوامع مادسازی از سیستمهایی با ساختار داخلی سادهتر و قابل فهم استقبال میکنند.
بازی های داستانمحور یکی از واضحترین دستههایی هستند که پایتون برای توسعه حرفهای آنها کاملا مناسب است.
Long Live the Queen

بازی «عمر ملکه دراز باد» (Long Live the Queen) نشان میدهد ساختارهای داستانمحور مبتنی بر پایتون تا چه اندازه قابلیت گسترش دارند. با افزایش مسیرهای شاخهای داستان، این ساختارها همچنان عملکرد مناسبی از خود نشان میدهند.
بازی Long Live the Queen یکی دیگر از گزینههای مهم در بین بازی های ساخته شده با پایتون است. چون نش ان میدهد پایتون فقط برای نمایش دیالوگ استفاده نمیشود. چالش اصلی در اینجا رندر نیست. مسئله مهم، هماهنگکردن شبکهای پیچیده از موارد زیر است.
-
- آمارها
- بررسی رویدادها
- انتخاب برنامه
- شرطهای مخفی
- حالتهای شکست
- و نتیجههای متفاوت

آن هم بدون اینکه ساختار تولید محتوا بیش از حد پیچیده و غیرقابل مدیریت شود. از نظر معماری، این بازی در نقطهای میان رمان بصری ساده و بازی شبیهسازی قرار دارد. در اینجا از پایتون فقط برای نمایش متنها استفاده نمیکنیم. بلکه پایتون به عنوان لایهای برای تعیین قوانین بازی عمل میکند. این لایه وضعیت بازیکن را بررسی کرده و سپس منطق طراحی شده برای محتوا را اجرا میکند. به این صورت روند پیشرفت بازی را در میان مسیرهای مختلف هماهنگ نگهمیدارد.
این مسئله برای توسعهدهندگان ارشد اهمیت زیادی دارد. زیرا نشان میدهد پایتون فقط ابزاری ساده برای اسکریپتنویسی نیست. بلکه میتواند نقشی شبیه به موتور تخصصی مدیریت منطق بازی هم داشته باشد.
ارزش اصلی این روش در خوانایی و نگهداریپذیری آن قرار دارد. طراحان میتوانند رویدادها و شرطهای جدید را سریعتر اضافه کنند. از طرف دیگر، مهندسان هم تا زمان منظم بودن API-های مربوط به آمارها، «Flag»-ها و «Trigger»-های رویداد میتوانند سیستم را به راحتی مدیریت کنند.
این چالش در بسیاری از سیستمهای مبتنی بر قوانین دیده میشود. زمانی که تولیدکنندگان محتوا بتوانند متغیرها را آزادانه با هم ترکیب کنند، مدیریت و بررسی سیستم سختتر میشود. در چنین شرایطی، مشکلات فقط به شکل کرش ظاهر نمیشوند. گاهی ممکن است وضعیتهای نامعتبری ایجاد شوند. بعضی مسیرها شاید دیگر قابل دسترسی نباشند. حتی ممکن است بالانس بازی به دلیل ترکیبهایی به هم بخورد که هیچکس آنها را قبلا در کنار هم آزمایش نکرده است.
درسهای طراحی نرمافزار از بازی Long Live the Queen
به طور کل میتوان گفت که بازی Long Live the Queen به عنوان نمونهای از طراحی نرمافزار اهمیت دارد. چون همین مسائل در خارج از دنیای بازی ها نیز وجود دارند.
- وضعیتهای دامنه در طول زمان تغییر میکنند.
- فرایندها بر اساس انتخابهای کاربران شاخهبندی میشوند.
- سیستم ذخیرهسازی باید ترکیبهای مختلف و شرایط خاص زیادی را حفظ کند.
- تولیدکنندگان محتوا به نقاط توسعه امن و کنترل شده نیاز دارند.
- قوانین اصلی باید مرزهای قویتری نسبت به کدهای مربوط به نمایش و رابط کاربری داشته باشند.
درس عملی این مثال آن نیست که «پایتون میتواند هر کاری انجام دهد». بلکه به نکته مهمتر و کاربردیتری اشاره میکند. پایتون زمانی عملکرد خوبی دارد که بخش اصلی پیچیدگی پروژه در قوانین طراحی شده و وضعیتهای ترکیبی قرار داشته باشد. البته به شرطی که تیم توسعه این لایه را مانند زیرسیستم واقعی مدیریت کند. برای مثال باید به نکات زیر توجه کنیم.
- تعریف محتوا باید از منطق ارزیابی جدا باشد.
- تغییر وضعیتها باید شفاف و مشخص باقی بمانند.
- همچنین بهتر است طراحان به سطحی محدود و کنترل شده دسترسی داشته باشند، نه اینکه به همه اشیای داخلی سیستم متصل شوند.
همین اصول طراحی در توسعه ابزارهایی مانند موارد زیر نیز استفاده میشود.
- «سیستمهای تجاری قابل تنظیم» (Configurable Business Systems)
- «موتورهای سیاستگذاری» (Policy Engines)
- و پلتفرمهای مبتنی بر پلاگین
Frets on Fire

بازی «Frets on Fire» نمونهای کلاسیک از بازی های اوپن سورس و سبک مبتنی بر پایتون است که کدهای قابل فهمی دارد. کدهای این بازی را میتوان به سادگی اصلاح کرد و تغییر داد.
ویژگی مهم بازی Frets on Fire در آنجاست که بهترین روش استفاده از پایتون را در بازی ها نشان میدهد. نکات مهم این بازی از نظر توسعه را در فهرست زیر نوشتهایم.
- زمان اجرا کوچک نگه داشته شده است.
- حلقه اصلی گیمپلی ساختاری خوانا دارد.
- سادگی و دسترسپذیری از اجرای پردازشهای سنگین توسط موتور بازی مهمتر در نظر گرفته شدهاند.
این تفاوت از نظر معماری، اهمیت زیادی دارد. در بعضی پروژهها، پایتون روی موتورهایی از جنس زبان «C» یا «++C» قرار میگیرد. بنابراین از پایتون فقط به عنوان لایهای برای اسکریپتنویسی ماموریتها، هوش مصنوعی یا مادسازی استفاده میشود. اما توسعهدهندگان Frets on Fire استراتژی دیگری را در پیش گرفتهاند. در اینجا پایتون فقط ابزاری برای کدنویسی بخشهای اطراف موتور بازی نیست. بلکه بخش بزرگی از خود بازی را اجرا میکند. برای بازی های ریتمیک با مکانیک محدود و قوانین قابل پیشبینی، چنین تصمیمی منطقی به نظر میرسد.
مزیت عملی این معماری، سرعت بالای تغییر و توسعه در آن است. مواردی مانند «زمانبندی ورودیها» (Input Timing)، «پردازش نتها» (Note Parsing)، «جریان رابط کاربری» (UI Flow) و «مدیریت محتوا» (Content Handling) زمانی راحتتر بررسی میشوند که کدهای پروژه کوچک باشند. آنقدر کوچک که توسعهدهندگان به راحتی بتوانند ساختار کلی آن را در ذهن خود نگه دارند.
در اینجا زبان پایتون بخشی از «قابلیت نگهداری» (Maintainability) محصول است و نمیتوان به آن فقط به عنوان لایه کمکی برای اجرای منطق محتوای داستان بازی توجه کرد. کتابخانههای بازیسازی پایتون به خوبی از این سبک توسعه پشتیبانی میکنند. بهکارگیری ابزارهایی مانند «Pygame» و «Panda3D» مقدار کد مورد نیاز برای آزمایش حس بازی، زمانبندی و فرمتهای محتوا را کاهش میدهند.
نقش پایتون در معماری بازی Frets on Fire
بازی Frets on Fire شامل سه الگوی مهم است که توسعهدهندگان ارشد باید به آنها توجه کنند.
- هسته کوچک و رفتار قابل مشاهده: توسعهدهندگان بدون جستجو در لایههای عمیق موتور بازی میتوانند منطق گیمپلی را دنبال کنند.
- توسعهپذیری از طریق داده و محتوا: زمانی که فرمت فایلها و قوانین گیمپلی خوانا باشند، پشتیبانی از آهنگها و سایر تغییرات ساخته شده توسط جامعه کاربران سادهتر میشود.
- API-های ساده و کمپیچیدگی: چنین پروژهای بیشتر از لایههای انتزاعی پیچیده، به مرزبندی ساده و واضح میان رندر، ورودیها و منطق آهنگهای بازی نیاز دارد.
البته این رویکرد محدودیتهایی هم دارد. برای مثال، ممکن اشت پروژه به موارد زیر نیاز داشته باشد. شاید برطرف کردن این مشکلات با کمک پایتون چندان ساده نباشد.
- ابزارهای بسیار تخصصی
- سرعت پردازش بسیار بالا
- یا سیستم پیشرفته مدیریت فایلها و داراییها
در چنین شرایطی، ممکن است عملکرد برنامه ضعیفتر شود یا بعضی بخشها به سختی توسعه پیدا کنند. مشکل مهمتر این است که اگر این محدودیتها در آینده بهوجود بیایند، برطرف کردن آنها زمان، هزینه و تغییرات زیادی نیاز خواهد داشت.
در چنین شرایطی، تیم توسعه باید تصمیم بگیرد که آیا همچنان باید از پایتون در هسته اصلی پروژه استفاده کند یا نه؟ یا بهتر است که پایتون را فقط به لایهای برای اسکریپتنویسی در کنار سیستمهای سریعتر تبدیل کند؟این مهمترین درسی است که Frets on Fire ارائه میدهد. قدرت اصلی پایتون زمانی مشخص میشود که معماری سیستم با نوع محصول هماهنگ باشد.
اگر چالش اصلی پروژه، سرعت توسعه، قابلیت تغییر و ساده نگه داشتن ساختار بازی باشد، پایتون میتواند بخش بزرگی از پروژه را مدیریت کند. حتی بیشتر از چیزی که بسیاری از تیمها انتظار دارند. اما اگر چالش اصلی به مقیاس موتور بازی مربوط شود، بهتر است پایتون در لایههای کناری سیستم قرار بگیرد. در این حالت، API-های دقیق و مشخصی بین لایه اسکریپتنویسی و بخشهای حساس به عملکرد طراحی میشوند.
The Temple of Elemental Evil

بازی «معبد شیطان بنیادین» یا «The Temple of Elemental Evil» نشان میدهد که چگونه میتوان از طریق نگهداری لایه اسکریپتی مبتنی بر پایتون و بازسازی آن توسط جامعه کاربری، عمر بازی را افزایش داد.
بازی The Temple of Elemental Evil در استیم یکی از بهترین نمونههای استفاده از پایتون برای افزایش عمر بازی فراتر از دوره تجاری اولیه آن محسوب میشود. موارد زیر، شرایطی ایجاد کردند که جامعه کاربران بتوانند سالها به نگهداری و توسعه بازی ادامه دهند.
- اسکریپتنویسی مبتنی بر پایتون
- قابلیت توسعه از طریق کنسول
این همان ارزش استراتژیکی است که بسیاری از تیمها آن را دست کم میگیرند.
وجود لایه اسکریپتنویسی نه تنها باعث سریعتر شدن فرایند توسعه داخلی میشود، بلکه چنین ساختاری حتی بعد از کنار رفتن تیم اصلی توسعه نیز میتواند محصول را زنده نگه دارد. به خصوص زمانی که اعضای جامعه کاربری بتوانند رفتار سیستم را درک کنند، آن را توسعه دهد و بدون بازسازی کامل موتور بازی، تغییرات مورد نیاز خود را اعمال کنند.
عمر طولانیتر از طریق سیستمهای قابل بررسی
زمانی که بازی موارد زیر را (از طریق پایتون) در اختیار کاربران قرار میدهد، فضای بیشتری برای توسعه و تغییر ایجاد میشود.
- رفتارهای هوش مصنوعی
- رویدادها
- منطق گیمپلی
در نرمافزارهای قدیمی، این موضوع به دست یافتن به نکات مثبتی مانند گزینههای زیر کمک میکرد.
- رفع خطاها
- بازگرداندن قابلیتهای حذف شده
- ساخت لایههای سازگاری
- یا حتی تولید محتوای کاملا جدید
در بخش فنی این موضوع هم درس مهمی وجود دارد. در توسعه بازی با پایتون، رویداد «مدیریت برخورد» (Collision Handling) فقط به بررسی ساده همپوشانی مستطیلها محدود نمیشود.
یکی از روشهای رایج این است که ابتدا شیء با کمک بردار جابهجایی حرکت داده شود. سپس مستطیل یا Mask آن بهروزرسانی شود. بعد از آن نیز برخوردها با تابع «pygame.sprite.collide_mask» بررسی شوند.
این روش در زمان مدیریت شکلهای نامنظم و «حرکتهای سبک پلتفرمر» (Platforming Movement) دقت بیشتری دارد. این مثال کوچک نکته مهمی را نشان میدهد. پایتون میتواند از منطقهایی با قوانین پیشرفته در گیمپلی پشتیبانی کند. البته به شرطی که توسعهدهندگان فقط به سادهترین الگوهای آموزشی متکی نباشند و از ساختارها و انتزاعهای مناسب استفاده کنند.
| مفهوم | مزیت | خطر یا شرط مهم |
|---|---|---|
| استفاده از پایتون در منطق بازی و AI | توسعه و تغییر آسانتر | نیاز به طراحی درست |
| سیستمهای قابل بررسی | رفع خطا و تولید محتوای جدید | وابستگی به ساختار مناسب |
| Collision Handling پیشرفته | دقت بالاتر در گیمپلی | ناکارآمدی روشهای ساده آموزشی |
| استفاده از انتزاع و معماری مناسب | پشتیبانی از منطق پیچیده | محدود نشدن به الگوهای ابتدایی |
یادگیری درست پایتون مقدمهای برای یادگیری بازی سازی
قبل از یادگرفتن مهارتهای مربوط به بازیسازی با پایتون لازم است که توانایی لازم برای کار با این زبان برنامه نویسی را بدست بیاوریم. وبسایت فرادرس حوزههای بسیار متنوعی را پوشش میدهد. پایتون یکی از تکنولوژیهایی هست که فرادرس به آن توجه زیادی کرده و دانشجویان و افراد علاقهمند به آن هم زیاد هستند. آموزشگاه آنلاین فرادرس به عنوان یکی از بهترین تولیدکنندگان محتوای آموزشی به زبان فارسی در دنیا شناخته میشود. برای کسب مهارتهای پایتون میتوانید از فیلمهای فرادرس کمک بگیرید.
وبسایت آموزشی فرادرس، فیلمهای بسیار خوب و با کیفیتی را برای آموزش مفاهیم این زبان برنامه نویسی تهیه کرده است. چند مورد از این فیلمها را در ادامه معرفی کردهایم.
- فیلم آموزش پروژه محور پایتون درباره حل ۲۰ مسئله کاربردی در برنامه نویسی + گواهینامه
- فیلم آموزش یادگیری تقویتی در «پایتون» (Python) + گواهینامه
- فیلم آموزش «کتابخانه گرافیکی لاک پشت» (Turtle Module) در پایتون
- فیلم آموزش طراحی «رابط کاربری گرافیکی» (GUI) با کتابخانه Tkinter در پایتون + گواهینامه
- فیلم آموزش بازی سازی در پایتون با کتابخانه Pygame + گواهینامه
برای مشاهده گزینههای بیشتر میتوانید به وبسایت فرادرس مراجعه کرده یا با کلیک بر روی تصویر زیر، فیلمهای مورد نیاز خود را مشاهده کنید.

از منطق بازی تا مستندسازی
درس مشترک این بازی ها ساده است. در حوزه بازیسازی، پایتون زمانی بهترین عملکرد را دارد که تیمها از آن به عنوان لایه کمکی استفاده کنند.
- گاهی از آن برای منطق بکاند استفاده میشود، مانند بازی EVE Online.
- گاهی به عنوان API اسکریپتنویسی به کار میرود، مانند Civilization IV.
- گاهی نیز پایه موتور محتوامحوری مانند Ren’Py است.
از دید مهندسان ارشد بازیسازی، هدف اصلی این نیست که «موتور بازی را با پایتون بسازیم». موضوع مهمتر چیز دیگری است. باید بخشهایی را پیدا کنیم که پایتون در آنها باعث توسعه سریعتر، تغییر آسانتر و دسترسی بهتر سایر توسعهدهندگان میشود. این دیدگاه کاربردیتر است. زیرا فقط به بازیسازی محدود نیست. همین الگو را میتوان در مواردی مانند گزینههای زیر هم دید.
- پلاگینها
- «موتورهای گردش کار» (Workflow Engines)
- «سیستمهای سیاستگذاری» (Policy Systems)
- و ابزارهای اتوماسیون
نکته مهم دیگری هم وجود دارد. زمانی که پایتون را در اختیار کاربران یا توسعهدهندگان قرار میدهید، در واقع سیستمی میسازید که افراد مختلف به آن وابسته میشوند. مهندسان گیمپلی، «سازندگان ماد» (Modders)، طراحان فنی و حتی تیمهای پشتیبانی، همگی باید بر اساس رفتار این سیستم و مستندات آن کار کنند.
در صورت رویدادن هر کدام از اتفاقات زیر، وجود لایه اسکریپتی بهجای مزیت به مشکل تبدیل میشود.
- «Event Hook»-ها تغییر کنند.
- پارامترها جابهجا شوند.
- یا چرخه عمر اشیا بدون بهروزرسانی مستندات تغییر کند.
API-های اسکریپتی فقط زمانی مفید باقی هستند که مستندات آنها همزمان با کد تغییر کند. معماری بازی و نظم در مستندسازی به هم وابسته هستند. تیمهایی که برای «Build» و «Release» به «CI/CD» اهمیت میدهند، به مستندسازی مداوم رابطهای توسعهدهندگان هم باید توجه کنند.

اگر برنامه نویسان بتوانند همزمان با تغییرات کد در همان فرایند، مستندات صحیح و بهروز تولید کنند، قبل از تبدیل شدن ناهماهنگی در مستندات به مشکل در پشتیبانی، میتوان آن را متوقف کرد.
بازی های ساخته شده با پایتون الگوی مهندسی مهمی را نشان میدهند. پایتون زمانی موفق میشود که تیمها از آن برای سرعت دادن به لایه مناسب استفاده کنند. البته باید به مرزبندی، کیفیت کد و مستندسازی هم به صورت جدی توجه کرد.
در جدول پایین به شکل خلاصه تمام بازی های معرفی شده را با همدیگر مقایسه کردهایم.
| عنوان | پیچیدگی پیادهسازی | نتیجه نهایی | مزیت اصلی |
|---|---|---|---|
| Sims 4 | متوسط | شبیهسازی عمیق زندگی | پشتیبانی قوی از مادها |
| EVE Online | بسیار بالا | دنیای آنلاین عظیم | مقیاس و API قدرتمند |
| World of Tanks | متوسط | نبردهای تیمی سریع | جامعه کاربری بزرگ |
| Sid Meier’s Civilization IV | کم تا متوسط | سناریوها و مادهای گسترده | مادسازی قوی |
| !Doki Doki Literature Club | کم | داستان تعاملی تاثیرگذار | جامعه فعال مادسازی |
| Long Live the Queen | کم تا متوسط | پایانهای متنوع | سیستم تصمیمگیری عمیق |
| Frets on Fire | کم | بازی ریتمیک مادپذیر | متنباز و قابل تغییر |
| The Temple of Elemental Evil | متوسط | نقشآفرینی تاکتیکی | وفاداری به قوانین D&D |
جمعبندی
در این مطلب از مجله فرادرس چند مورد از بازی های ساخته شده با پایتون را بررسی کردهایم. پایتون در بازیسازی حرفهای بیشتر به عنوان لایهای کمکی و توسعهپذیر استفاده میشود، نه موتور اصلی بازی. بازی هایی مانند EVE Online و تمدن چهار، دنیای تانکها و !Doki Doki Literature Club نشان میدهند که پایتون در بخشهایی مانند اسکریپتنویسی، مادسازی، ابزارهای توسعه، منطق گیمپلی و سیستمهای محتوایی عملکرد بسیار خوبی دارد.
دلیل اصلی این موضوع، انعطافپذیری بالا و سرعت بیشتر در توسعه و تغییر قابلیتها است. در مقابل، بخشهای حساس به عملکرد مانند رندر، فیزیک و شبکه با زبانهای سطح پایینتر توسعه داده میشوند. البته باید توجه کنیم که موفقیت این معماری به مرزبندی دقیق میان موتور بازی و لایه اسکریپتنویسی وابسته است. طراحی API-های پایدار، مستندسازی مداوم و کنترل سطح دسترسیها نقش مهمی در نگهداری این سیستمها دارند. در نهایت، این بازی ها نشان میدهند که پایتون زمانی بهترین نتیجه را میدهد که در لایه مناسب و با معماری مهندسی شده استفاده شود.












