برنامه نویسی بازی

برنامه نویسی بازی چیست؟ از کجا شروع کنیم؟

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

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

درباره موانع ذهنی و ترس‌هایی که ممکن است در شروعِ بازی‌سازی سراغمان بیایند، پیشنهاد میکنم مقاله‌ی ” 3 افسانه راجع به بازی‌سازی که حقیقت ندارند” را بخوانید.

 

شما می‌توانید بازی‌سازی را بدون برنامه نویسی شروع کنید و حتی بازی‌هایی بدون برنامه نویسی بسازید که دوره‌ها و آموزش‌های زیادی در این باره وجود دارند و دوره‌ی “صفر تا صد آموزش یونیتی” می‌تواند شروع خوبی برای بازی‌سازی باشد.

 

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

رایانه؟

برنامه نویسی به زبان ساده صحبت‌کردن با رایانه است که از طریق زبان مشخصی انجام می‌شود. به عنوان مثال زمانی‌که می‌خواهید به رایانه دستور بدهید که با فشردن کلید W روی کیبورد، شخصیتِ داخلِ بازی به جلو حرکت کند، باید با لغات و جملات خاصی که برای رایانه قابل فهم است، این دستور را بنویسید.

بنابراین قبل از اینکه بفهمیم برنامه نویسی چیست، باید بدانیم رایانه چیست و چطور باید با آن تعامل کرد.

رایانه(computer) وسیله‌ای است که می‌تواند دستورالعملِ انسانی را بپذیرد، آن را پردازش کند و به آن پاسخ دهد.

ساختار عملکرد رایانه

ساختار عملکرد رایانه(ورودی، پردازش و خروجی)

اجزای اصلی رایانه عبارتند از:

  1. واحد ورودی
  2. واحد پردازش مرکزی(CPU)
  3. واحد خروجی

همه ما می‌دانیم که رایانه متشکل از سخت‌افزار(hardware) و نرم‌افزار(software) است. نرم‌افزار مجموعه‌ای از برنامه‌ها است که چندین کار را با هم انجام می‌دهند. به عنوان مثال ویندوز یا اندروید که سیستم‌عامل(operating system) هستند، یک نرم‌افزار(نرم افزارِ سیستم) هستند که به انسان کمک می‌کنند تا با سیستم رایانه ارتباط برقرار کند.

برنامه(program) مجموعه‌ای از دستورالعمل‌هایی است که برای انجام یک عملیات خاص به کامپیوتر داده می‌شود. همچنین میتوان گفت یک برنامه، دنباله‌ای از دستورالعمل‌(instruction) به همراه داده(data) است.

به عنوان مثال در یک بازی وقتی شما دکمه W را روی کیبورد فشار می‌دهید و شخصیت حرکت می‌کند، چِک کردن اینکه آیا دکمه W فشرده شده یا نه، یک دستورالعمل است. اینکه چه دکمه‌ای چک بشود(W) یک داده است که به همراه دستورالعمل اجرا می‌شود(این مثال را به خاطر بسپارید چرا که در ادامه مقاله با آن کار داریم!).

این برنامه‌های رایانه ای به زبان برنامه نویسی(programming language) نوشته شده‌اند.

زبان برنامه نویسی چیست؟

همان‌طور که ما انسان‌ها زبان‌های مختلفی مثل فارسی، انگلیسی، عربی، ژاپنی، آلمانی و زبان‌های رایج دیگر را برای برقراری ارتباط با یکدیگر داریم، به همین ترتیب، برای برقراری ارتباط با رایانه‌ها، زبان‌های برنامه نویسی مختلفی مانند C ،C ++ ،C# ،Java ،Python و غیره نیز داریم.

البته رایانه فقط زبان دودویی(باینِری) را درک می‌کند(زبان 0 و 1) که به آن، زبانِ قابلِ فهمِ ماشین یا زبانِ سطحِ پایین(low-level language) نیز گفته می‌شود. اما برنامه‌هایی که در دوره صفر تا صد برنامه نویسی می‌نویسیم به زبانی سطحِ بالا(high-level language) است که تقریباً شبیه به زبان انسان است.

زبان‌های برنامه نویسی سطح پایین دستورالعمل‌ها را به روشی بیان می‌کنند که خیلی نزدیک به شیوه‌ای که کامپیوتر کار می‌کند است.

