ساخت بازی با پایتون برای اندروید – به زبان ساده + خروجی APK
فریمورک «کیوی» (kivy) یکی از بهترین ابزارها برای ساخت بازی با پایتون برای اندروید است. فرض کنید که تصمیم گرفتهایم بازی برای اجرا شدن بر روی صفحات لمسی موبایل با سیستم عامل اندروید بنویسیم. مراحل کار به این صورت هستند که ابتدا باید سناریویی برای بازی بنویسیم. سپس بازی خود را طراحی میکنیم. بعد از ساخت بازی در مراحل آخر باید فایلی با پسوند APK یا AAB برای نصب این بازی بر روی سیستم عامل اندروید بسازیم. در پایان هم لازم است بتوانیم بازی ساخته شده را بر روی گوگل پلی یا نرمافزارهای مشابه بارگذاری کرده و برای دانلود در اختیار عموم مردم قرار دهیم. بازیسازی با پایتون یکی از پرطرفدارترین کاربردهای این زبان برنامه نویسی است.
- با مراحل ساخت بازی اندرویدی با پایتون آشنا میشوید.
- نحوه توسعه بازی با فریمورک Kivy را یاد میگیرید.
- روش ساخت فایلهای APK و AAB را بررسی میکنید.
- استفاده از Buildozer و Python-for-Android را میآموزید.
- نحوه اجرای بازی روی دستگاه اندرویدی را یاد میگیرید.
- روش انتشار بازی در گوگل پلی استور را بررسی میکنید.


در این مطلب از مجله فرادرس میآموزیم که چگونه با استفاده از کتابخانه «کیوی» (Kivy)، بازی «پینگ پونگ» (Pong) را بنویسیم. ابتدا کار خود را با نوشتن برنامه پایه شروع میکنیم و قدمبهقدم آن را به یک بازی پونگ قابل اجرا تبدیل خواهیم کرد. در این مسیر تمامی مراحل را به طور کامل شرح میدهیم. در پایان هم بعد از توضیح دادن درباره روش ساخت فایل APK و AAB مراحل مربوط به انتشار این بازی بر روی گوگل پلی را بیان میکنیم.
پیشنیازهای ساخت بازی با پایتون برای اندروید
پیش از شروع به کار باید ابزارهای مورد نیاز خود را تهیه کرده و بر روی سیستم نصب کنیم. در فهرست پایین به شکل خلاصه مهمترین ابزارهای مورد نیاز برای ساخت بازی با پایتون برای اندروید را نوشتهایم.
- پایتون
- فریمورک کیوی
- KivyMD
- Buildozer

در ادامه، تمام موارد بالا را یک به یک معرفی میکنیم و روش نصب آنها را توضیح میدهیم.
| مرحله | فعالیت | ابزار اصلی |
|---|---|---|
| توسعه بازی | پیادهسازی منطق بازی با پایتون | Python |
| طراحی رابط کاربری | ساخت رابط و کنترلهای بازی | Kivy و KivyMD |
| ساخت خروجی اندروید | تولید فایل APK یا AAB | Buildozer |
پایتون
«پایتون» (Python) زبان برنامهنویسی مفسری، سطح بالا و چندمنظوره است. بخش اصلی این بازی به زبان پایتون نوشته خواهد شد. زیرا این زبان برای افراد تازهکار بسیار مناسب است، ساختاری خلاصه دارد و یادگیری آن آسان است.
برای نصب این زبان برنامه نویسی کافیست که به وبسایت رسمی آن مراجعه کرده و جدیدترین نسخه همساز با سیستم عامل خود را انتخاب کرده و دانلود کنید.
لینک دسترسی به وبسایت رسمی پایتون (+)
فریمورک کیوی
«کیوی» (Kivy) کتابخانهای رایگان و اوپن سورس در پایتون است که برای توسعه اپلیکیشنهای موبایل و سایر نرمافزارهای «چندلمسی» (Multi-touch) با رابط کاربری طبیعی استفاده میشود. به زبان سادهتر، کیوی فریمورکی است که به پایتون کمک میکند تا از دستگاههای چندلمسی مانند گوشیهای هوشمند و تبلتها پشتیبانی کند.
برای نصب کیوی دستور زیر را در خط فرمان نوشته و اجرا کنید.
pip install kivyKivyMD
«KivyMD» این ابزار، مجموعهای از ویجتهای سازگار با «متریال دیزاین» (Material Design) است که برای استفاده در کنار کتابخانه کیوی طراحی شدهاند.
برای نصب KivyMD باید دستور زیر را در خط فرمان نوشته و این کتابخانه را نصب کنیم.
py -m pip install kivymdBuildozer
«بیلدوزر» (Buildozer) ابزاری است که با هدف بستهبندی و گرفتن آسان خروجی برای اپلیکیشنهای موبایل مورد استفاده قرار میگیرد.
Buildozer به صورت مستقیم روی ویندوز اجرا نمیشود، اما کاربران ویندوز ۱۰ و ۱۱ میتوانند با استفاده از «Windows Subsystem for Linux | WSL» محیط لینوکس را داخل ویندوز اجرا کرده و فایل APK اندروید بسازند.
در این مطلب، پروژه خود را بر روی ویندوز توسعه میدهیم. اما در بخش آخر و برای ساخت فایل APK از ترفندی ساده و بدون نیاز به نصب لینوکس بهره خواهیم برد. یعنی از کد ادیتور «GitHub Codespaces» کمک میگیریم.
تا به اینجای مطلب با مفاهیم و نیازمندیهای اصلی در زمان ساخت بازی با پایتون برای اندروید آشنا شدهاید. در ادامه اول بازی سادهای به کمک فریمورک کیوی برای اندروید میسازیم. سپس روش ساخت فایل APK و AAB و همینطور انتشار اپلیکیشنهای اندرویدی در گوگل پلی را هم بررسی کردهایم. در صورت تمایل به مطالعه مطالبی مانند این مورد، پیشنهاد میکنیم که اپلیکیشن مجله فرادرس را بر روی دستگاههای همراه خود نصب بکنید.
برای نصب اپلیکیشن رایگان مجله فرادرس، کلیک کنید.
شروع کار ساخت بازی با پایتون برای اندروید
بعد از نصب پیشنیازهای اجرای پروژه همه چیز برای ساخت بازی با پایتون برای اندروید، آماده شده است. در ابتدا اپلیکیشن سادهای میسازیم تا با مفاهیم و اصول اولیه آشنا شویم.
در تصویر پایین ابزارهای مورد استفاده برای ساخت این پروژه را معرفی کردهایم.

