چگونه ساخت یک موتور طراحی بازی را شروع کنیم؟

Mahdi_Rashed

Well-Known Member
چند نفر از دوستانم درحال برنامه نویسی موتور طراحی بازی هستند و بعضی هم قصد دارن که شروع کنن. ولی تقریباً همه اونها اشتباه شروع میکنن. منظور از شروع یک پروژه موتور طراحی بهترین روش طراحی بخشهای جداگانه موتور طراحی بازی هست تا در آخر مشکلاتی مثل نا هم خوانی بخشهای موتور با هم یا بروز مشکلات برنامه نویسی پیش نیاد. البته برای شروع هر پروژه باید اول ایده ها جمع آوری و بهترین ایده انتخاب بشه . همچنین روشها یا متدهای برنامه نویسی و ... . ولی بعد از پشت سر گذاشتن این مراحل باید چه کار کرد ؟

طبق بسیاری از کتابهای آموزش ساخت موتور طراحی و سیستمهای گرافیک 4 روش برای شروع ساخت یک موتور طراحی بازی وجود داره که هریک مراحل آغاز پروژه رو توضیح داده.

روشها عبارتند از:

  1. روش Proper Programming Method
  2. روش UI-Based Programming
  3. روش Framework Programming
  4. روش Core-Based Programming یا Kernel-Based Programming
هر یک از این روشها در ابتدا دارای طراحی یک الگریتم و روند پیشروی یکشکل هستند ولی اصل روش شروع کار عملی و برنامه نویسی ساخت موتور طراحی بازی هست. هر یک از این روشها رو در یک پست جداگانه توضیح خواهم داد. :green:

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

Mahdi_Rashed

Well-Known Member
روش Proper Programming Method :

Proper Programming Method یا مناسبترین روش برنامه نویسی اولین روش شروع ساخت یک موتور طراحی بازی است . Proper Programming Method یعنی ترکیب چند متد مختلف که با هم تشکیل یک متد برنامه نویسی مناسب رو میدن و یا ابدای یک روش برنامه نویسی که برای کار پروژه مناسب باشه. یک متد برنامه نویسی وقتی مناسب گفته میشه که دارای خصوصیاتی مانند سرعت کامپایل بالا یا نسبتاً خوب باشه، آموزش اون به افراد دیگه آسان باشه، قابلیت استفاده در تمامی بخشهای موتور رو داشته باشه، قابلیت بروزرسانی هسته موتور رو داشته باشه و از همه مهمتر قابلیت تعریف زبان اسکریپت مخصوص یک موتور رو هم داشته باشه. درحال حاظر تعداد بسیار بسیار زیادی متد برنامه نویسی برای هر زبان برنامه نویسی حالا چه به صورت عمومی یا به صورت خصوصی ابدا شده که هر یک برای یک بخش از برنامه نویسی نرم افزاری مناسب هست ولی تعداد متدهایی که برای همه بخشهای برنامه نویسی نرم افزار وجود داره بسیار کم و انگشت شمار است. منظور همه بخشها در برنامه نویسی نرم افزاری یعنی مثلاً برنامه نویسی موتور طراحی بازی، نرم افزار نمایش عکس یا پخش صدا و ... . البته متدهایی که همه بخشهای برنامه نویسی نرم افزاری رو پوشش میدن بسیار مشکل هستن و یادگیری و استفاده از اونها نیازمند یک گروه چند نفره هست.

در زبان برنامه نویسی C# و C#.net متد های زیادی وجود داره که مناسب ترین اون برای کار برنامه نویسی سیستمهای گرافیک و از جمله موتورهای طراحی بازی C# Advanced هست که معمولاً پکیج 2005 اون با همه نسخه های Visual Studio منتشر میشه ولی در حال حاظر دو پکیج اساسی دیگه که 2008 و 2010 هم هست به صورت standalone منتشر شده که البته رایگان نیست ولی گرون هم نیست . 2008 اون 590 دلار و 2010 620 دلار هست که لایسنس اونها مادامالعمره . من نسخه اصلی اون رو دارم و استفاده میکنم ولی تاجایی که یادمه نتونستم نسخه های وارز و غیر قانونی رو پیدا کنم که ناچار شدم بخرم. حتی روی شبکه بیت تورنت هم نبود.