اما زبان‌های سطح بالا بیشتر به روشی که ذهن انسان کار می‌کند شباهت دارند. هر کدام بسته به شرایط خاصی مناسب‌تر است؛ زمانی که سرعت بالا و مصرف کمتر از منابعی مثل RAM لازم است، زبان‌های سطح پایین کاربرد دارند و زمانی که طراحی‌های پیچیده و نگهداری از برنامه ضروری است، زبان‌های سطح بالا مناسب‌تر هستند. بین زبان سطح بالا و زبان ماشین، زبان اَسِمبِلی (Assembly) وجود دارد که به آن کدِ ماشینِ نمادین نیز می‌گویند.

سلسله‌مراتب زبان‌های برنامه‌نویسی

سلسله‌مراتب زبان‌های برنامه‌نویسی

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

پس با استفاده از زبان میتوان برنامه نویسی کرد و دستوراتی را به رایانه داد تا آن را اجرا کند.

برنامه نویسی چیست؟

برنامه نویسی(programming) هنر و علمِ ترجمه‌ی مجموعه‌ای از ایده‌ها به یک برنامه است – لیستی از دستورالعمل‌هایی که یک رایانه می‌تواند از آن پیروی کند. شخصی که برنامه می‌نویسد به عنوان برنامه‌نویس(programmer) یا کُد نویس(coder) شناخته می‌شود.

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

بنابراین زبانی که برای برنامه نویسی استفاده می‌کنیم مهم و تعیین کننده است.

برنامه نویسی بازی شامل چه دسته‌بندی‌هایی می‌شود؟

شما برای برنامه نویسی بازی می‌توانید سراغ تخصص‌های مختلفی بروید. برنامه نویسی در حوزه بازی‌سازی می‌تواند در زمینه‌های زیر باشد:

 

1. ساخت ابزارهای پایه‌ای مثل موتور بازی‌سازی(game engine)، موتور فیزیک(physics engine) یا موتور گرافیکی(graphic engine):

قبل از این‌که هر چیزی از بازی که در ظاهر آن می‌بینیم ساخته شود، ابزارهای پایه‌ای مثل موتور بازی ساخته می‌شوند. برنامه‌نویس‌های موتور بازی باید اطلاعات خیلی خوبی از نحوه عملکرد پردازنده‌ها، حافظه و به طور کلی سخت‌افزار رایانه داشته باشند.

 

2. برنامه نویسی گرافیک(graphic programming):

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

 

3. برنامه نویسی انیمیشن(animation programming):

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

 

4. ساخت ابزارهای مورد نیاز افراد دیگر تیم(طراحان بازی، هنرمندان):

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

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

 

5. برنامه نویسی گِیم‌پِلِی(gameplay programming):

زمانی که یک مکانیک جدید در بازی می‌بینید پیاده‌سازی آن توسط برنامه‌نویسان گِیم‌پِلِی انجام شده است. برنامه‌نویس گِیم‌پِلِی مکانیک‌ها، پازل‌ها، دشمنان، موانع و خیلی از سیستم‌های بازی را پیاده‌سازی می‌کند.

 

6. برنامه نویسی شبکه(network programming):

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

 

7. برنامه نویسی هوش مصنوعی(AI programming):

اگر از هوشمندی دشمنان یک بازی هیجان‌زده می‌شوید، بدانید برنامه‌نویس هوش مصنوعی (Artificial intelligence) خوبی داشته است. برنامه نویس‌های هوش مصنوعی باید دانش خوبی از روش‌ها و الگوریتم‌های مطرح در این رشته داشته باشند.

8. برنامه نویسی رابط کاربری(UI programming):

تمام المان‌هایی که معمولا به صورت دوبُعدی (و برخی اوقات سه‌بُعدی) اطلاعاتی نظیر میزان سلامتی، تعداد تیر یا تعداد بازیکنان را در صفحه نمایش می‌دهد، به عنوان رابط کاربری (User Interface) شناخته می‌شوند. برنامه نویسیِ رابط کاربری معمولا شامل ساختن مجموعه‌ای از رابط‌های کاربری پرکاربرد برای پروژه‌های مختلف است.

 

برای ساخت بازی چه ابزارهایی لازم است؟