کار را با راهاندازی و اجرای برنامهای بسیار ساده در کیوی آغاز میکنیم. ابتدا دایرکتوری برای بازی خود میسازیم و درون آن فایلی به نام «main.py» ایجاد میکنیم. کدهای زیر را در داخل این فایل مینویسیم.
برنامه را اجرا میکنیم. در این مرحله، بازی فقط پنجرهای سیاه نمایش میدهد. کاری که تا اینجا انجام دادهایم، ساخت برنامهای بسیار ساده با کمک فریمورک کیوی است. این برنامه «نمونهای» (Instance) از كلاس ویجت PongGame میسازد. سپس آن را به عنوان «عنصر اصلی» (Root Element) رابط کاربری اپلیکیشن بازمیگرداند.

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

مطالعه و تماشای محتوای آموزشی فرادرس، به طور خاص فیلمهای پروژه محور تاثیر بسیار زیادی در ارتقای مهارتهای کاربران دارد. مجموعه آموزشی معرفی شده در بالا از فیلمهایی تشکیل شده است که با هدف کمک به یادگیری تکنولوژیهای مختلف در حوزه بازیسازی با پایتون طراحی شدهاند. در فهرست پایین، چند مورد از فیلمهای این مجموعه آموزشی را معرفی کردهایم. برای تماشای فیلمهای بیشتر میتوانید بر روی عکس بالا کلیک کنید.
- فیلم آموزش ساخت بازی در پایتون و PyGame درباره بازی شوتر فضایی در پای گیم + گواهینامه
- فیلم آموزش ساخت اسکریپت مانیتورینگ وب سایت با پایتون همراه با مدیریت خطا و هشداردهی هوشمند + گواهینامه
- فیلم آموزش پایتون با طراحی بازی سنگ کاغذ قیچی + گواهینامه
- فیلم آموزش پروژه محور پایتون درباره ساخت بازی با کتابخانه Turtle + گواهینامه
- فیلم آموزش پیاده سازی بازی مار در پایتون با یادگیری تقویتی عمیق
در بخش بعد، روش اضافه کردن تصاویر گرافیکی به بازی اندرویدی را بررسی کردهایم.
افزودن گرافیکهای ساده
در این بخش از مطلب میخواهیم چند مورد از اشکال گرافیکی ساده را طراحی کنیم. برای این کار باید فایلی با پسوند «kv.» بسازیم.
ساخت فایل pong.kv
در این مطلب از فایلی با پسوند «kv.» برای تعریف ظاهر و محیط کلاس PongGame استفاده میکنیم. از آنجا که نام کلاس اصلی برنامه PongApp است، به سادگی میتوانیم فایلی به نام «pong.kv» در همان دایرکتوری بسازیم. این فایل در زمان اجرای برنامه، به صورت خودکار توسط کیوی بارگذاری میشود. بنابراین فایل جدیدی به نام pong.kv ایجاد کرده و محتوای کادر زیر را به آن اضافه کنید.
نکته (خطای رایج): نام فایل Kv (در اینجا pong.kv است) باید دقیقا با نام کلاس اپلیکیشن (که در اینجا PongApp است) همخوانی داشته باشد. یعنی باید به طور دقیق از همان عبارتی استفاده کنیم که قبل از کلمه App در نام کلاس آمده است. بهتر است از حروف کوچک استفاده کنیم.
اگر اکنون برنامه را اجرا کنیم، باید یک خط عمودی در وسط صفحه و دو عدد صفر در محل نمایش امتیاز بازیکنان مشاهده کنیم.