در روش Proper Programming Method مراحل کار پروژه و برنامه نویسی یک موتور طراحی بازی استاندارد به شکل زیر تعریف شده:


  1. ترکیب چند متد برنامه نویسی یا ابدای یک متد به عنوان متد برنامه نویسی موتور طراحی بازی.
  2. آموزش متد طراحی شده یا ترکیب شده به افرادی که در ایجاد ان نقشی نداشته اند ولی در طراحی موتور بازی نقش دارند.
  3. طراحی یک framework بر اساس متد جدید یا استفاده از یک framework آماده که متد را قبول کند ( Visual Studio تقریباً همه متد ها را قبول میکند )
  4. طراحی هسته موتور با متد مورد نظر
  5. طراحی Database برای داده ها و اطلاعات موتور و بازی یا همسان سازی سیستمهای متن باز با هسته موتور.
  6. طراحی In-game console یا command panel درون بازی.
  7. طراحی زبان اسکریپت نویسی برای موتور طراحی بازی.
  8. طراحی سیستم مدیریت صحنه یا scene management .
  9. طراحی سیستم های زنجیره ای مانند مدیریت مرحله و ...
  10. طراحی سیستم گرافیک که شامل نورپردازی، رندر تکسچر، رندر Shader و ... است و یا همسان سازی سیستمهای متن باز با هسته موتور.
  11. طراحی سیستم پخش صدا و موسیقی یا همسان سازی سیستمهای متن باز با هسته موتور.
  12. طراحی سیستم هوش مصنوعی یا یا همسان سازی سیستمهای متن باز با هسته موتور.
  13. اضافه کردن بخشهایی که ایده طراحان بوده ( بخشهای اضافی موتور)
  14. طراحی سیستم پذیرش پلاگین در صورت نیاز.
  15. فقط طراحی رابط کاربر یا .User Interface
  16. برنامه نویسی رابط کاربر و متصل کردن و همسان سازی بخشهای موتور به هسته و رابط کاربر.
  17. پیکربندی و برنامه نویسی یک سیستم محافظ برای سورس اصلی موتور.
  18. پیکربندی و برنامه نویسی یک سیستم محافظ برای لایسنس کاربری موتور. ( اگر موتور رایگان عرضه نمیشود ).
  19. بهینه سازی همه بخشهای موتور و رفع مشکلات احتمالی.
  20. کامپایل نهایی موتور برای استفاده در رایانه های دیگر.
  21. تست نسخه Beta.
  22. رفع اشکالات احتمالی
  23. تست نسخه نهایی.
  24. کارهایی از قبیل طراحی Help برای موتور ، نمونه ، لوگو و...
  25. طراحی SDK اگرسیستم پذیرش پلاگین را طراحی کرده اید.
  26. فروش و طراحی بازی.
 

Mahdi_Rashed

Well-Known Member
روش UI-Based Programming:

UI-Based Programming یک متد برای اون دسته از طراحان و برنامه نویسایی هست که قصد دارن پروژه خودشون رو به روشهای متن باز codex تکمیل کنن. یعنی ایده و رابط کاربر و برخی از بخشهای مهم رو طراحی و برنامه نویسی کنن و پروژه رو با توضیحات در یک سایت نگه دارنده codex ها قرار بدن . سپس افراد زیادی هستن که ممکنه بخشی از پروژه رو طراحی کنن و از منابع متن باز برای تکمیل پروژه شما استفاده کنند. این روش دارای دو مرحله اصلی هست که اول طراحی هسته و سیستم موتور و دوم طراحی رابط کاربری است . بعد از این دومرحله شما باید پروژه رو در اختیار توسعه دهندگان قرار بدین تا با توسعه دادن هر بخش توسط یک فرد یک موتور طراحی بازی داشته باشید. پروژه های Open Source Codex یا پروژه های Open Source یک فرق اساسی دارن و اون اینکه که پروژه های Open Source بدون توسعه قابل استفاده هستن و فقط نیاز مند یک کامپایل اساسی هستن ولی پروژه های Open Source Codex باید کامل توسعه داده بشن تا آماده طراحی بشن . موتورهای گرافیکی شبیه Panda و Ogre3D ابتدا به شکل پروژه Open Source Codex بودن که پس از کامل شدن به یک پروژه متن باز قابل استفاده تبدیل شدند.
 