برای ساخت یک بازی، استفاده از یک زبان به تنهایی کافی نیست و نیاز داریم از ابزارهای مناسب دیگری مثل موتورهای بازی‌سازی(Game Engine)، کتابخانه‌های کابردی(libraries)، ابزارها(tools) و افزونه‌ها(plugins) استفاده کنیم. یکی از مهمترین موارد مورد نیاز، انتخاب یک موتور بازی‌سازی مناسب است.

 

موتور بازی سازی چیست؟

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

در مثالِ حرکت کاراکتر(که در بخش “رایانه” آورده شد) برنامه‌نویسِ بازی برای موتور بازی دستورِ حرکتِ شخصیت را(به شرطی که دکمه W فشرده شود) می‌نویسد. در زمان اجرای بازی، به صورت اتوماتیک موتور بازی وظیفه دارد تا در هر لحظه از بازی، ورودی‌ها را بررسی کند تا اگر دکمه W فشرده شد، شخصیت‌مان را به حرکت درآورد. همچنین برای حرکت دادنِ شخصیتِ بازی باید بررسی شود که او به مانعی برخورد نمی‌کند(محاسبات فیزیک) که این کار را موتور فیزیک انجام می‌دهد.در نهایت برای نمایش شخصیت‌مان هم باید موتور گرافیکی دست به کار شود تا پیکسِل (Pixel) به پیکسل تصویر را در نمایشگر نمایش دهد.

برای نمونه، از موتورهای بازی‌سازی مطرح، در دسترس و پرطرفدار می‌توان موتورهای یونیتی(Unity)، آنریِل اِنجین(Unreal Engine)، کِرای اِنجین(CryEngine)، گِیم مِیکِر(Game Maker) و لامبِریارد(Lumberyard) را نام برد که در این مقاله، موتور بازی‌سازی یونیتی به عنوان یکی از پرچم‌داران این عرصه انتخاب شده است.

موتورهای بازی سازی

برخی از موتورهای بازی‌سازی

یونیتی چیست؟

یونیتی یک موتور بازی‌سازی و محیط یکپارچه توسعه(IDE) برای ساخت رسانه‌های تعاملی، به طور خاص بازی‌های رایانه‌ای است. این موتور می‌تواند برای ساخت بازی‌های دوبُعدی، سه‌بُعدی، واقعیت مجازی(VR) و واقعیت افزوده(AR) در صنایع بازی‌سازی، فیلم، خودرو، معماری، مهندسی و ساخت‌وساز استفاده شود. اگر علاقه‌مند هستید اطلاعات بیشتری راجع به موتور بازی‌سازی یونیتی بدانید، مقاله‌ی “بازی‌سازی با یونیتی؛ چرا برای بازی‌سازی یونیتی را انتخاب می‌کنیم؟” را به شما پیشنهاد می‌دهم.

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

یونیتی
یادآوری یک نکته مهم

البته این نکته را هم مدنظر داشته‌باشید که تمام ابزارهایی که در این مقاله معرفی یا پیشنهاد داده می‌شوند، فقط یک ابزار هستند و اگر برای شروع کار به شما پیشنهاد می شوند به این معنی نیست که فقط کار با همان ابزار را یاد بگیرید بلکه به خاطر سادگی که دارند کمک می کنند سریعتر در میدانِ ساخت بازی قرار بگیرید.

بعد از مدتی کار کردن با این ابزارها باید حواستان باشد که در دامِ منطقه ی امنی که این ابزارها برایتان ایجاد می کنند نیافتید. شما باید به این ها فقط به چشم یک ابزار نگاه کنید و اگر روزی لازم شد بتوانید با ابزارهای دیگر کار کنید یا حتی خودتان ابزارِ مناسبِ کارتان را بسازید.

 

اسکریپت نویسی در یونیتی چیست؟

در یونیتی، اسکریپت‌نویسی(scripting) به گِیم‌آبجِکت(GameObject)‌هایمان می‌گوید که چگونه رفتار کنند؛ این اسکریپت‌ها و مؤلفه‌های(component) متصل به گیم‌آبجکت‌ها، و نحوه تعامل آنها با یکدیگر است که باعث ایجاد گِیم‌پِلِیِ(gameplay) شما می‌شود. 