توضیح سینتکس و ساختار فایل Kv
پیش از رفتن به مرحله بعد، بهتر است نگاهی دقیقتر به محتوای فایل Kv کنیم و ببینیم در آن چه میگذرد. شاید با این ساختار آشنایی کامل داشته باشید. در این صورت، میتوانید از این بخش عبور کرده و به مرحله بعدی بروید.
در اولین خط فایل، عبارت زیر نوشته شده است.
وجود این خط در ابتدای تمامی فایلهای Kv الزامی است. این عبارت باید با #:kivy شروع شده و پس از یک فاصله، نسخه کیوی مورد استفاده در جلوی آن نوشته شود. این کار به کیوی کمک میکند تا مطمئن شود سیستم حداقل نسخه مورد نیاز را دارد و در آینده بتواند با نسخههای قدیمیتر به راحتی سازگار شود.
پس از آن، قوانینی را تعریف کردهایم که روی تمام نمونههای کلاس PongGame اعمال میشوند.
فایلهای Kv نیز مانند زبان پایتون، از دندانهگذاری (Indentation) برای تعریف بلوکهای تو در تو استفاده میکنند. بلوکی که در آن نام هر کلاس درون علامتهای < و > قرار میگیرد، «قانون ویجت» (Widget Rule) نام دارد. این قانون روی تمام نمونههای ساخته شده از کلاس مورد نظر اعمال خواهد شد. در این مثال، اگر به جای <PongGame> عبارت <Widget> را قرار میدادید، این خط عمودی و دو ویجت متنی به عنوان «برچسب» (Label) روی تمام نمونههای ساختار ویجت اعمال میشدند. زیرا قانون را برای کلاس پایه ویجتها تعریف کردهایم.
در هر «قانون» (Rule) میتوانیم بخشهای مختلفی را برای تعیین ظاهر و محتوای ویجتها اضافه کنیم. برای مثال، میتوانیم کارهای زیر را انجام دهیم.
- مقدار «ویژگیها» (Properties) را تنظیم کنیم.
- «ویجتهای فرزند» (Child Widgets) جدیدی را اضافه کنیم.
- بخش «بوم» (canvas) را تعریف کنیم و «دستورات گرافیکی» (Graphics Instructions) مربوط به نحوه رندر شدن و نمایش ویجت را در آن بگذاریم.
اولین بلوکی که درون قانون <PongGame> داریم، بلوک canvas است.
این بلوک canvas مشخص میکند که ویجت PongGame باید یکسری اشکال گرافیکی اولیه را ترسیم کند.
- در اینجا، ابتدا «مستطیل» (Rectangle) را به بوم اضافه میکنیم.
- مختصات pos این مستطیل را برابر با 5 پیکسل از سمت چپ مرکز افقی ویجت قرار داده و مقدار y آن را برابر با 0 قرار میدهیم.
- «اندازه» (size) مستطیل نیز با عرض 10 پیکسل داشته و ارتفاع آن هم، هماندازه با ارتفاع خود ویجت تنظیم میشود.
مزیت فوقالعاده تعریف گرافیک به این شیوه آن است که با تغییر ویژگیهای هر کدام از ویجتهای به کار رفته در عبارتهای مقداری، مستطیل رندر شده نیز به صورت خودکار بروزرسانی میشود.

نکته: سعی کنید اندازه پنجره برنامه را تغییر دهید و ببینید چه اتفاقی میافتد. باید وقتی پنجره برنامه را تغییر میدهید تمام رابط کاربری به طور خودکار تغییر سایز بدهد. رفتار استاندارد پنجره در کیوی به این صورت است که اندازه هر عنصر را بر اساس ویژگی size_hint آن تغییر میدهد.
مقدار پیشفرض size_hint برای هر ویجت (1,1) است. به این معنی که ۱۰۰٪ در جهت محور x و محور y کشیده میشود و در نتیجه فضای موجود را پر میکند. از آنجا که موقعیت و اندازه مستطیل و همچنین center_x و «لبه بالایی» (top) برچسبهای امتیاز در چارچوب کلاس PongGame تعریف شدهاند، با تغییر ویژگیهای ویجت والد آنها، این مقادیر نیز به طور خودکار بروز خواهند شد. با استفاده از زبان اختصاصی فریمورک Kv ویژگی «اتصال خودکار ویژگیها» (Automatic Property Binding) به برنامه اضافه میشود.
دو بخش اضافه شده در آخر بسیار شبیه به هم هستند. هر کدام از آنها ویجت Label یا برچسب متنی را به عنوان ویجت فرزند به ویجت اصلی PongGame اضافه میکنند. در حال حاضر، متن هر دوی آنها روی "0" تنظیم شده است. پس از پیادهسازی منطق بازی، این متنها را به امتیاز واقعی متصل میکنیم. اما این برچسبها از همین حالا هم ظاهر خوبی دارند، چرا که «اندازه فونت» (font_size ) بزرگتری برایشان در نظر گرفتهایم و موقعیت آنها را به صورت وابسته به ویجت اصلی تنظیم کردهایم.
از کلمه کلیدی root میتوانیم درون بلوک فرزند برای ارجاع به ویجت «والد» یا «ریشه» یا همان ویجت اصلی استفاده کنیم. در نهایت، تمام قوانین بر روی همین ویجت اصلی اعمال میشوند. در اینجا PongGame ویجت اصلی یا والد است.
افزودن توپ به بازی
خیلی خوب، اکنون زمین بازی ساده برای پینگپونگ را ساختهایم. اما بازیکن و توپی برای ضربه زدن نداریم. در ادامه مطلب، میخواهیم دو بازیکن و یک توپ پیادهسازی کنیم. کار خود را با توپ شروع میکنیم. ابتدا کلاس جدیدی به نام PongBall ایجاد میکنیم تا ویجتی بسازیم که نقش توپ را ایفا کند و در صفحه به حرکت و جهش در بیاید.
کلاس PongBall
در ادامه، کدهای پایتون مربوط به کلاس PongBall آورده شده است:
در کادر پایین، روش مورد استفاده در کیوی برای رسم کردن توپ به شکل دایره سفید را پیادهسازی کردهایم.
برای کار کردن همه این کدها لازم است از بخش properties در کیوی ماژولهای مربوط به ویژگیهای مختلف مانند «NumericProperty» و «ReferenceListProperty» را نیز به محیط کدنویسی ایمپورت کنیم. در ضمن باید از بخش «vector » هم ماژول Vector را استفاده کنیم.