Mahdi_Rashed

Well-Known Member
روش Framework Programming:

Framework Programming یکی از روشهای خوب برای طراحی یک موتور طراحی بازی هست البته به شرطی که با روشهای دیگر هم ترکیب بشود . Framework Programming اینطور تعریف میشه که شما با استفاده از متد برنامه نویسی هر زبان برنامه نویسی که مورد نظرتون هست یک Framework مخصوص طراحی و برنامه نویسی میکنید که استانداردهای لازم برای استفاده از یک سیستم گرافیک شبیه DirectX رو داشته باشه . بعد از اون پروژه دقیقاً شبیه متد Proper Programming Method پیش میره ولی با استفاده از متد استاندارد برنامه نویسی هر زبان برنامه نویسی و بر پایه Framework طراحی شده توسط شما. این روش اگر به صورت کلی در یک پروژه استفاده بشه چند ضعف بزرگ سیستم برنامه نویسی استاندارد رو به شما نشون میده و شما رو وادار به استفاده از روشهای طراحی موتور بازی دیگه به عنوان روشهای ترکیبی میکنه . از ضعفهایی که متدهای برنامه نویسی استاندارد هر زبان برنامه نویسی دارن مخصوصاً در بخش برنامه نویسی گرافیک و سیستم گرافیک، عدم توانایی خلق برنامه های اضافی برای بهبود کیفیت مثلاً سیستم رندرینگ یا نورپردازی یا سایه زنی است. یکی دیگر از ضعفها وجود باگهای فراوان بسته اصلی برنامه نویسی هست که معمولاً باید طی چندین و چند مرحله تست حل و تعمیر بشن. مهمترین ضعف هم نیاز تغییر جامع و کلی سیستم در صورت تغییر ورژن هسته سیستم گرافیک یعنی همون DirectX یا برخی مواقع Open GL و ... است . فرق متد استاندارد برنامه نویسی DirectX 9 با وروژن بالاترش یعنی 10 انقدر زیاد هست که تغییر سیستم موتور طراحی بازی از DirectX 9 به 10 مثل برنامه نویسی یک موتور طراحی بازی جدید هست. به همین دلیل هست که متدهای استاندارد زبان برنامه نویسی که همه کتابها به همون روش آموزش دادن بیشتر به درد ساخت نرم افزارهای کوچک . بزرگ تحت ویندوز میخوره و قدرت پشتیبانی از یک موتور طراحی بازی به صورت تنها رو نداره .
 

Mahdi_Rashed

Well-Known Member
روش Core-Based Programming یا Kernel-Based Programming:

روش Core-Based Programming یا Kernel-Based Programming یکی از روشهای مورد علاقه برای برنامه نویسان منابع متن باز هست. Kernel-Based Programming در واقع برنامه نویسی کلی هسته موتور طراحی بازی به شیوه ای است که بعداً بتوان آن را توسعه داد. و توسعه دهنده نیز فرد دیگری هست. پس متد برنامه نویسی باید متد استاندارد برای هر زبان برنامه نویسی باشه. طراحی با روش Kernel-Based Programming بیشتر با زبان C و C++ انجام میشه چون اکثر توسعه دهندگان منابع متن باز این دو زبان رو به عنوان زبان استاندارد انتخاب میکنند. در مراحل طراحی یک موتور طراحی بازی به روش Kernel-Based Programming نباید به فکر طراحی یک Framework بیفتید چون با طراحی یک Framework اولاً روشی که استفاده کرده اید فقط Kernel-Based Programming نیست و دوماً متد برنامه نویسی شما ممکن است از حالت متد برنامه نویسی استاندارد یک زبان برنامه نویسی خارج شود . باید یادآوری کنم که Kernel-Based Programming به تنهایی برای طراحی یک موتور بازی متنباز مناسب است ولی اگر Kernel-Based Programming با روشهای دیگه به کار گرفته بشه دیگه برای یک منبع متن باز استاندارد مناسب نیست و افرادی زیادی نمیتونن اون رو توسعه بدن. پس اولین مرحله به جای ساخت یک متد جدید یا یک framework ، طراحی هسته موتور طراحی بازی هست و بعد از اون میتونید مطابق روش Proper Programming Method عمل کنید به شرطی که Kernel-Based Programming رو به یک روش ترکیبی تبدیل نکنه یعنی اگر هر یک بخشها باید طوری برنامه نویسی میشد که از متد برنامه نویسی استاندارد خارج میشد یا باید اون بخش رو حذف کنین ( پیشنهاد نمیشه ) یا اینکه سعی کنید با متد استاندارد طراحیش کنید حالا ممکنه هست که ناچار به حذف یا تغییر کاربر برخی از بخشهای اون بشید. در ضمن نوشتن سیستمهای محافظ و SDK نیاز نیست چون اولاً یک منبع متن باز باید رایگان باشه و دوماً منبع متن باز خودش یک SDK هست.
 