اسکریپت‌نویسی در یونیتی با برنامه‌نویسیِ خالص(pure programming) متفاوت است. اگر برنامه‌نویسیِ خالص انجام داده باشید، به عنوان مثال اگر شما یک برنامه‌ی در حال اجرا ساخته باشید، باید بدانید که در یونیتی نیازی به نوشتنِ کدِ اجرای برنامه ندارید، زیرا یونیتی این کار را برای شما انجام می‌دهد. درعوض، شما در اسکریپت‌های خود روی گیم‌پلی تمرکز می‌کنید.

یک اسکریپت باید به یک گیم‌آبجکتِ در صحنه وصل شود تا توسط یونیتی فراخوانی شود. اسکریپت‌ها به زبانی ویژه نوشته شده‌اند که یونیتی می‌تواند آن را درک کند و از طریق این زبان می‌توانیم با موتورِ بازی(Game Engine) صحبت کنیم و دستورالعمل‌های خود را به آن بسپاریم.

زبانی که در یونیتی استفاده می‌شود سی‌شارپ(#C) نامیده می‌شود. در نسخه‌های قبل‌ترِ یونیتی شما می‌توانستید از بین سی‌شارپ، جاوااسکریپت(Javascript) که به یونیتی‌اسکریپت(UnityScript) هم معروف بود و بوو(Boo) یکی را برای نوشتن کدهای بازیِ خود استفاده کنید. اما از نسخه ۲۰۱۸، یونیتی‌اسکریپت و بوو از یونیتی حذف شدند و تنها زبان سی‌شارپ در یونیتی استفاده می‌شود.

 

چون کمی قبل‌تر یونیتی را به عنوان موتوری که برای شروع بازی‌سازی مناسب‌تر است به شما پیشنهاد دادیم، زبان سی‌شارپ را به عنوان یک زبان برنامه نویسی که برای شروع کار مناسب است، بررسی می‌کنیم. بنابراین لازم است بدانید که با زبان‌های دیگر و ابزارهای دیگر هم میتوان بازی ساخت و بازی‌سازی را آغاز کرد اما ابزارهایی که در این مقاله معرفی می‌شوند، از نظرِ نویسنده برای شروع مناسب‌تر هستند.

سی شارپ در یونیتی
سی شارپ چیست؟

سی‌شارپ(#C) یک زبان شئ‌گرا(object-oriented) برای برنامه نویسی است که کاربردهای زیادی از جمله ساخت نرم‌افزارهای موبایل، نرم‌افزارهای دسکتاپ، نرم‌افزارهای وب، بازی‌ها و موارد متعدد دیگر را دارد.

این زبان توسط شرکت مایکروسافت ساخته شده است که در چارچوب دات‌نِت(NET.) اجرا می‌شود. این زبان بر روی مونو(Mono) اجرا می‌شود و سرعت کامپایل(Compile) بالایی دارد. مونو یک نسخه متن باز از Microsoft .NET است که امکان اجرا بر روی پلتفرم‌های مختلف را دارد.

دلایل زیادی وجود دارد که باعث شده زبان سی‌شارپ یکی از محبوب‌ترین زبان‌های برنامه نویسی در جهان باشد و افراد زیادی به آن علاقه داشته باشند و با آن کار کنند که به چند مورد از آنها اشاره می‌کنیم:

 

1. آسان برای شروع:

 سی‌شارپ یک زبان سطح بالا(high-level) است و به زبان‌های برنامه‌نویسیِ محبوب مانند ++C، C و Java نزدیک‌تر است که باعث می‌شود یادگیری آن برای هر کسی آسان و استفاده از آن بسیار ساده باشد.

 

2. استفاده‌ی گسترده برای توسعه‌ی برنامه‌های دسکتاپ، وب و موبایل:

سی‌شارپ به طور گسترده برای توسعه برنامه‌های وب و برنامه‌های دسکتاپ و موبایل استفاده می‌شود.

 

3. پشتیبانی عظیم جامعه(community support) :

هرچه جامعه‌ی(community) استفاده‌کنندگان از یک زبان برنامه نویسی بزرگ‌تر باشد، به این معنی است که افراد بیشتری از آن استفاده می‌کنند، پشتیبانی می‌کنند و بنابراین ابزارها و نرم افزارهای جدید برای پیشرفت آن توسعه داده می‌شود. سی‌شارپ جامعه بزرگی دارد که باعث می‌شود همواره بروز باشد و منقرض نشود.

 

4. توسعه بازی:

سی‌شارپ به طور گسترده‌ای در بازی‌سازی استفاده می‌شود. سی‌شارپ مخاطب هدفِ زیادی دارد و ویژگی‌های آن مانند جمع‌آوری زباله‌های اتوماتیک(Automatic Garbage Collection) ، رابط‌ها(interfaces) ، شئ‌گرایی(object-oriented) و ویژگی‌های منحصر به فرد دیگر باعث می‌شود سی‌شارپ یک زبان محبوب برای توسعه بازی باشد.

همچنین این نکته که یکی از مهمترین و معروف‌ترین موتورهای ساخت بازی در جهان یعنی موتور بازی‌سازی یونیتی(Unity) از این زبان برای اسکریپت‌نویسی استفاده می‌کند نیز از مهترین دلایل محبوبیتِ آن در بازی‌سازی است.

نمونه‌ای از یک قطعه کد در زبان سی‌شارپ :

 

// C# program to print Hello Bazi Saz Bash

using System;

 

namespace BaziSazBash

{

    class HelloBaziSazBash

    {

        // Main function

        static void Main(string[] args)

        {

            // Printing Hello Bazi Saz Bash

            Console.WriteLine(“Hello Bazi Saz Bash”);

            Console.ReadKey();

        }

    }

}

آیا دانستن زبان برنامه‌نویسی کافیست؟

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

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

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

بنابراین زبان برنامه نویسی فقط یک ابزار است و برای استفاده از آن باید دانش برنامه نویسی را هم به کار گرفت.

با این حساب، برای برنامه‌نویس شدن به غیر از دانستنِ یک زبان برنامه نویسی چه چیزهای دیگری باید یاد گرفت؟

دانش برنامه‌نویسی

برای اینکه یک برنامه‌نویسِ خوب باشیم، لازم است که درباره‌ی عناوین مختلفی اطلاعات کسب کنیم. کسب اطلاعات درباره‌ی سرفصل‌هایی از علوم کامپیوتر(Computer science) مثل الگوریتم‌ها(Algorithms) و ساختار داده‌ها(Data structures)، الگوهای طراحی(Design patterns)، مفاهیم شبکه، پایگاه داده(Data Base)، چگونگی نوشتن کدِ تمیز، ریاضیات و مواردی از این دست.
شاید با خودتان فکر کنید خیلی زیاد است؛ اما باید به این نکته توجه کنید که لازم نیست تمام این موارد را در ابتدا و کامل یاد بگیرید، بلکه باید به صورت پیوسته و مداوم یادگیری را ادامه دهید تا کم کم در برنامه نویسی بازی استادی(Mastery) پیدا کنید.

در این رابطه مقاله‌ی «در ده سال به خودتان برنامه نویسی یاد بدهید»( Teach Yourself Programming in Ten Years) دید بسیار خوبی به شما می‌دهد. نویسنده این مقاله به تحقیقی درباره یادگیری اشاره می‌کند و می‌گوید برای استادشدن در هر چیزی، چه ورزش، چه هنر یا برنامه نویسی به ده سال زمان احتیاج است! و خیلی نکات مفید دیگر که خواندنش را توصیه می‌کنم(لینک ترجمه فارسی هم کنار مقاله موجود است).

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

 

ما در مجموعه بازی ساز باش در این مسیر کنار شما هستیم و تمام سعی خود را می‌کنیم تا در کسب دانش لازم برای برنامه نویسی بازی شما را هدایت کنیم.

معرفی چند کتاب مفید برای بالابردن دانش و مهارت برنامه نویسیِ بازی

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

1. Game Engine Architecture – Jason Gregory
کتاب Game-Engine-Architecture

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

2. Game Programming Patterns – Robert Nystrom

کتاب Game-Programming-Patterns

در این کتاب از الگوهای طراحی برنامه نویسی(Programming Design Patterns) که مطرح هستند، مواردی را که در بازی‌سازی کاربرد دارند انتخاب شده و با مثال‌های کاملا مرتبط با بازی‌سازی توضیح داده شده و پیاده‌سازی آن‌ها انجام شده است. همچنین مطالعه این کتاب به شما کمک می کند که با واژگان تخصصیِ بیشتری آشنا شوید، کاربرد آن ها را یادبگیرید و مهارتِ حل مساله‌تان را ارتقا دهید.

3. Mastering Unity Scripting – Alan Thorn

کتاب Mastering-Unity-Scripting

اگر اسکریپت‌نویسی را شروع کردید اما تجربه‌ی زیادی از اسکریپت‌نویسی در یونیتی به زبان سی‌شارپ ندارید، این کتاب به شما کمک می‌کند تا در این زمینه عمیق‌تر شوید. طبیعتا این کتاب برای افرادی که تازه‌کار هستند و با برنامه نویسی آشنایی ندارند پیشنهاد نمی‌شود. برای افرادی که به تازگی می‌خواهند برنامه نویسی بازی را آغاز کنند، دوره‌های پروژه‌محورِ یونیتی که در قسمت آموزشی سایت یونیتی قرار دارند پیشنهاد می‌شود.

یک نکته مهم؛

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

جمع بندی

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

برای برنامه نویسی بازی نیاز به یک موتور ساخت بازی داریم که گزینه‌های مختلفی برایمان وجود دارد. اما یکی از محبوب‌ترین و مناسب‌ترین گزینه‌ها برای شروع بازی‌سازی موتور بازی‌سازی یونیتی است که با زبان سی‌شارپ میتوان در آن برنامه نویسی(در واقع اسکریپت‌نویسی!) کرد.

برای برنامه‌نویس شدن باید این نکته را درنظر گرفت که چیزهای مختلفی باید بدانیم. اطلاعاتی نظیر الگوریتم‌ها، ساختار داده‌ها، الگوهای طراحی، مفاهیم شبکه، پایگاه داده، چگونگی نوشتن کدِ تمیز، ریاضیات و مواردی از این دست که باید آهسته و پیوسته در مورد آن‌ها آموخت و از آن‌ها استفاده کرد. باید به خاطر داشته باشیم که برای استادشدن در برنامه نویسی بازی(یا هر رشته‌ی دیگری) حداقل 10 سال وقت برای تمرین و یادگیری لازم است و نباید عجله داشت.

اگر در ابتدای راه هستید، پیشنهاد میکنم برنامه نویسی برای بازی‌سازی را به صورت تمرین‌محور با استفاده از دوره‌هایی که به صورت پروژه‌ای آموزش می دهند آغاز کنید و سعی کنید در کنار آن کتاب‌های مرجع در این رشته را مطالعه کنید.

محصولات مرتبط

16 دیدگاه برای “برنامه نویسی بازی چیست؟ از کجا شروع کنیم؟

    • امیر نظری گفته:

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

  1. حسین گفته:

    سلام، ممنون از مقاله خوبتون،
    مواردی که گفتین برای برنامه نویس شدن مثل الگوریتم‌ها، ساختار داده‌ها، الگوهای طراحی، مفاهیم شبکه، پایگاه داده، چگونگی نوشتن کدِ تمیز، ریاضیات …. لازمه، چطور و از کجا میشه یاد گرفت؟

    • مهدی صدری گفته:

      سلام دوست عزیز
      ممنون که نظرت رو به اشتراک گذاشتی.

      بله، مواردی که ذکر کردی، برای حرفه‌ای شدن در برنامه‌نویسی لازمه.

      برخی از موارد رو در دوره اسکریپت‌نویسی بهش پرداختیم.

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

  2. مهرداد گفته:

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

    • مهدی صدری گفته:

      سلام دوست عزیز؛

      ممنون که همراهمون هستید.

      خوشحالم که این مقاله مورد پسندتون هست.

      در مورد سوال‌تون؛
      هیچ کاری، نشد نداره. قطعا میتونین تو تمام این زمینه‌ها وارد بشید و دانش‌تون رو بالا ببرید و تجربه کسب کنین. فقط یک نکته‌ی بسیار مهم رو باید در نظر داشته باشید، اینکه در تمام تصمیم‌گیری‌هاتون باید دو پارامتر رو لحاظ کنید:
      1) هدف و اولویت
      2) زمان

      طبیعتا عمر و زمان ما محدود هست. بنابراین باید طبق اولویت‌هامون برنامه‌ریزی داشته باشیم.

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

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

      در مثال اول اولویت شما بازی‌سازی مستقل میشه و در مثال دوم برنامه‌نویسی.

      درنهایت، اینکه هدف شما دقیقا چیه اولویت‌تون رو مشخص میکنه و با توجه به زمانی که میتونین براش بزارین معلوم میشه باید در چه زمینه‌هایی و تا چه حد متخصص بشید.

      • مهرداد گفته:

        بسیار متشکرم از پاسخگویی تون بله هدف من بازی سازی مستقل هست فقط اینکه با توجه به دیدن این همه شاخه در تمام مباحث بازی سازی کمی دلهره دارم نه بابت فرا گیری آنها که چرا کمی دارم درمورد زمان ولی اصلش درمورد جمع کردن تیم هست چون من 16 سالمه و واقعا نمی دونم چجوری تیمی رو پیدا کنم هم از نظر سن که ممکنه از من همه بزرگتر باشند و یا اصلا منو حساب نکنند ولی سعیم رو میکنم.
        یه سوال با توجه به اینکه دارم بازی سازی مستقل رو شروع میکنمو باید در همه زمینه ها دستی داشته باشم بغیر از آموزش یونیتی شما آموزش مباحث برنامه نویسی سی شارپ در یونیتی و طراحی محیط و آرت و ….. رو میشه پیشنهاد بدین که کجا آموزش ببینم و اینکه کدومو اول یاد بگیرم به ترتیب و متوسط زمان یادگیری هر کدوم چقدر هست؟
        البته میدونم که زمانش زیاده و خیلی از قضیه پرت نیستم و واقعا به این موضوع علاقه دارم.ممنون و با تشکر

        • مهدی صدری گفته:

          سلام

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

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

          برای اینکه اطلاعات بهتر و بیشتری درباره این موارد به دست بیارید و پاسخ سوالات‌تون رو بگیرید پیشنهاد میکنم در مینی دوره رایگان بازی‌سازی که در حال برگزاری هست شرکت کنید. مطالب فوق‌العاده‌ای قراره به اشتراک گذاشته بشه که مخصوصا برای افرادی که در ابتدای راه هستن میتونه بسیار مفید باشه.
          برای شرکت کردن تو این مینی دوره رایگان میتونید فرم ثبت نام رو پر کنید و پیج اینستاگرام بازی‌سازباش رو دنبال کنید:
          http://zood.link/bsblive

          آدرس پیج اینستاگرام بازی‌سازباش:
          https://www.instagram.com/bazisazbash/

  3. فرهاد گفته:

    خیلی ممنونم اول فکر کردم زیاده نخونم ولی چون دیدم جذابه و اموزنده تا اخرش خوندم و خوشحال هستم که کامل خوندم مرسی از شما که متفاوت از همه مطالب میزارین

    • سید احمد داداش‌نژاد گفته:

      سلام دوست عزیز.

      ما هم از شما ممنونیم که مقاله رو خوندین و بیشتر ممنون هستیم که نظر دادین و این موضوع خیلی برای ما ارزشمند هست که همراهمون هستید.

      تمام سعی ما این هست اطلاعات خوبی که تجربه ما هم تاییدش می‌کنه در اختیارتون قرار بدیم و حجم زیاد مطالب حتماََ دلیلی داره.

      همراهتون هستیم.

    • مهدی صدری گفته:

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

      با ما همراه باشید.

    • سید احمد داداش‌نژاد گفته:

      سلام

      ممنون که همراهمون هستید.

      ما به شما منابع رو معرفی می‌کنیم و عمدتاََ این مطالب با یک سرچ در اینترنت پیدا میشن.

      اگر باز هم نتونستید کتاب‌ها رو پیدا کنید از راه زیر می‌تونید پیگیری کنید چرا که نمیشه کپی کتاب‌ها رو به صورت مستقیم برای دانلود قرار داد:

      از قسمت “پشتیبانی” که در منوی بالای صفحه قابل مشاهده هست روی دکمه “ارسال تیکت به پشتیبانی بازی‌سازباش” کلیک کنید و بعد از بخش “موارد دیگر” اقدام به ارسال تیکت و پیگیری موضوع کنید.

      موفق باشید.

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

نشانی ایمیل شما منتشر نخواهد شد.

اگه هنوز برای شروع برنامه‌نویسی بازی شک دارید هدیه‌ای برایتان داریم:
دانلود رایگان کتاب ورود به دنیای برنامه‌نویسی بازی
اسکریپت‌نویسی در یونیتی را از همین الآن شروع کنید.
ایمیل خود را وارد کنید تا کتاب به ایمیل شما ارسال شود
دریافت کتاب
close-link