در کادر پایین، تمام بهروزرسانیهای مربوط به کدهای پایتون و فایل Kv مربوط به این مرحله را نوشتهایم. این کدها مربوط به فایل main.py هستند.
کدهای نوشته شده در پایین هم باید در فایل pong.kv نوشته شوند.
نکته: توجه داشته باشید که نه تنها قانونی برای ویجت <PongBall> اضافه شده، بلکه ویجت فرزندی به نام PongBall نیز درون قانون ویجت <PongGame> قرار گرفته است.
به حرکت درآوردن توپ
بسیار عالی، اکنون توپی داریم که حتی تابعی هم برای حرکت به نام تابع move برای آن تعریف شده است. اما توپ بازی، هنوز حرکت نمیکند. بیایید این مشکل را نیز برطرف کنیم.
زمانبندی توابع با استفاده از ساعت یا Clock
الان لازم است متد move مربوط به توپ، به صورت منظم و مداوم فراخوانی شود. خوشبختانه، کیوی این کار را بسیار آسان کرده است. به طوری که به برنامه نویس اجازه میدهد:
- هر تابعی را که میخواهد با استفاده از Clock زمانبندی کند.
- سپس برای این تابع، بازه زمانی تکراری مشخص بکند.
برای مثال، این خط کد باعث میشود که تابع update از شی game، یکبار در هر یکشصتم ثانیه، یعنی ۶۰ بار در ثانیه، فراخوانی شود.

ویژگیها و ارجاع به اشیاء
غیر از به حرکت درآوردن توپ با مشکل دیگری هم روبهرو هستیم. اکنون باید مطمئن شویم که تابع move از کلاس PongBall به صورت منظم فراخوانی میشود. اما در کدهای پایتون خود هیچ ارجاع یا دسترسی مستقیمی به شی توپ نداریم. چرا که آن را فقط از طریق فایل Kv و درون قانون مربوط به کلاس PongGame اضافه کردهایم. در حال حاضر، تنها ارجاعی که به بازی خود داریم، همان شیئی است که در متد build اپلیکیشن بازمیگردانیم.
توجه کنید که در آینده کارهای بیشتری به جز حرکت دادن ساده توپ داریم. برای مثال، موارد زیر، دو مورد از حرکات مهم این بازی هستند.
- جهش توپ در زمان برخورد به دیوارها
- و برخورد آن با راکت بازیکنان
در هر صورت به متد update برای کلاس PongGame نیاز خواهیم داشت. علاوه بر این، با توجه به اینکه از قبل به شی game دسترسی داریم، به راحتی میتوانیم متد update جدید آن را در زمان ساخته شدن برنامه یا همان اجرای متد build زمانبندی کنیم.
با این حال، موضوع هنوز این واقعیت وجود دارد که در برنامه هیچ ارجاعی به ویجت فرزند PongBall نداریم. برای حل این مشکل، ویژگی ObjectProperty را به کلاس PongGame اضافه کرده و آن را به ویجت ساخته شده در قانون Kv متصل میکنیم. به محض انجام شدن این کار، میتوانیم به راحتی به ویژگی ball در متد update ارجاع دهیم و حتی کاری کنیم که توپ پس از برخورد با لبههای صفحه، به عقب جهش کند.
فراموش نکنید که کدهای نوشته شده را باید به فایل Kv اضافه کنیم. با تخصیص شماره شناسایی یا همان id به ویجت فرزند میتوانیم صفت ObjectProperty در شی توپ یا همان ball را به شماره شناسایی مورد نظر متصل کنیم.
نکته: در این مرحله، همه چیز برای جهش و حرکت توپ به این سو و آن سو آماده شده است. اگر در حین مطالعه آموزش، خودتان هم قدمبهقدم کدها را مینویسید، شاید برایتان سوال شده باشد که چرا توپ هیچ حرکتی نمیکند. علت این است که سرعت (Velocity) توپ در هر دو جهت x و y روی 0 تنظیم شده است.
در قطعه کد زیر، متدی به نام serve_ball به کلاس PongGame اضافه شده و در متد build برنامه فراخوانی شده است. این متد، مقداری به عنوان سرعت تصادفی در جهت x و y به توپ اختصاص میدهد و همچنین موقعیت آن را ریست میکند. بنابراین میتوانیم بعدا و پس از کسب امتیاز توسط بازیکنان، از این متد برای شروع مجدد حرکت توپ استفاده کنیم.