واقعا تبریک میگم.بحث خیلی خوبی رو شروع کردی.برای ما که هیچ اطلاعاتی در مورد ساخت انجین نداریم میتونه یه امتیاز خوب باشه.
میخواستم چندتا سوال بپرسم.اول اینکه میشه هسته موتور رو با c# نوشت.ایا واقعا سرعت c# اونقدر نصبت به c++ پایین هست که برای نوشتن هسته موتور پیشنهاد نمیشه.
برای نوشتن موتور ها میشه از تکنولوژی .net استفاده کرد.یعنی ما یه هسته مرکزی داشته باشیم و هر کس با هر زبانی که .net پشتیبانی میکنه برای موتور کد بنویسه.
با وجود منابع اموزشی کم و بروز نبود کتاب در مورد dx خود شما از کجا شروع کردید.
من خیلی دوست دارم یاد بگیرم ولی نه یه کتاب به روز در مورد dx هست و نه یه کتاب در مورد api win32 و من واقعا نمیدونم از کجا شروع کنم.
اگه میشه در مورد پایه کار و شروع بیشتر توضیح بده.فکر کنم تاپیک پر طرفداری بشه.
 

Mahdi_Rashed

Well-Known Member
کتابایی که من باهاشون شروع کردم اینا هستن.

Advanced 3D game programming all in one
Game testing All in one
beginning Direct 3D programming 2nd edition
Game & Game Interface Design
3D Game Engine programming
Introduction to 3d Game Engines

اینا بر پایه C++ و گاهی هم C سیستم directX رو توضیح دادن. ولی همونطور که قبلاً هم گفته بودم

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


من موتور طراحی بازی Main Core رو به صورت کامل با C# نوشتم البته با نسخه های Advanced که برای برنامه نویسی گرافیک ساخته شده . از دید من و مقایسه هایی که انجام دادم C# در بیشتر مواقع مخصوصاً خلق تکنولوژی های جدید از C++ پیشی میگیره ولی خوب باز هم هردو زبان مناسب ساخت game Engine هستن و مهم این هست که فرد کدوم رو بهتر بلد باشه . C# و C#.net کلاً یکی از بخشهای نسخه های C# Adv هستن. خود هسته موتور شاید با دات نت ها نوشته نشن ولی استفاده اون در طراحی Base نرم افزاری موتور ضروریه.
 
دادا اخر این سوالم رو جواب ندادی.
اول اینکه میشه هسته موتور رو با c# نوشت.ایا واقعا سرعت c# اونقدر نسبت به c++ پایین هست که برای نوشتن هسته موتور پیشنهاد نمیشه.

چون منبع فارسی در مورد win32 api وجود نداره میخوام برم سراغ c# و بعد هم برم برنامه نویسی دایرکت ایکس با c#.
شما هم اگه بیشه بحث تون رو ادامه بدید.و تجربیاتتون رو به ما منتقل کنید.
شما موتورتون رو برای دانلود نمیزارید؟(برای تست)
 

Mahdi_Rashed

Well-Known Member
اول اینکه میشه هسته موتور رو با c# نوشت.ایا واقعا سرعت c# اونقدر نسبت به c++ پایین هست که برای نوشتن هسته موتور پیشنهاد نمیشه.

