نگاهی به ساخت بازی اندرویدی

مقدمهاز سالیان پیش، توسعه بازی، از جمله حرفه‌های محبوب بوده است؛ گردش مالی این صنعت که در سال 2012 مبلغ 70.6 میلیارد دلار بوده، در سال 2020 به میزان 159.3 میلیارد دلار رسیده و همچنین پیش‌بینی می‌شود در سال 2023 به رقمی نزدیک به 200 میلیارد دلار برسد. در سال 2020 مبلغی در حدود 77.2 میلیارد دلار از گردش مالی‌ها مختص بازی‌های موبایلی بوده است، یعنی حدود 48 درصد از کل! تعداد بازیکنان با موبایل در سال 2020 نسبت به سال 2019، 12 درصد رشد داشته و به عدد 2.5 میلیارد نفر در جهان رسیده است.در دسترس بودن و قابل حمل بودن در همه مکان‎ها را می‌توان مزیت رقابتی پلتفرم موبایل نسبت به سایر پلتفرم‌های با قابلیت بازی کردن در نظر گرفت؛ آمار 1.3 میلیاردی بازیکنان کامپیوتر‎های شخصی و 729 میلیونی بازیکنان کنسولی نیز این مزیت رقابتی را به خوبی اثبات می‌کند؛ با همه این اوصاف بهینه‌سازی و طراحی مناسب بازی برای قشر گسترده و متنوع سیستم‎های سخت افزاری این پلتفرم همواره از جمله چالش‌ها و مشکلات توسعه دهندگان بوده، همچنین بالا بودن تعداد بازی‌های اندرویدی رقابت را برای توسعه دهندگان بر سر برترین بودن به شدت بالا برده و نیازمند آن کرده که از حداکثر توانایی خود جهت ایجاد رابط کاربری زیبا و آسان، گیم پلی خوب، تبلیغات موثر و... برای جذب مخاطب بکار بگیرند (در حال حاضر حدود 2.7 میلیون اپلیکیشن و بازی در گوگل پلی موجود می‌باشد).پر دانلودترین بازی‌های گوگل پلیهر اپلیکیشنی بازی نیست!می‌توان گفت بازی ویژگی‌های یک اپلیکیشن را به ارث می‌برد اما ویژگی‌های بیشتری نسبت به یک اپلیکیشن بایستی دارا باشد تا یک بازی نام بگیرد؛ از جمله بزرگترین تفاوت‌های یک بازی با یک اپلیکیشن، هدف ایجاد سرگرمی و نشاط است، اپلیکیشن برای ارائه یک تکنولوژی یا خدمات ساخته می‌شود، اما یک بازی با هدف ایجاد سرگرمی برای مخاطب، همین یک مورد، خود باعث افزایش پیچیدگی طراحی یک بازی شده است، سرگرمی یک احساس است و احساسات خیلی قابل اندازه‌گیری نیستند و پارامتری وجود ندارد که ما بتوانیم بگوییم که آیا الان یک نفر سرگرم شده است یا خیر و توسعه دهنده بازی هرگز نمی‌تواند با اطمینان خاطر میزان سرگرم شدن مخاطبش را اعلام کند؛ در مقابل یک توسعه دهنده اپلیکیشن به سادگی می‌تواند بفهمد که اپ خدمات لازم را انجام می‌دهد و به اهدافی که برای آن طراحی شده است می‌رسد یا نه.یک نمونه تفاوت دیگر، نیاز به استفاده از ریاضیات برای پیاده سازی فیزیک و گرافیک و همچنین برای وجود هوش مصنوعی در بازی است، در صورتی که یک اپلیکیشن عمدتا تنها مبتنی بر فناوری هستند و البته با استفاده کمی از گرافیک. یک توسعه دهنده اپلیکیشن نیاز زیادی به بهینه سازی ندارد اما برای یک بازی در بسیاری از زمینه‌ها برای عملکرد یکسان بین دستگاه‌های با سخت افزار ضعیف و قوی بایستی بهینه سازی‌های گوناگونی صورت بگیرد.طراحی بازی یا Game Designنقش‌هایی مانند برنامه‌نویس، آرتیست و نویسنده را همه ما می‌شناسیم و به میزان قابل قبولی وظیفه هر نقش در روند ساخت بازی را می‌دانیم، اما اسم "طراح بازی" یا همان "game designer" کمتر به گوشمان خورده یا به طور دقیق وظیفه و نقش آن را در فرآیند ساخت یک بازی نمی‌دانیم. طراح بازی نیازمند دانش به حد کافی در اکثر زمینه‌های ساخت یک بازی مانند برنامه نویسی، آرت، روایت داستان و... است، زیرا نیاز به ارتباط برقرار کردن با همه این افراد برای پیاده سازی ایده‌ها، قوانین، چالش‌ها، کاراکترها و موارد بسیار دیگری را دارد؛ اما تنها نیاز آن نیست که توانایی پیاده سازی ایده‌هایش را در بازی داشته باشد، بلکه باید چگونه طراحی کردن، چه چیزی را طراحی کردن، هر ویژگی را چه زمانی پیاده کردن و چرایی چیزی که قصد طراحی‌اش را دارد بطور کامل بداند و بر آن مسلط باشد.در فرآیند طراحی بازی مسائلی تعیین و طراحی می‌شوند که در واقع هسته اصلی بازی را تشکیل می‌دهند و سایر موارد در بازی بر پایه آنها پیاده سازی می‌شوند. چند مورد از این موارد در ادامه به صورت مختصر به آنها پرداخته شده است:تشریح جزییات گیم‌پلیدر این بخش نوع گیم پلی بازی، نوع تعامل بازیکن با بازی، کنترل ها، رابط کاربری و موارد نظیر آنها نسبت به پلتفرم هدف تعیین می‌شوند. وجود یک گیم پلی خوب است که می‌تواند تجربه‌ای خوب و بدون خسته و یا تکراری شدن در طی دقایق و یا حتی ساعات طولانی‌ای از بازی را به همراه داشته باشد.پیشرفت در روند بازیبازی یک سیستم سرگرمی پویا هست، بنابراین بازیکن نباید در روند یک بازی خسته و کسل شود. مواردی همچون وجود "core loop" در بازی، فرآیندهای پاداش و جایزه دهی به بازیکن طی فعل و انفعالات مختلف در بازی و... از جمله کارهایی هستند که در جهت بهبود و افزایش درگیر شدن بازیکن با بازی یا به اصطلاح "engagement" مورد استفاده قرار می‌گیرند.Clash royal core loopداستان و المان‌های بازیدر این بخش از طراحی بازی، پشت زمینه‌ای از داستان و عناصر اصلی موجود در بازی مشخص می‌شوند، توجه داشته باشید که منظور از داستان لزوما یک روایت کامل از یک بازی داستان محور نیست، برای مثال در یک بازی در سبک پلترفمر (سکویی) معمولا المان‌های ما یک شخصیت اصلی بازی، تعدادی دشمن، تعدادی سکو و موانع دیگر می‌باشد که هدف و داستان کلی بازی نجات یک شاهزاده و یا مواردی نظیر آن می‌باشد. به عنوان نمونه‌ای دیگر، بازی دوز یا همان Tic Tac Toe را در نظر بگیرید؛ وجود داستان در این بازی ضرورتی ندارد، هرچند که ما المان های ضربدر، دایره و زمین 3*3 را در بازی داریم و همگی در این بازی طراحی و پیاده‌سازی شده‌اند.اسلحه‌ها، تروریست‌ها، ضدتروریست‌ها، بمب، گروگان‌ها اصلی ترین المان های بازی کانترطراحی مرحلهمراحل در بازی، پیشرونده فرآیندها، روایت بازی و چالش‌های آن است؛ یک طراح مرحله برای هر مرحله هدف‌ها، چالش‌های پیشرو برای رسیدن به آن هدف و المان‌های مختلف را با دید فنی و هنری تعیین می‌کند.گرافیکدر بازی‌ها، زیبایی و جذاب بودن گرافیک جزو ویژگی‌های مهم و جذب کننده مخاطب می‌باشد، همواره توسعه‌دهندگان در تلاشند که با استفاده از ابزارهای مختلف و با پیشرفت‌های نرم افزاری و سخت‌افزاری گرافیک بازی‌ها را به واقعیت نزدیکتر کنند و تجربه جذاب تری را برای مخاطب به ارمغان بیاورند. در ادامه به تشریح گرافیک سه بعدی و دو بعدی در اندروید می‌پردازیم:گرافیک سه بعدیبه طور کلی اندروید توانایی پشتیبانی از گرافیک 3 بعدی را ندارد اما می‌توان با استفاده از android NDK و یا کتابخانه openGl این مشکل را برطرف کرد. برای فهم گرافیک سه بعدی در اندروید، باید ابتدا نحوه شناسایی یک جسم سه بعدی برای اندروید را بدانیم.نقطه و مثلث (vertix and traingle)در اندروید از اصطلاح vertex برای نقاط در فضای سه بعدی استفاده می‌شود که می‌توان انها را با vector3 ساخت. مثلث از ترکیب نقاط در صفحه بدست می‌آید که اصلی‌ترین عامل در تعیین میزان هزینه پردازش پردازنده است. اشکال مختلف در اندروید ساخته شده از تعدادی از این مثلث‌ها هستند، برای مثال یک مربع را با 2 مثلث و یک مکعب را با 12 مثلث (6 2) می‌توان ساخت.چند ضلعی یا Polygonدر اندروید به هر سطحی در فضای سه بعدی چندضلعی (polygon) گفته می‌شود که تشکیل شده از مثلث‌های پایه است.polygonشکل بالا مثالی از یک چندضلعی است؛ همانطور که می‌بینید این شش‌ضلعی دارای 4 مثلث و 6 راس است. نکته مهمی که باید به آن اشاره کرد این است که شما همواره باید سعی کنید تعداد چندضلعی‌ها (در واقع مثلث‌ها و راس‌ها) را کاهش دهید چرا که هزینه پردازشی زیادی صرف پردازش نقاط و مثلث‌ها در اندروید در گرافیک سه بعدی می‌شود و از سوی دیگر برخلاف کامپیوترهای شخصی یا کنسول‌ها در دستگاه‌های اندرویدی همواره محدودیت پردازنده داریم.رندرینگ سه بعدی (Rendering 3d)کتابخانه openGL مسئول ساخت اشیا سه بعدی در صفحه است و این کار را با کمک GLSurfaceView و GLSurfaceView.Renderer انجام می‌دهد. همچنین شکل فضا را مانند تصویر زیر در نظر می‌گیرد و از قاعده دست راست در بردارها نیز برای تعیین جهات استفاده می‌کند:بردارهای سه‌بعدیمش سه بعدی (3D Mesh)شبکه (mesh) ساختار اصلی یک شکل است که تشکیل شده از چندضلعی‌ها و مثلث‌ها و نقاط و حتی شبکه‌های دیگر است. برای مثال شبکه برای یک دلفین چیزی شبیه به شکل زیر است:یکی از سخت‌ترین قسمت‌های طراحی گرافیک بازی، طراحی شبکه برای اشیا داخل بازی است. مراحل ساخت یک شبکه در دیاگرام زیر آورده شده است:مراحل ساخت meshبافت یا Texturesبافت (texture) در واقع یک تصویر دو بعدی برای شبکه هاست (در مثال دلفین رنگ خاکستری روی شبکه) که روی آن قرار میگیرد تا بتواند واقعی‌تر بنظر برسند و شکل سه بعدی به خود بگیرند.سایه‌بان یا Shadersسایه‌بان‌ها (shader) برای تغییر دادن رنگ، شدت رنگ، کیفیت تصویر و خصوصیات از این دست در texture هستند تا عنصر مورد نظر واقعی تر بنظر برسد.متریال (Materials)متریال در واقع یک نگه دارنده برای بافت و shader است و می‌توان آن را به یک شبکه مقدار دهی کرد تا آن شبکه بافت و shader مورد نظر را به خود بگیرد.حال به محیط بازی در حالت سه بعدی می‌پردازیم:جهان سه بعدی (3D world)جهان بازی در اندروید یک شبیه سازی از دنیای واقعی است که با توجه به مکان، چرخش، زاویه و دوری و نزدیکی دوربین‌ها محدوده جهان ما هم مشخص می‌شود. جهان‌های مختلف عناصر مختفی را به نمایش می‌گذارند ولی همگی آنان در 3 موضوع اشتراک دارند: محدودیت منبع نور دوربین(ها)منبع نور (light source)بازی ها باید یک یا چند منبع نور داشته باشند. منبع نور بیشتر دو معنی می‌دهد: زیبایی و تاثیر بهتر بر بازی از لحاظ زیبایی شناختی و دیگری فشار بیشتر روی پردازنده. از این رو همزمان با اضافه کردن منابع نور مختلف برای افزایش زیبایی بازی باید حواسمان به بار پردازشی حاصل از ان هم باشد. منبع نور حالات مختلفی دارد (معمولا این حالات در اکثر موتورهای بازی یکسان‌اند) نور منطقه‌ای (Area light) نور مخروطی (Spot light) نور نقطه‌ای (Point liight) نور جهتی (Directional light) نور محیطی (Ambient light)نور حجمی (Volume light)ما در ادامه دو مورد اول را بررسی خواهیم کرد:نور محیطیبرای روشن کردن یک محیط مستطیلی یا دایروی استفاده می‌شود. این نور از یک جهت خاص و با شدت ثابت و برابر تابیده می‌شود.Area Lightنور مخروطیاین نور بسیار شبیه چراغ مطالعه‌ها با سری مخروطی است که نور را به صورت مخروطی (با تصویر بیضی روی سطح صاف) روی یک منطقه خاص می‌تاباند.Spot Lightدوربیندوربین یکی از مهم‌ترین عناصر بازی است که تایید کننده این است که چه فضایی از جهان و چه عناصری باید در حال حاضر رندر شوند. به طور کلی دو نوع دوربین داریم: دوربین با عمق (perspective) و دوربین عمود بر صفحه (orthographic):دوربین Perspectiveدر این نوع دوربین عمق و اندازه اجسام به خوبی قابل مشاهده است. این دوربین مخصوصا برای طراحی سه‌بعدی استفاده می‌شود.Perspective دوربیندوربین Orthographicاین دوربین برای طراحی دو بعدی ساخته شده اما می‌توانیم با ترفندهایی اشکال نیمه سه بعدی(2.5 بعدی) نیز با آن بسازیم. خاصیت این دوربین بی اثر کردن عمق اجسام در تصاویر است.دوربین Orthographicسیستم رندرینگ سه بعدیاندروید از pipeline کتابخانه openGL استفاده میکند تا برنامه را رندر کند.فرآیند رندریگ سه بعدی1. ابتدا vertex shader هر راس را با اطلاعات vertexمربوط به ان پردازش می‌کند.2. Control shader مسئول کنترل داده‌های vertex برای ساختن ابتدایی مثلث‌ها و موزاییک‌کاری است.3. این مرحله ضلع‌ها را می‎سازد. به عبارتی تقاطع چندضلعی‌های مختلف را شناسایی می‌کند بدون تکرار راس‌ها.4. Tessellation در واقع فرآیند کاشی کاری چندضلعی هاست به گونه ای روی هم نیفتند و یا فاصله بینشان نباشد.5. در این مرحله مثلث‌ها شکل می‌گیرند.6. حال شکل اصلی تکه تکه می‌شود (برای بهینه سازی).7. در این مرحله داده‌های اضافی vertexها حذف می‌شوند.8. حال شبکه را به قطعات کوچک تر (بطور تصادفی) تقسیم بندی می‌کنیم.9. حال fragment shaderقطعات حاصل از مرحله قبل را تحلیل می‌کند.10. حال همه ی پیکسل‌ها به مکان خود در صفحه map می‌روند.11. در آخر شبکه اماده شده و برای رندر نهایی وارد frame buffer می‌شود.گرافیک دوبعدیگرافیک دوبعدی از پیچیدگی بسیار کمتری نسبت به حالت سه بعدی برخوردار است، همین موضوع باعث شده برخی توسعه دهندگان تمرکز خود را برای تولید یک بازی اندرویدی روی گرافیک دو بعدی بگذارند.فیزیک در بازیدر توسعه بازی ها، برای شبیه سازی واقع‌گرایانه تر رفتار مواد تحت شرایط مختلف، از قوانین فیزیکی استفاده می‌کنیم که توسط موتورهای فیزیکی (Physics Engine) پیاده سازی و اجرا می‌شوند. با وجود این در اکثر موارد، فیزیک شبیه سازی شده در بازی‌ها تنها تقریبی از قوانین فیزیکی در دنیای واقعی است که این موضوع را می‌توان به تاثیر منفی محاسبات سنگین بر Performance بازی و نیز گاهی ایجاد جنبه‌های Gameplay غیر واقعی اعم از قابلیت Double jump در برخی بازی‌ها ربط داد.تشخیص برخورد (Collision Detection)شناسایی برخورد در محیط دو بعدیدر اکثر بازی‌ها برای شناسایی اکثر برخوردها از سیستم box-colliding استفاده می‌کنند. جعبه‌ای که در این روش استفاده می‌شود می‌تواند در دقت و نیز Performance تاثیر بسیار بگذارد. کم هزینه‌ترین روش برای شناسایی برخورد استفاده از مستطیل است که کمترین دقت را نیز دارد. البته در برخی موارد می‌توان از جعبه‌های مثلثی یا دایروی نیز استفاده کرد که به مراتب Performance کمتری دارند. حال برای شناسایی برخورد دو دایره رایج ترین روش‌ها را بررسی میکنیم.شناسایی برخورد دو مربعدر این روش هر دو دایره را مربع درنظر می‌گیریم. این روش از بین این روش‌ها کم هزینه ترین است اما دقت آن به مراتب کمتر است.محاسبات روش برخورد دو مربعشرط برخورد در این روش به صورت زیر می‌باشد:if (x1Max < x2Min) { // Not Collide } else if (y1Max < y2Min) { // Not Collide } else if (x2Max < x1Min) { // Not Collide } else if (y2Max < y1Min) { // Not Collide } else { // Collide }شناسایی برخورد یک دایره و یک مربعدر این روش تنها یکی از دایره‌ها را مربع در نظر می‌گیریم. این روش از بین این روش‌ها کمترین کاربرد را دارد.محاسبات روش برخورد دایره و مربعشرط برخورد در این حالت به صورت زیر می‌باشد:if (Ox1 + R1 < Px1) { // Not Collide } else if (Ox1 > Px4) { // Not Collide } else if (Oy1 + R1 < Py1) { // Not Collide } else if (Oy1 > Py2) { // Not Collide } else { if (dP1 <= R1) { // Collide } else if (dP2 <= R1) { // Collide } else if (dP3 <= R1) { // Collide } else if (dP4 <= R1) { // Collide } else if (Px1 <= Ox1 && Ox1 <= Px3 && Oy1 + R1 >= Py1 && Oy1 <= Py2) { // Collide } else if (Py1 <= Oy1 && Oy1 <= Py2 && Ox1 + R1 >= Px1 && Ox1 <= Px3) { // Collide } else { // Not Collide } }شناسایی برخورد دو دایرهاین روش نسبت به دو روش قبلی دقت بیشتری دارد و به همین دلیل پرهزینه ترین است.محاسبات روش برخورد دو دایرهشرط برخورد این حالت به صورت زیر می‌باشد:if (originDistance <= R1 + R2) { // Collide } else { // Not Collide }شناسایی برخورد در محیط سه بعدیاستفاده از Mesh Collidersاین Colliderها می‌توانند برخورد واقعی اجسام را تشخیص دهند که محاسبات آن بسیار سنگین بوده و با هیچ الگوریتمی (اعم از Quadtree، kd-tree و AABB tree) نمی‌توان بصورت چشمگیری هزینه آنرا کاهش داد. قدیمی ترین و دقیق ترین روش، مثلث-به-مثلث بر روی هر سطح است به این صورت که هر تکه مش را به تعدادی جعبه تقسیم کرده و با اعمال یک AABB tree و حتی یک octree تعداد گوشه‌های آنرا کاهش می‌دهیم و اینگونه performance الگوریتم را افزایش می‌دهیم و سپس بر هم نهی مختصات گوشه‌های مختلف را بررسی می‌کنیم.Mesh colliderاستفاده از Primitive Collidersدر این روش تنها با جایگزین کردن اشکال هندسی سه بعدی مختلف، performance شناسایی برخوردمان را به مراتب افزایش می‌دهیم. با این وجود این روش دقت به مراتب کمتری نسبت به استفاده از Mesh Collider دارد.Premitive colliderتست بازیهمانطور که در بخش‌های قبلی نیز به آن اشاره شد، فرآیند ایجاد سرگرمی و به اصطلاح "fun" از جمله تفاوت‌های اصلی بین بازی و اپ می‌باشد که همین امر باعث افزایش پیچیدگی فرایند تولید یک بازی شده است، از این جهت که معیار مشخصی برای ارزیابی میزان احساسات همچون شادابی و سرگرمی و هیجان برای مخاطب وجود ندارد، با این وجود توسعه دهندگان بازی از روش هایی برای بهبود کیفیت و رفع مشکلات موجود در بازی‌ها از دید مخاطب استفاده می‌کنند؛ یکی از همین روش ها "تست بازی توسط تسترها" می‌باشد. یکی از مهمترین تفاوت های تست بازی با تست دیگر نرم افزارها، در تکراری بودن روند آن است، یک بازی بعد هر build که گرفته می‌شود ممکن است باگ‌هایی به بازی اضافه کرده باشد و باید حتما تست شود. در ادامه چند نوع از تست‌های رایج را به صورت مختصر بررسی می‌کنیم:تست فانکشنال: در این تست دنبال مشکلات کلی در بازی می‌گردیم، در واقع بررسی می‌کنیم که هر بخش از بازی وظایف که برای آن طراحی شده را به درستی انجام می‌دهد یا خیر، برای مثال در رابط کاربری، گرافیک، مکانیک‌های بازی، صداها و...تست سازگاری: در این تست میزان سازگار بودن بازی را با نرم افزار و سخت افزارهای مختلف دستگاه‎‌های هدف بررسی می‌کنیم، برای مثال با نصب و حذف کردن بازی روی سیستم عامل با نسخه‎‌های مختلف اندروید و همچنین با سخت افزارهای متفاوت.تست عملکرد: بررسی میزان فعالیت‌های در پشت بازی و به ویژه در سخت افزار. برای مثال میزان مصرف باتری و انرژی، میزان استفاده از RAM و CPU، میزان ترافیک مصرفی اینترنت و بهینه بودن فرایند رد و بدل کردن اطلاعات با سرور و سایر کاربران.تست استقامت: در این تست هدف به اجرا گذاشتن بسیار طولانی مدت بازی در حالات مختلف بازی است، برای مثال کاراکتر در حالت ایستاده به مدت 24 ساعت در محیط بازی بماند؛ از این روش برای پیدا کردن کرش کردن های از روی نشت حافظه و یا خطای رند کردن استفاده می‌شود.تست ریکاوری: توانایی بازیابی اطلاعات بعد از کرش کردن یا توقف ناگهانی بازی را با استفاده از این تست می‌سنجند، برای نمونه وقتی بازی در حال اجرا است دستگاه مربوطه را ریستارت می‌کنند تا بعد ببینند که بازی چگونه اطلاعات و شرایط قبلی را بازیابی می‌کند.مدل‌های درآمد زایی در بازی‌های موبایلیصنعت بازی سازی با وجود کم سابقه تر بودن نسبت به دیگر صنعت‌های سرگرمی همچون فیلم و سریال، در برخی سال های اخیر میزان گردش مالی بیشتری نسبت به بقیه داشته است. گردش مالی صنعت جهانی فیلم در سال 2019 برای اولین بار به بالای 100 میلیارد دلار رسید، این در حالیست که در سالیان پیش از آن گردش مالی صنعت بازی به بالای این مبلغ رسیده بود. نکته قابل توجه‌ی که وجود دارد امکان هزینه کردن تقریبا نامحدود برای نوع خاصی از بازی هاست که چنین امکانی برای فیلم و سریال وجود ندارد.مدل‌های مختلفی از درآمد زایی در بازی‌های ویدیویی وجود دارد:بازی‌های غیر رایگان: این دسته از بازی‌ها در ازای استفاده و سرگرم شدن با آن، یک مبلغ مشخص اولیه پرداخت می‌شود، همانند خیلی از موارد فروشی موجود در بازار.بازی‌های رایگان (F2P: Free to play): این دسته از بازی ها برای نصب و اجرای بازی هیچ مبلغی از شما نمی‌گیرند و به راحتی با دانلود کردن آنها به نصب و اجرای آن می‌پردازید. شیوه درآمد زایی از این نوع بازی‌ها متفاوت با دیگر صنعت‌ها می‌باشد. به صورت عمده دو شیوه "پرداخت درون برنامه‌ای" و "دیدن تبلیغات" برای درآمد زایی برای توسعه دهنده در این مدل بازی‌ها مورد استفاده قرار می‌گیرند.پرداخت درون برنامه‌ایدر بازی‌های F2P امکان بازی به صورت رایگان برای همه کاربران وجود دارد، اما توسعه دهندگان درون اینگونه بازی‌ها امکاناتی قرار داده‌اند که با داشتن آن امکانات و تجهیزات، سرعت پیشرفت در بازی چند برابر شده و به دنبال آن لذت و سرگرمی کاربر بیشتر از قبل می‌گردد، این امکانات یا به صورت مستقیم قابل خرید با پول واقعی هستند و یا با یک واحد پول مجازی در بازی قابل خریداند که خود آن پول مجازی را می‌توان به صورت مستقیم خریداری نمود. در اینجا لازم است که با دو مفهوم "soft currency" و "hard currency" آشنا بشویم؛ soft currency به مجموعه دارایی‌هایی در بازی گفته می‌شود که در طی گذراندن مراحل، ماموریت‎‌ها و به ثمره کارهای مختلف دیگر در بازی به عنوان پاداش دریافت می‌شود و نیز به کمک آنها می‌توان در بازی پیشرفت داشت و رشد کرد، این پیشرفت می‌تواند به واسطه استفاده مستقیم از خود دارایی در بازی باشد (مثل کیت‌های سلامتی و قدرت‌های ویژه یکبار مصرف) و یا مانند یک ارز مجازی برای خرید دیگر ویژگی‌های درون بازی استفاده شود (مانند سکه یا پول رایج در بازی‌ها). نکته‌ای که درباره soft currency وجود دارد این است که دراکثر بازی‌ها، این منابع به صورت مستقیم توسط پول واقعی، قابل خرید نیستند، بلکه توسط منابعی دیگر به نام hard currency ها قابل خرید هستند (می‌توان این عمل را تبدیل کردن ارزها نیز نام گذاری کرد). Hard currency ها منابع محدودتر و با ارزشتری نسبت به soft currency ها هستند و در بازی کمیاب تر بوده و به عنوان پاداش در جاهای خیلی محدود در بازی و به میزان کمتری به بازیکن داده می‌شود. این مدل ارز به هدف خرید بازیکن با پول مستقیم ایجاد شده و این امکان را به او می‌دهد که با هزینه کردن سرعت رشد و پیشرفت خودش را در بازی افزایش دهد.بازی Clash royalدر برخی بازی‌ها یک المانی با نام های "انرژی" یا "قلب" وجود دارد؛ این عنصر در واقع مجوز ادامه دادن به بازی است، با داشتن این دارایی است که می‌توانید به بازی کردن خود ادامه دهید و اگر در مرحله‌ای از بازی بازنده شوید، تعدادی از این دارایی شما کم می‌شود و وقتی به صفر برسد شما بایستی مدت زمانی را منتظر بمانید تا قلب یا انرژی شما ترمیم و بازگردد، همچنین امکان پرداخت مستقیم یا استفاده از hard currency برای پر شدن کامل انرژی یا نامحدود کردن آن برای مدت معینی (مثلا 24 ساعت) نیز در این بازی‌ها وجود دارد تا بازیکن بتواند بدون اتلاف وقت به پیشرفت در بازی بپردازد.بازی Score! Heroدر برخی از بازی‌ها از "battle pass" استفاده شده است، در این شیوه از بازیکن‌ها خواسته می‌شود که چالش‌هایی را انجام دهند و در ازای آن بر طبق یک الگوی مشخص، پاداشی را بازی به آنان می‌دهد؛ معمولا ارزش این پاداش‌ها در سطح معمولی بوده ولی در battle pass ها دو مسیر پاداش وجود دارد، یکی با ارزش معمولی و دیگری با ارزش پاداش‌هایی بالا، اما نکته‌ای که وجود دارد این است که به صورت پیشفرض مسیر پاداش‌های باارزش قفل است و برای باز کردن آن بایستی مبلغی را پرداخت کنید. معمولا جوری این مبلغ توسط توسعه دهندگان تعیین می‌شود که بازیکن پاداش‌های موجود در مسیر طلایی را با ارزش واقعی‌شان در فروشگاه بازی مقایسه کند و خرید بتل پس را به صرفه تر بداند و دست به خرید آن بزند.بتل پس در بازی soccer starsشیوه‌های درآمدزایی دیگر از طریق پرداخت درون برنامه‌ای نیز مانند گردانه شانس، bundle ها، اشتراک ویژه و... وجود دارند که ما در این نوشته به آنها نمی‌پردازیم.تبلیغات درون برنامهاز جمله دیگر شیوه‌های کسب درآمد، نمایش تبلیغات دیگران در بازی خود می‌باشد. ارائه‌دهندگان تبلیغ در شرایط گوناگونی مبلغی را به توسعه دهنده پرداخت می‌کنند، چند شاخص در این مورد وجود دارد که ابتدا کمی با آنها آشنا شویم:شاخص CPC: یا cost per click، ارائه دهنده تبلیغ در ازای هر کلیک بر روی تبلیغش مبلغ مشخصی را به توسعه دهنده پرداخت می‌کند.شاخص CPA: یا cost per action، در ازای انجام یک عملیات خاص توسط کاربر بعد از دیدن ویدیو مبلغی پرداخت می‌شود، مانند ثبت نام در سامانه پیامکی، سابسکرایب کردن و...شاخص CPI: یا cost per install، در ازای هر نصب بعد از مشاهده ویدیو توسط کاربر، مبلغی به توسعه دهنده پرداخت می‎شود.تبلیغات در بازی موبایلی نیز بر چندین نوع هستند برخی از آنها را در ادامه بررسی می‌نماییم :تبلیغات بنریاین تبلیغات معمولا توسط کاربر غیر قابل بسته شدن یا پنهان شدن می‌باشند، این نوع از تبلیغات یک مکان ثابتی از صفحه نمایشگر را در موقعیت‌های مختلف (بالا وسط، پایین وسط و..) و اندازه آنها نیز کوچک بوده و فضای زیادی از صفحه را اشغال نمی‌کنند، با این حال اکثرا توسعه دهندگان از این شیوه تبلیغاتی بخاطر تغییر در رابط کاربری و محدود کردن بخشی از صفحه نمایش‌شان استفاده نمی‌کنند.تبلیغات بینابینیاین مدل تبلیغات عکس‌های قابل کلیک تمام صفحه بوده که در زمان نمایش در بازی تمامی تصاویر و رابط کاربری بازی به پشت این عکس منتقل می‌شوند و یک دکمه ضربدر نیز دارد که با لمس محل مربوطه تبلیغ بسته شده و به بازی برمی‌گردد. بسته به نوع انتخاب توسعه دهنده، این نوع تبلیغ در هر جایی از بازی می‌تواند نمایش داده شود.تبلیغات ویدیوییاین مدل از تبلیغات بر دو نوع ویدیو کوتاه و بلند هستند؛ ویدیوهای بلند مدت معمولا بعد از مدتی دکمه skip یا رد کردن تبلیغ آن به کاربر نمایش داده می‌شود تا بعد آن بتواند تبلیغ را رد کند، اما تبلیغات کوتاه مدت قابل رد کردن نیستند و کاربر مجبور است تا اتمام کامل ویدیو منتظر بماند؛ معمولا اینگونه تبلیغات را در ازای پاداش مشخصی در بازی به کاربر نمایش می‌دهند تا بدون پرداخت مبلغی به صورت مستقیم و از طریق کیف پول، بتواند منابع مورد نظر خودش را بدست آورد.بازی Tilres Hopسخن پایانیفرآیند ساخت بازی ترکیبی از هنر، بخش فنی، برنامه‌نویسی و مهندسی است، فرآیندی سخت و طولانی، اما در عین حال لذت بخش. در صنعت بازی سازی بقدری حوزه‌های تخصصی و متنوعی وجود دارد که به هر میزانی که شما مطالعه در این زمینه داشته باشید، باز هم مطالب بسیار زیادی وجود دارد که حتی اسمشان هم به گوش‌تان نخورده است! بازی‌ها سرگرمی‌هایی هستند که می‌توانند باعث رشد خلاقیت، مهارت‌های فکری و واکنش سریع و بسیاری موارد دیگر بشوند، البته که هر تکنولوژی معایب خودش را نیز دارد و بایستی حواسمان به آنها نیز باشد.در آخر امیدواریم که این مطلب برای شما کاربردی بوده باشد و به دانسته‌هایتان افزوده باشد.سپاس فراوان از مطالعه و وقتی که برای این نوشته گذاشتید.نوشته پیمان حاجی محمد، یاسین موسوی، درین ستودهمنابع Roy, A., 2016. The Android Game Developer's Handbook. Packt Publishing. Guru99.com. 2021. Meet Guru99 - Free Training Tutorials & Video for IT Courses. [online] Available at: <https://www.guru99.com/>