در ادامه، کد کامل این مرحله آورده شده است. این کدها را باید در فایل main.py بنویسیم.
کدهای زیر هم مربوط به فایل pong.kv هستند.
متصل کردن رویدادهای ورودی
یکی دیگر از کارهای باقیمانده در این بازی، تعریف بازیکنان و مدیریت رویدادهای مربوط به ورودیهای لمسی است. اکنون توپ در صفحه حرکت میکند و میجهد. تنها چیزهایی که کم داریم، راکتهای متحرک بازیکنان و ثبت امتیازها است.
تمام این تکنیکها در این مطلب به شکل کامل آموزش داده میشوند. اما اگر به استفاده از فیلمهای آموزشی بیشتر علاقه دارید یا میخواهید مثالهای بیشتری ببینید، پیشنهاد میکنیم فیلم آموزش برنامه نویسی اندروید در پایتون با فریم ورک کیوی Kivy + گواهینامه را در فرادرس مشاهده کنید. به منظور کمک به مخاطبان مجله، لینک دسترسی به این فیلم را در پایین نیز قرار دادهایم.
در این بخش دیگر به جزئیات ساخت کلاس و قوانین فایل Kv نخواهیم پرداخت، چرا که این مفاهیم را در مراحل قبلی بررسی کردیم. در عوض، روی این موضوع تمرکز میکنیم که چگونه ویجتهای «بازیکن» (Player) را در پاسخ به ورودیهای کاربر حرکت دهیم. کد کامل پایتون و قوانین Kv مربوط به کلاس PongPaddle را در پایان این بخش، قرار دادهایم.
در کتابخانه کیوی، هر ویجت با پیادهسازی متدهای زیر میتواند به ورودیهای کاربر واکنش نشان دهد.
- on_touch_down: برای فشردن یا همان کلیک و لمس صفحه
- on_touch_move: برای حرکت دادن یا همان کلیک و کشیدن روی صفحه
- on_touch_up: برای رها کردن یا کلیک و لمس

کلاس پایه Widget به صورت پیشفرض این متدها را برای همه ویجتهای فرزند خود فراخوانی میکند. به این ترتیب، رویداد به همه آنها ارسال میشود. این فرایند تا زمانی ادامه پیدا میکند که یکی از ویجتهای فرزند مقدار True را برگرداند.
بازی پونگ منطق سادهای دارد. راکتها فقط باید به سمت بالا و پایین حرکت کنند. به همین دلیل، لازم نیست خود ویجتهای بازیکن این رویدادها را مدیریت کنند. کافی است متد on_touch_move را در کلاس PongGame پیادهسازی کنیم. سپس موقعیت راکت سمت چپ یا راست را بر اساس محل لمس صفحه تغییر دهیم. اگر کاربر سمت چپ صفحه را لمس کند، راکت سمت چپ حرکت میکند. اگر سمت راست صفحه را لمس کند، راکت سمت راست جابهجا میشود.
در کادر زیر، تابع مدیریتکننده on_touch_move را پیادهسازی کردهایم.
امتیاز هر بازیکن را در ویژگی NumericProperty مربوط به همان بازیکن ذخیره میکنیم. هر زمان مقدار این ویژگی تغییر کند، برچسب نمایش امتیاز در کلاس PongGame نیز به صورت خودکار بهروزرسانی میشود. دلیل این موضوع آن است که ویژگیهای کیوی به طور خودکار با ارجاعهای موجود در فایلهای Kv مرتبط میشوند.
- هر وقت توپ از یکی از طرفین صفحه خارج شود، متد update در کلاس PongGame امتیاز را بهروزرسانی میکند.
- سپس توپ دوباره به داخل بازی پرتاب میشود. این کار با کمک متد serve_ball انجام میشود.
علاوه بر این، کلاس PongPaddle متدی به نام bounce_ball دارد. این متد، مشخص میکند توپ پس از برخورد با راکت چگونه حرکت کند. زاویه و سرعت توپ نیز به محل برخورد آن با راکت بستگی دارد.
در ادامه، کدهای مربوط به کلاس PongPaddle آورده شده است.
نکته: الگوریتم نوشته شده برای جهش توپ، بسیار ساده است. اما اگر توپ از پهلو یا از سمت پایین به راکت برخورد کند، رفتار عجیبی از خود نشان خواهد داد. این مسئله را تست کنید و در صورت تمایل به عنوان یکی از چالشهای برنامه نویسی بازی، خودتان آن را مدیریت کنید.
در کادر پایین، این متد را در ساختار اصلی برنامه مشاهده میکنید. پروژه ساخت بازی با پایتون برای اندروید با پیادهسازی بازی پینگپونگ در فایل main.py تقریبا تمام شده است.
البته بخش مهم پروژه ساخت بازی با پایتون برای اندروید در فایل pong.kv نوشته شده است. در کادر پایین، نسخه کامل فایل pong.kv را نیز مشاهده میکنید.
ساخت فایل APK از بازی
بعد از ساخت بازی با پایتون برای اندروید باید نسخه APK پروژه خود را هم ایجاد کنیم. برای رسیدن به این هدف سه ابزار مختلف و پرکاربرد وجود دارد.
- Buildozer: از ابزار «بیلدوزر» (Buildozer) برای خودکارسازی فرآیند ساخت فایل APK استفاده میشود. این ابزار، سادهترین روش ساخت APK را فراهم کرده است.
- Python-For-Android: با استفاده از پروژه «Python-For-Android» نیز میتوانیم برای سیستمعامل اندروید پکیج بسازیم.
- Kivy Launcher: این ابزار هم برای اجرای برنامههای کیوی بدون نیاز به کامپایل کردن آنها به کار برده میشود.