گفتم که از دید من C# خیلی بهتر از C++ هست و من پایینی سرعت رو احساس نمیکنم . به شما هم پیشنهاد میکنم که برای نوشتن موتور طراحی بازی از طریق زبان C# یک framework طراحی کنید و از طریق اون یک موتور طراحی بازی بسازید . من هم این کار رو کردم و واقعاً نتایج خوبی گرفتم . استفاده از C++ هم خوبه ولی C# خیلی سطح وسیعی رو پوشش میده . از دید سرعت من جاهایی خوندم که C# سرعت پایینتری داره نسبت به C++ ولی من این رو قبول ندارم چون در مقایسه هایی که خودم انجام دادم C# هم سرعت بیشتری داره و هم آسونتر و بهتره.

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

موتور طراحی بازی Main Core رایگان نیست و نسخه تستی رو براش طراحی نکردیم . به همین دلیل هست که نمیتونم برای دانلود قرار بدم . در حال حاظر داریم روی نسخه 1.2 کار میکنیم که اگر بتونیم یک سری از محدودیت ها رو حل بکنیم یک نسخه Sandbox رایگان و محدود برای دانلود قرار میدیم.

موفق باشید:rose:
 

Mahdi_Rashed

Well-Known Member
اصول استفاده از روشهای ترکیبی:

اگر قصد استفاده از چند روش رو دارین باید به مواردی دقت کنید وگر ممکنه که خروجی شما به درستی کار نکنه. هر موتور طراحی بازی به طور کلی باید دارای یک هسته و یک سیستم گرافیک برای رندرینگ رئال تایم باشه در غیر این صورت حتی با داشتن بقیه بخشهای یک موتور نمیتونه کار بکنه . پس در استفاده از روشهای ترکیبی باید یک روش که Base اون هسته و سیستم گرافیک باشه رو به عنوان روش پایه یا مادر انتخاب کنید. در مرحله بعد باید با توجه به این که محصول نهایی شما رایگان و متن باز و یا غیر رایگان است باید روشی را انتخاب کنید که در اون سیستم های متن باز ملاک باشد در غیر این صورت روشی باید انتخاب کنید که ملاک آن نوشتن سیستم حفاظت و کیت توسعه نرم افزار یا SDK باشد. در استفاده از روشهای ترکیبی معمولاً مرحله اول و دوم ملاکی برای بقیه مراحل است که انتخاب آنها به خصوصیات موتور و ابزارهای جانبی اون مرتبت میشه . البته مد نظر داشته باشید که چهار روشی که در پستهای قبل ذکر شد فقط چهار روش که روشهای مهم در طراحی موتور بازی است وگر نه تعداد روشها بسیار بسیار زیاد هست و حتی خود شما میتوانید یک روش انتکاری ابدا کنید ولی در ساخت یک روش جدید همیشه این رو در نظر بگیرین که بسته به نوع موتور اول هسته و framework را طراحی و بعد از این دو بخش شروع به طراحی بخشهای دیگر موتور کنید. همچنین در انتخاب متد برنامه نویسی در ترکیب روشها یا ابدای یک روش جدید نهایت دقت رو به کار ببرید چون اگر متدی را اشتباهی انتخاب کرده و تا وسط کار پیش برید بعد دیگه امکان عوض کردن متد یا به اصطلاح multimethod کردن پروژه عاقلانه نیست چون همیشه بخشهایی هست که دو متد جداگانه نمیتونن با هم تبادل انجام بدن و حتی برخی مواقع بوده که ضد هم کار میکنن. یعنی مثلاً متد اول یک دستور رو به هسته موتور میفرسته و متد دوم همون دستور رو از هسته موتور حذف میکنه قبل از این که حتی پردازش بشه .
 

Mahdi_Rashed

Well-Known Member
یک کتاب جدید درباره ساختار پایگاههای داده در موتورهای طراحی بازی خریداری کردم و مشغول خوندن هستم و قسمتهای مهم رو بعد از ترجمه قرار خواهم داد . پس منتظر باشید :wink:
 

Mahdi_Rashed

Well-Known Member
بخش بعدی روند طراحی یک پایگاه داده برای موتور طراحی بازی است. اول سوال اینجاست که پایگاه داده چیست؟