به کاربران تازهکار توصیه میکنیم که از بیلدوزر استفاده کنند. چون که این ابزار راحتترین روش را برای ساخت فایل کامل APK یا AAB ارائه داده است. علاوه بر این، همانطور که در بالا اشاره کردیم، با اپلیکیشن Kivy Launcher نیز میتوانید برنامه کیوی خود را بدون نیاز به طی کردن مرحله کامپایل، مستقیما روی گوشی اجرا کنید.
اپلیکیشنهای ساخته شده با کیوی را میتوان در مارکتهای اندرویدی مانند گوگل «پلی استور» (Play Store) نیز منتشر کرد. البته این کار نیازمند طی کردن چند مرحله اضافه برای ساخت فایل «AAB» یا (Android App Bundle) است. که در بخشهای بعد توضیح خواهیم داد.
Buildozer
«بیلدوزر» (Buildozer) ابزاری است که اجرای کل فرآیند بیلد و خروجی گرفتن را به صورت خودکار انجام میدهد. این ابزار تمام پیشنیازهای مربوط به پروژه Python-For-Android از جمله Android SDK و NDK را دانلود و تنظیم میکند. سپس فایل APK میسازد که میتوان آن را به صورت خودکار به دستگاه اندرویدی منتقل کرد.
در حال حاضر، بیلدوزر تنها روی سیستمعاملهای لینوکس و macOS کار میکند. البته همچنان میتوانید در ویندوز از طریق WSL از آن استفاده کنید. استفاده از این ابزار فرآیند ساخت فایل APK را به شدت سادهتر میکند.
| روش | سیستمعامل | توضیح |
|---|---|---|
| اجرای مستقیم | Linux و macOS | اجرای Buildozer به صورت بومی |
| استفاده از WSL | Windows | اجرای Buildozer در محیط لینوکس WSL |
| GitHub Codespaces | Windows | اجرای Buildozer در محیط ابری و بدون نصب لینوکس |
راحتترین روش برای استفاده از Buildozer، برای کاربران ویندوز کمک گرفتن از گیتهاب است. به این منظور باید مراحل زیر را طی کنید.
- مرحله اول - ایجاد مخزن Github و بارگذاری پروژه: ابتدا پروژه Kivy خود را در یک مخزن گیت هاب قرار دهید. فایلهای پروژه مانند main.py، فایلهای KV، تصاویر و سایر منابع باید داخل این مخزن باشند.
- مرحله دوم - استفاده از فضای Codespaces: وارد صفحه مخزن شوید و از منوی Code > Codespaces گزینه «Create codespace on main» را انتخاب کنید تا محیط توسعه لینوکسی آماده شود. این فضا چیزی شبیه به VSCode است که بر روی لینوکس راهاندازی شده. بنابراین در ترمینال آن به لینوکس دسترسی دارید.

- مرحله سوم - نصب پیشنیازهای Buildozer: پس از باز شدن ترمینال، ابتدا فهرست بستههای سیستم را با دستور sudo apt update بهروزرسانی کنید. باید اول ببنید این فضا از چه سیستم عاملی استفاده میکند. زیرا دستورهای مربوط به نصب وابستگیهای موردنیاز Buildozer بر روی اوبونتو ۲۲ و ۲۴ و ۲۶ با هم تفاوت دارند. برای استفاده از این دستورها میتوانید به لینک (+) مراجعه کنید.
- مرحله چهارم - ساخت Buildozer: بعد از نصب وابستگیها میتوانید با کمک دستور pip3 install --user --upgrade buildozer خود Buildozer را نصب بکنید.
- مرحله پنجم - افزودن مسیر نصب به PATH: با کمک دستور export PATH=$PATH:~/.local/bin میتوانیم مسیر نصب را به PATH سیستم عامل فضای Codespaces در گیتهاب اضافه کنیم.
- مرحله ششم - راهاندازی Buildozer: پس از نصب، به دایرکتوری پروژه خود رفته و دستور buildozer init را اجرا کنید. این دستور فایلی به نام «buildozer.spec» ایجاد میکند. این فایل مسئول کنترل تنظیمات بیلد است. برنامه نویس باید این فایل را ویرایش کرده و نام اپلیکیشن خود و سایر مشخصات را به درستی در آن وارد کند. در این فایل میتوان متغیرهای مختلفی را برای کنترل بیشتر یا تمامی پارامترهای ارسالی به Python-For-Android تنظیم کرد.
- مرحله هفتم - ساخت فایل APK: اکنون کافی است دستور buildozer -v android debug را اجرا کنید. در اولین اجرا، Buildozer ابزارهایی مانند «Android SDK» و «Android NDK» و «Python for Android» را دانلود و پیکربندی میکند. به همین دلیل ممکن است این مرحله بسته به سرعت اینترنت، چندین دقیقه یا حتی بیشتر زمان ببرد. الان فایل ساخته شده در داخل دایرکتوری «bin» قرار دارد.
بیلدوزر گزینهها و ابزارهای متنوع زیادی را برای کمک به برنامه نویسان در نظر گرفته است. مراحلی نوشته شده در بالا فقط سادهترین راه برای ساخت و اجرای فایل APK بودند.
بستهبندی برنامه با Python-For-Android
برنامه نویسان میتوانند کار بستهبندی برنامه را به شکل مستقیم با خود پروژه Python-For-Android هم انجام بدهند. در واقع Buildozer خود از Python-for-Android برای کامپایل برنامههای اندرویدی استفاده میکند. با این تفاوت که Buildozer بسیاری از مراحل را به صورت خودکار انجام میدهد. اما در این روش کنترل و مدیریت بیشتری روی فرآیند کار به برنامه نویس داده میشود. برنامه نویس برای استفاده از این روش باید بخشهایی از «ابزارهای اندروید» (Android Toolchain) را به صورت دستی دانلود و تنظیم کند.
در فهرست زیر مراحل انجام این کار در Codespace گیتهاب به صورت خلاصه بیان شدهاند.
- ساخت مخزن گیتهاب و ایجاد Codespace بر روی آن
- ورود به Codespace و نصب پیشنیازها
- نصب Python-for-Android
- دانلود وابستگیهای اندروید
- ساخت فایل APK
- دریافت فایل APK
اگر هدف فقط ساخت فایل APK برای پروژه بازی پونگ باشد، استفاده از Buildozer انتخاب سادهتر و مناسبتری است. زیرا این ابزار، بسیاری از مراحل نصب و پیکربندی را به صورت خودکار انجام میدهد. اما اگر به تنظیمات پیشرفتهتر یا کنترل بیشتر روی فرایند ساخت نیاز دارید، استفاده مستقیم از Python-for-Android گزینه انعطافپذیرتری است.
بستهبندی برنامه برای Kivy Launcher
برنامه Kivy Launcher اپلیکیشن اندرویدی است که میتواند هر نوع نمونه کد یا برنامه کیوی ذخیره شده روی کارت حافظه را به راحتی اجرا کند. یعنی سیستمهای اندرویدی بدون نیاز به تبدیل فایلها به APK میتوانند آنها را اجرا کنند.

برای نصب Kivy Launcher باید مراحل زیر را انجام دهید.
- فایل APK آن را به صورت دستی از آدرس (+) دانلود و نصب کنید.
- به محض نصب شدن Kivy Launcher، میتوانید اپلیکیشنهای کیوی خود را در پوشهای به نام «kivy» در حافظه خارجی دستگاه قرار دهید (این مسیر در بیشتر دستگاهها، حتی آنهایی که حافظه داخلی دارند، به صورت /sdcard در دسترس است).
- در کادر زیر مسیر ذخیرهسازی اپلیکیشن <yourapplication> را در کارت حافظه نمایش دادهایم.
/sdcard/kivy/<yourapplication>در کادر بالا عبارت <yourapplication> دایرکتوری را نشان میدهد که شامل فایلهای main.py و «android.txt» است. فایل main.py به عنوان اپلیکیشن اصلی به کار برده میشود. فایل android.txt نیز شامل اطلاعاتی درباره نیازمندیهای کیوی برای اجرای اپلیکیشن بر روی اندروید است.
# Your main application file:
main.py
# Some info Kivy requires about your app on android:
android.txtمحتوای فایل android.txt باید به شکل زیر باشد:
title=<Application Title>
author=<Your Name>
orientation=<portrait|landscape>این گزینهها صرفا تنظیمات بسیار اولیه و پایه هستند. اگر تصمیم بگیرید با استفاده از ابزارهای بالا فایل APK اختصاصی خودتان را بسازید، به تنظیمات بسیار متنوع دیگری نیز دسترسی خواهید داشت.
نکته: نصب Kivy Launcher کمی فنی و تخصصی است و این اپلیکیشن کاربردی زمان زیادی است که بهروزرسانی نشده. بنابراین بهتر است از دو روش بالا به طور خاص Buildozer استفاده کنید.
چطور برنامه نویسی اندروید را در فرادرس یاد بگیریم؟
فرادرس به منظور کمک به تمام افراد علاقهمند به برنامه نویسی اندروید، مجموعهای از فیلمهای آموزشی را تولید و منتشر کرده است. با مشاهده این فیلمها روش ساخت انواع اپلیکیشن برای دستگاههای اندرویدی را یاد میگیرید. مهمترین ویژگی دستگاههای اندرویدی وجود صفحه لمسی در آنها است. برای همین باید از ابزارهای خاصی هم برای برنامه نویسی کمک بگیریم. «سیستمعامل» (Operating System | OS) اندروید توسط گوگل برای گوشیهای موبایل و سایر دستگاهها توسعه یافته است. با یاد گرفتن برنامه نویسی اندروید میتوانیم موقعیتهای شغلی جذابی بدست بیاوریم.
در پایین چند مورد از فیلمهای آموزشی فرادرس درباره آموزش برنامه نویسی اندروید را معرفی کردهایم.
- فیلم آموزش اتصال اندروید به دیتابیس بک اند با Clean Architecture و Jetpack Compose همراه با پروژه عملی + گواهینامه
- فیلم آموزش هوش مصنوعی GPT برای برنامه نویس اندروید همراه با بررسی پروژههای کاربردی + گواهینامه
- فیلم آموزش پروژه محور اندروید استودیو، پیاده سازی اپلیکیشن نمایش نرخ ارز دیجیتال با Android Studio
- فیلم آموزش ایجاد قفل نرم افزاری روی اپلیکیشن با برنامه نویسی PHP و اندروید + گواهینامه
- فیلم آموزش کاتلین درباره پیاده سازی معماری MVP برای توسعه اپلیکیشن های اندروید با Kotlin
برای مشاهده فیلمهای بیشتر بر روی تصویر زیر کلیک کرده و به صفحه اصلی این مجموعه آموزشی هدایت شوید.