پایگاه داده در موتورهای طراحی بازی نگه دارنده سه بخش مهم در روند اجرای بازیها هستن. بخش نگه دارنده داده های مقداری، بخش نگه دارنده داده های پایه و بخش نگه دارنده سورس بازی. داده های مقداری داده هایی اغلب به صورت اعداد یا Hex ها هستن که اطلاعاتی مانند مختصات و مقیاس و ... را که مربوط به نحوه اجرای trigger ها و دستورات میان بازی هست را شامل میشوند. داده های پایه کلیه داده هایی هستند که موتورطراحی بازی بعد از عملیات Compile بازی به صورت کلی آنها در در بخشی خاص از پایگاه داده ذخیره میکند تا در هنگام اجرای بازی مورد استفاده قرار بگیرند . این داده های به این دلیل پایه نام گرفتند چون بازیهایی که روی یک موتور طراحی بازی خاص ساخته شده اند برای اجرا به این داده ها نیازمندند . داده های پایه از هر موتور طراحی بازی تا هر سبک طراحی بازی متفاوتند و معمولاً برای بخش نگهدارنده آنها سیستم امنیتی جداگانه ای طراحی میشود. سروس بازی یعنی کلیه عناصر 2بعدی و 3 بعدی مورد استفاده در یک بازی که توسط طراحان در محیط بازی یا کاراکتر ها یا هر شی موجود در بازی استفاده شده . پایگاه داده پس از دریافت این سورس ها بر طبق اصولی که با آن پایگاه داده را طراحی کردند . الگوریتمهایی که برای آن نوشته اند عمل فشرده سازی در حد ممکن را بر روی سورس بازی اعمال میکند . تا حد ممکن یعنی تا جایی حجم آن را کم میکنند تا سرعت Unpack کردن آنها در بازی چه به صورت Real-time unpacking یا full unpacking از حد مجاز بیشتر نشده و معمولاً حد مجاز به صورت یک متغیر قبل از فشرده سازی توسط طراح قابل تغییر است .

طبق تعاریف ارائه شده در سال 2010 در صنعت راحی بازی 4 نوع پایگاه داده اصلی داریم:


  1. Open Source Database
  2. Open File Database
  3. Regular Database
  4. Secure Database
در پستهای آینده ساختار هر یک از این انواع پایگاه داده ها را ذکر میکنم و اول باید ترجمه بشه:green:
 

amir.nemati63

کاربر VIP
آقای Mahdi_Rashed عزیز.
به وجود دکمه ی تشکر واقفم!
ولی دیشب که کل تاپیکهای این انجمن رو از اول تا اخر خوندم و بدلیل تاریخ نوشته ها نتونستم پاسخ بذارم، تاریخ به روز این نوشته رو غنیمت شمردم و خواستم از شما تشکر کنم.
دیشب با وجود شما به ایرانی بودن خودم افتخار کردم.
امیدوارم راهی رو که در پیش گرفتین به خوبی ادامه بدین.
من خیلی به ساخت بازی علاقه دارم در زمینه های مرتبط به غیر از برنامه نویسی هم فعالیت داشتم.
امیدوارم قسمتی از اموزشها و مطالبتون مربوط به ساخت بازی برای افراد مبتدی و با تکیه بر برنامه نویسی اون باشه.
چون به نظرم مسائل دیگه ی اون رو میشه به صورت تقریبا مرتبط توی انجمن های دیگه پیدا کرد.
براتون آرزوی موفقیت میکنم .
اگر این نوشته ی من نظم تاپیکتون رو بهم میزنه معذرت خواهی میکنم و خواهش میکنم پاکش کنین.
 

Mahdi_Rashed

Well-Known Member
آقای Mahdi_Rashed عزیز.
به وجود دکمه ی تشکر واقفم!
ولی دیشب که کل تاپیکهای این انجمن رو از اول تا اخر خوندم و بدلیل تاریخ نوشته ها نتونستم پاسخ بذارم، تاریخ به روز این نوشته رو غنیمت شمردم و خواستم از شما تشکر کنم.
دیشب با وجود شما به ایرانی بودن خودم افتخار کردم.
امیدوارم راهی رو که در پیش گرفتین به خوبی ادامه بدین.
شما لطف دارین . من هم امیدوارم که بتونم به موقع ایت تاپیک رو به روز کنم با مطالب جدید و مفید.