انتشار برنامه در Google Play
تا اینجا با استفاده از Buildozer یا Python-for-Android فایلهای APK و AAB برنامه را ایجاد کردهایم. اکنون میخواهیم نسخه نهایی آن را برای انتشار در Google Play آماده کنیم.

نکته: طبق مستندات Google Play، برنامههای جدید باید به صورت «Android App Bundle | AAB» منتشر شوند. سپس Google Play متناسب با دستگاه هر کاربر، فایل APK مناسب را تولید و در اختیار او قرار میدهد.
ساخت نسخه Release
قبل از انتشار اپلیکیشن باید نسخه «Release» آن را بسازیم. اگر از Buildozer استفاده میکنید، کافی است دستور زیر را اجرا کنید.
buildozer android releaseدر صورت استفاده از Python-for-Android نیز باید عبارت --release را به دستور ساخت برنامه اضافه کنید. پس از پایان عملیات، فایل خروجی برنامه در پوشه bin پروژه قرار میگیرد. Google Play برای انتشار برنامههای جدید از قالب AAB استفاده میکند.
ایجاد Keystore و امضای برنامه
قبل از انتشار برنامه باید آن را با «کلید دیجیتال» (Keystore) امضا کنید. اگر تاکنون Keystore نساختهاید با ابزار keytool موجود در JDK میتوانید آن را ایجاد کنید. اگر در بخش قبل از «GitHub Codespaces» برای ساخت فایل AAB استفاده کردهاید، همین Codespace را باز نگه دارید و دستور زیر را در پنجره Terminal آن اجرا کنید.
keytool -genkey -v -keystore my-release-key.jks -alias my_alias_name -keyalg RSA -keysize 2048 -validity 10000پس از اجرای دستور، برنامه چند سوال مانند کلمه عبور Keystore، نام، سازمان و کشور را میپرسد. پس از پاسخ دادن به این پرسشها، فایل «my-release-key.jks» در پوشه جاری پروژه ایجاد میشود. این فایل را در محل امنی نگهداری کنید، زیرا برای انتشار نسخههای بعدی برنامه نیز به همین کلید نیاز خواهید داشت.
اگر از Buildozer استفاده میکنید، کافی است مشخصات Keystore را در فایل buildozer.spec وارد کنید تا هنگام اجرای دستور buildozer android release فایل خروجی به صورت خودکار امضا شود.
ایجاد برنامه در Google Play Console
ایجاد برنامه در Google Play Console دو بخش اصلی دارد.
- وارد حساب توسعهدهنده Google Play Console شوید و روی گزینه «Create app» کلیک کنید. سپس نام برنامه، زبان پیشفرض، نوع برنامه و رایگان یا پولی بودن آن را مشخص کنید و به بخش بعد بروید.
- در بخش بعد باید اطلاعات صفحه برنامه را تکمیل کنید. مهمترین موارد را در فهرست پایین نوشتهایم.
- عنوان برنامه
- توضیح کوتاه
- توضیح کامل
- آیکون برنامه
- تصاویر برنامه
- اطلاعات تماس توسعهدهنده
بارگذاری فایل AAB و انتشار برنامه
پس از تکمیل اطلاعات برنامه، وارد بخش Production شوید. مهمترین مراحل کار این قسمت را در پایین نوشتهایم.
- ابتدا نسخه جدیدی ایجاد کنید.
- بعد از آن فایل AAB تولید شده را بارگذاری کنید.
- در صورت وجود خطا یا هشدار، ابتدا آنها را برطرف کنید.
- سپس نسخه را برای بررسی ارسال کنید.
- پس از تکمیل تمام بخشهای موردنیاز، درخواست انتشار برنامه را ثبت کنید. Google برنامه را بررسی میکند و در صورت تایید، آن را در Google Play منتشر خواهد کرد.
جمعبندی
در این مطلب از مجله فرادرس، مراحل ساخت بازی با پایتون برای اندروید را با استفاده از فریمورک Kivy به صورت گامبهگام یاد گرفتیم. ابتدا ابزارهای مورد نیاز مانند پایتون، Kivy و KivyMD و Buildozer را معرفی کردیم. سپس ساختار اولیه پروژه را ایجاد کرده و رابط کاربری را با فایلهای KV طراحی کردیم. در ادامه، بخشهای اصلی بازی مانند توپ و راکت را به پروژه اضافه کردیم. همچنین نحوه مدیریت رویدادهای لمسی، پیادهسازی حرکت بازیکنان و ثبت امتیاز را نیز بررسی کردیم.
در ادامه، با روشهای ساخت فایلهای APK و AAB آشنا شدیم. همچنین نحوه استفاده از ابزارهایی مانند Buildozer و Python-for-Android را یاد گرفتیم و برنامه را روی دستگاههای اندرویدی اجرا کردیم. علاوه بر این، روش انتشار بازی در گوگل پلی استور و نحوه استفاده از قابلیتهای اختصاصی سیستمعامل اندروید را نیز بررسی کردیم. این آموزش، تمام مراحل ساخت بازی با پایتون برای اندروید را از طراحی اولیه تا ساخت فایل خروجی و انتشار برنامه پوشش میدهد. به همین دلیل، میتواند راهنمای مناسبی برای علاقهمندان به بازیسازی با پایتون باشد.