من خیلی به ساخت بازی علاقه دارم در زمینه های مرتبط به غیر از برنامه نویسی هم فعالیت داشتم.
امیدوارم قسمتی از اموزشها و مطالبتون مربوط به ساخت بازی برای افراد مبتدی و با تکیه بر برنامه نویسی اون باشه.
من هم اول خیلی به برنامه نویسی علاقه نداشتم چون واقعاً کار سختیه ولی وقتی که شروع کردم دیدم ترکیب گرافیک مخصوصاً real-time با برنامه نویسی کلاً یک مفهوم دیگه میشه و کیفیت کار رو از خیلی از رندر های software بیشتر میکنه و برای همین بود که برنامه نویسی رو هم شروع کردم و خوشبختانه تا الان (البته به نظر خودم ) موفق بودم.

این تاپیک که راجع به طریقه شروع ساخت و تجزیه و تحلیل روشهای طراحی بخشهای مختلف یک موتور طراحی بازی و شامل برنامه نویسی نمیشه و علتش این هست که گوناگونی زبانهایی که سیستمهای گرافیکی رو پشتیبانی کنند بسیار زیاده و متد ها و روشهای برنامه نویسی هم که جای خود داره . ولی 99 درصد زبانها از یک سری مفهومات کلی پیروی میکنند و در آموزشها معمولاً سعی میشه این مفهومات رو ذکر کنن تا کسی که داره آموزش میبینه با توجه به اونها با زبان برنامه نویسی که خودش یاد داره کار رو درست انجام بده . این روش آموزش توی اکثر کتابهای تحلیل طراحی بازی و ... هستن و من خودم خیلی این روش رو قبول دارم چون کسی رو مجبور به یاد گیری یک زبان خاص شبیه C++ یا C# یا دلفی و ... نمیکنه و این انتخاب زبان برنامه نویسی رو به عهده شما میذاره . کلاً روشهای principle based project management و principle based programming و هر روشی که از اصول استفاده بشه مخصوصاً در طراحی نرم افزارها و ...

انشاالله تاپیکهای برنامه نویسی به زبان C# Adv که خودم یاد دارم هم درست میکنم

موفق باشید :rose:
 

amir.nemati63

کاربر VIP
سلام.
چند تا سوال داشتم. امیدوارم مزاحمتون نشده باشم .

میشه فرق #c معمولی و نسخه ی دات نت اون رو برام توضیح بدین؟


من علاقه ی زیادی به ساخت بازی دارم. و توی همه ی قسمتهای مربوطه یه غیر از برنامه نویسی مهارتم بد نیست و سابقه ی خوبی دارم.
تصمیم دارم یا با udk یا با unity3d شروع به کار کنم.
برای هر کدوم چه برنامه نویسی ای به درد میخوره و بهتر جواب میده.؟

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

توی منوی Unity دیدم که از java و #C پشتیبانی میشه.
این #Cهمون نسخه ی معمولی هست یا نسخه ی دات نت؟

آیا با اینکه من برنامه نویسی بلد نیستم، میتونم مستقیما" ++C و یا #C رو شروع کنم یا اینکه مراحل و برنامه نویسی های دیگه ای رو به عنوان پیش نیاز طی کنم؟

اگر پیش نیازی لازم نیست، از کجا و با چه زبان و موتوری شروع کنم که هم زودتر به نتیجه برسم و هم کیفیت کار خوب باشه؟
ممنون میشم جواب بدین.
 
آخرین ویرایش:
  • Like
Reactions: .ir

Mahdi_Rashed

Well-Known Member
میشه فرق #c معمولی و نسخه ی دات نت اون رو برام توضیح بدین؟

فرقی زیادی ندارن . C# کلاً یک زبان بر پایه کامپونتنهای .net هست و بسته به ورژن اون ها ( 1.1 ، 2 و 3 ) میشه برنامه ها رو نوشته. C# و C#.net یکی هستن . البته به طور کلی میشه گفت که C# یک زبان برنامه نویسی هستن و .net یکی از سکوهای توسعه یا Platform ها و framework های زبان برنامه نویسی C# هست.

تصمیم دارم یا با udk یا با unity3d شروع به کار کنم.
برای هر کدوم چه برنامه نویسی ای به درد میخوره و بهتر جواب میده.؟

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

من یک مدت از Unreal Engine 2 و نسخه UDK یا همون unreal Engine 3 استفاده کردم . زبان کلی بازی شبیه java و C++ هست و ساختار ساده ای داره . سیستم کلی موتور طراحی بازی که باید لایسنس های اصلی یا نسخه های قابل تغییر باشه ( مخصوصاً در ورژن آموزشی 2 ) دقیقاً زبان C++ هست.

توی منوی Unity دیدم که از java و #C پشتیبانی میشه.
این #Cهمون نسخه ی معمولی هست یا نسخه ی دات نت؟

از unity3D استفاده نمیکنم چون به نظر من در برابر UDK هیچه( با عرض پوزش از کابران unity 3D ) ولی اگه نوشته C# هیچ فرقی نداره چون همونطور که گفتم C# و C#.net فرقی ندارن.
آیا با اینکه من برنامه نویسی بلد نیستم، میتونم مستقیما" ++C و یا #C رو شروع کنم یا اینکه مراحل و برنامه نویسی های دیگه ای رو به عنوان پیش نیاز طی کنم؟

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

اگر اول زبان C++ رو یاد بگیرید و بعد برین سراغ C#، یادگیری C# خیلی ساده میشه ولی خوب بدون یاد داشتن C++ میشه C# رو یادگرفت ولی کار سخت تر میشه.

بسته به نوع کاری که میخواید شروع کنید باید انتخاب کنید که چی و چطور و با چی یاد بگیرید . اگر قصد شما فقط طراحی بازی با یک موتور آماده هست میتونید از UDK استفاده کنید چون خیلی موتور عالی و بی نظیری هست ولی اگر قصد یادگیری زبانهای برنامه نویسی رو دارید باید بگم تقریباً بیشتر سیستم های طراحی بازی امروزی بر پایه زبانهای 3 گانه C یعنی C و C++ و C# هست در گرایش گرافیک یعنی کامپوننتهای DirectX و یا Open Gl . اگر زبانها ی برنامه نویسی رو یاد بگیرید با مطالعه چند کتاب مختلف مربوط به ساخت موتور طراحی بازی میتونید یا موتور طراحی بازی بسازید یا یکی از موتورهای متن باز رو گسترش بدید.
 

Mahdi_Rashed

Well-Known Member
Open Source Database:

Open Source Database نوعی پایگاه داده هستند که برای ساخت نرم افزارها و بازی های متن باز رایگان استفاده میشوند و معمولاً به صورت کدها و سورسهای آماده برای گسترش و استفاده در پروژه ها در سراسر محیط اینترنت موجود هستند. Open Source Database با توجه به نوع کاربری و فردی که آن را توسعه میدهد میتوان مدل های مختلفی داشته باشد . مثلاً داده های مقداری و سورس رو پس از دریافت در ثبت در پایگاه داده قفل کرده و از فرمتهای مخصوص و فشرده سازی مشخص با الگوریتم های خصوصی استفاده کند و در عین حال میتوان Open Source Database را به یک پایگاه داده را طوری طراحی کرد تا مقادیر قفل شده و یا بتوان آنها را در پنل کنسول تغییر داد و سورس بازی کاملاً باز و قابل استفاده باشد ( سورس بازی یعنی تکسچرها، مدلها، Shader ها و دیگر عناصری که در بخشهای مختلف بازی مورد استفاده قرار میگیرد. ).

طراحی Open Source Database ها معمولاً توسط یک گروه تشکیل شده از تعداد کمی از افراد بر اساس لایسنس های متن باز شبیه GPL یا LGPL و ... طراحی میشود و افراد دیگر با استفاده از سورس ها و کد ها آن یک پایگاه داده مورد نیاز برای بازی یا موتور طراحی بازی خود طراحی و گسترش میدهند . Open Source Database بهترین نوع پایگاه داده در طراحی بازی و موتور طراحی بازی هستند چون میتوان با توجه به استفاده کاربری آن را تغییر داد و مطابق خواسته های خود بخشهای امنیت و سیستم فشرده سازی را برنامه ریزی کرد.

ساختار سیستمی Open Source Database:

Open Source Database ها از ساختارهای ساده ای تشکیل شده اند تا همه ی افراد بتوانند با دریافتن و فهمیدن این ساختارها مطابق خواسته خود پایگاه داده را گسترش و توسعه دهند.

از لحاظ الگوریتمی ساختار Open Source Database ها به شکل زیر میباشد:

316930776721432721.png


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

جدیدترین ارسال ها

بالا