# مباحث متفرقه برنامه نویسی > طراحی و ساخت بازی‌های کامپیوتری > گفتگو: C++‎ یا C++‎

## gbg

سلام
درسته اشتباه ننوشتم سی++ یا سی++
همیشه این سوال بوده که برای بازی سازی از سی استفاده کنیم یا دلفی
من خودم چدین و چند بار این سوال رو تو این انجمن دیدم و همیشه هم جواب ها رو خوندم و همیشه هم جواب من و خیلی از دوستان سی بوده و البته این سوال همیشه انتخاب بین دلفی و سی ماکروسافت بوده
خوب من می خوام بپرسم ویژوال سی ++ برای بازی نوشتن بهتره یا سی ++ بیلدر؟
لطفا نظر کارشناسی،غیر احساسی! و با دلیل و مدرک و سعی کنیم یه تاپیک باشه که همه لذت ببرن از خوندنش

----------


## amin1softco

به نظر من ابزار مهم نیست کیفیت کاری که ارائه می شه مهم تره حالا یکی با سی شارپ راحتتره یکی با سی یکی با جاوا مهم کاریه که ارائه داده می شه ولی خوب به قول خارجیا performance سی ++ بالاتره و بهتره از همون ویژوال سی++ و win32 استفاده بشه

----------


## سپول

> درسته اشتباه ننوشتم سی++ یا سی++


الان این سوال در مورد برنامه نویسی high-performance مطرح هست :
C++‎‎‎ یا C ؟

----------


## gbg

لازم به توضیح هستش که هر دو زبان C++‎ هستن ولی شرکت های سازندشون و IDE شون با هم فرق داره
من می خوام یک زبان برنامه نویسی که ماله دو شرکت مختلف هست رو بررسی کنم همیشه یک سر بحث Delphi بوده و سر دیگه C++‎ یا C#‎ یا VB یا ...
ولی اینبار هر دو تاشون C++‎ هستن و از اونجایی که اینجا تالار طراحی و ساخت بازی‌های کامپیوتری  هستش پس سوالم درباره بازی نویسی و این سطح و سبک برنامه نویسی در دو IDE متفاوت بوده

----------


## khorzu

اگه منبع خارجی برای این بررسی نیست می شه همین جا یه طرح تست بریزیم . البته واقعا IDE محشری داره و مثلا برای تولست نوشتن در مقایسه با MFC به نظرم حتما گزینه خوبیه .

----------


## seyedof

سلام

جدای از دلایل مختلفی که میشه آورد یک دلیل خیلی ساده وجود داره که خودش به اندازه کافی قانع کننده هست: سرعت کد تولید شده توسط Visual C خیلی بیشتر از کد تولید شده توسط C++‎ Builder است. بهتره از Visual C++‎ استفاده کنید. با یک جستجوی ساده میتونید توی اینترنت نتایج مقایسه سرعت کامپایلرهای مختلف سی رو ببینید. معمولا Intel C++‎ سریعترین است.

ممنون علی

----------


## 1485159

> سرعت کد تولید شده توسط Visual C خیلی بیشتر از کد تولید شده توسط C++‎‎ Builder است. بهتره از Visual C++‎‎ استفاده کنید.


فکر نکنم همچین چیزی درست باشه!!!

----------


## seyedof

سلام

چرا فکر نمیکنید؟ رجوع کنید به مقایسه های آنلاین. هر دو درسته که C++‎ هستند اما Code Optimization یکی از قسمتهای مهم کمپایلر است که تعیین میکنه یک کد سی چطور به معادل زبان ماشینش تبدیل بشه. اینکه بتونه از قابلیتهای پردازنده های مدرن مثل cache و multi coreو mmx و sse و pipeline و ... استفاده کنه به این قسمت مرتبطه. و سرعت کد خروجی هم اختلاف قابل توجهی خواهد داشت. حتی در بعضی موارد فقط جابجا کردن دو دستور که تاثیری هم توی عملکرد برنامه داره میتونه سرعت اجرا رو به میزان زیادی افزایش بده. قبلا ویژوال سی هم چندان جنگی به دل نمیزد و اینتل سی با فاصله قابل توجه از همه سریعتر بود، ولی از vs 2005 به بعد ویژوال سی هم وضعیتش خوب شده و اختلاف کمی با اینتل سی از نظر سرعت داره.

ممنون علی

----------


## gbg

> سلام
> 
> چرا فکر نمیکنید؟ رجوع کنید به مقایسه های آنلاین. هر دو درسته که C++‎‎ هستند اما Code Optimization یکی از قسمتهای مهم کمپایلر است که تعیین میکنه یک کد سی چطور به معادل زبان ماشینش تبدیل بشه. اینکه بتونه از قابلیتهای پردازنده های مدرن مثل cache و multi coreو mmx و sse و pipeline و ... استفاده کنه به این قسمت مرتبطه. و سرعت کد خروجی هم اختلاف قابل توجهی خواهد داشت. حتی در بعضی موارد فقط جابجا کردن دو دستور که تاثیری هم توی عملکرد برنامه داره میتونه سرعت اجرا رو به میزان زیادی افزایش بده. قبلا ویژوال سی هم چندان جنگی به دل نمیزد و اینتل سی با فاصله قابل توجه از همه سریعتر بود، ولی از vs 2005 به بعد ویژوال سی هم وضعیتش خوب شده و اختلاف کمی با اینتل سی از نظر سرعت داره.
> 
> ممنون علی


ممنون از توضیح تون ولی منبع معتبر هم اعلام نفرمودین

----------


## gbg

> اگه منبع خارجی برای این بررسی نیست می شه همین جا یه طرح تست بریزیم . البته واقعا IDE محشری داره و مثلا برای تولست نوشتن در مقایسه با MFC به نظرم حتما گزینه خوبیه .


من که جستجو می کردم تقریبا همه می گن وقتی بحث سر برنامه های فرم بیس هست و یا برنامه نویسی دیتا بیس C++‎ builder حرف اول رو میزنه ولی برای وقتی که در سطح پایین تر برنامه نویسی انجام میشه هنوز نتیجه ای پیدا نکردم.
ولی میشه این بررسی رو چند بخش کرد و بخش به بخش برسی انجام داد و به هر بخش نمره داد و یه نمره کلی براش در نظر گرفت ولی اصل بررسی مربوط به برنامه نویسی برای بازی هستش

----------


## gbg

> به نظر من ابزار مهم نیست کیفیت کاری که ارائه می شه مهم تره حالا یکی با سی شارپ راحتتره یکی با سی یکی با جاوا مهم کاریه که ارائه داده می شه ولی خوب به قول خارجیا performance سی ++ بالاتره و بهتره از همون ویژوال سی++ و win32 استفاده بشه


به نظر من ابزار خیلی مهم هستش
یه درخت تنومند گردو رو رو با چی میبری؟ 1 - تبر  2 - اره دندانه ریز 3 - اره دندانه درشت 4 - اره برقی

----------


## سپول

> من که جستجو می کردم تقریبا همه می گن وقتی بحث سر برنامه های فرم بیس هست و یا برنامه نویسی دیتا بیس C++‎‎‎‎ builder حرف اول رو میزنه ولی برای وقتی که در سطح پایین تر برنامه نویسی انجام میشه هنوز نتیجه ای پیدا نکردم.
> ولی میشه این بررسی رو چند بخش کرد و بخش به بخش برسی انجام داد و به هر بخش نمره داد و یه نمره کلی براش در نظر گرفت ولی اصل بررسی مربوط به برنامه نویسی برای بازی هستش


ببین... خیلی بعیده کسی بیاد builder رو با کامپایلر هایی مثل VC، GCC یا Intel C مقایسه کنه، اصلاً کلاس این کامپایلر ها فرق می کنه، زبان ربطی نداره و فقط رابطه! builder رو با کامپایلرهای .NET و جاوا و این چیزا معمولا مقایسه می کنند که کارایی ایشون تقریبا تو یک مورد هست اونم برنامه های Database ای.
گرچه در حال حاضر C++‎‎‎ Builder و Delphi تقریبا در هیچ مکانی جای نمی گیرند، حتی نرم افزارهای اداری و دیتابیس، چون .NET و java و حتی برنامه های web based که با پروتکل ajax ساخته می شه در این موارد high level تر و پر کاربرد تر هستند.
در مورد برنامه های high-performance هم شما بگرد دنبال مقایسه بین کامپایلرهای ICC (intel) ، VC و GCC ، چون C++‎‎‎ builder در بین اینها از نظر سرعت اجرا و کارایی جایی نداره که اصلا بخواد مقایسه بشه، مثل این می مونه که بگردی دنبال مقایسه ماشین سوپر اسپورت با پراید؛ جفتشون هم یکجور رانندگی می شه.
شما می تونی به راحتی در زمان شروع کار مغزت رو مشغول این جفنگیات هم نکنی، و یک راست بری سراغ VC چون 99.9% بازی های PC رو با این نرم افزار کامپایل می کنند. شرمنده "منبع" هم ندارم. ولی می خوای مطمئن بشی برو سایت Gamedev.net یه چرخی بزن، یک پست هم بده اونجا از گیم سازها بپرس. چون معمولا حرف خارجی ها منبع خوبی برای ما ایرانی ها حساب می شه.

- EDIT : یادم رفت بگم که برای افراد تازه کار در برنامه نویسی گیم  .NET و XNA مایکروسافت انتخاب خوبی هست.

----------


## seyedof

> من که جستجو می کردم تقریبا همه می گن وقتی بحث سر برنامه های فرم بیس هست و یا برنامه نویسی دیتا بیس C++‎‎ builder حرف اول رو میزنه ولی برای وقتی که در سطح پایین تر برنامه نویسی انجام میشه هنوز نتیجه ای پیدا نکردم.
> ولی میشه این بررسی رو چند بخش کرد و بخش به بخش برسی انجام داد و به هر بخش نمره داد و یه نمره کلی براش در نظر گرفت ولی اصل بررسی مربوط به برنامه نویسی برای بازی هستش


سلام

بله اوون به دلیل اینه که Builder یک محیط RAD است و برای سریع درست کردن برنامه های دیتابیسی و... که رابط کاربر زیاد و پیچیده دارند مناسبه و میشه سریعتر برنامه رو توسعه داد ولی برای کارهای سطح پایین و مخصوصا کارهایی که تشنه سرعت هستند مثل گیم، به دلیل اینکه سرعتش کمتره اصلا مناسب نیست. منبع معتبر رو خاطرم نیست با جستجو توی گوگل به راحتی پیدا میشه و اصلا هم چیز دور از ذهنی نیست چون Builder رو برای کارهایی ساختند که توی اوون کاربردها بهتره نه برای گیم.
خودم هم قبلا یعنی تا همین 3 سال پیش برای نوشتن خود موتور و... از ویژوال سی استفاده میکردم و برای نوشتن ادیتور بازی که رابط کاربر زیاد داره از Builder اما مشکلات اینکار زیاده، مثلا بعضی از موتورها و middleware ها طوری نوشته شدن که روی بیلدر نمیشه ازشون استفاده کرد و... 
از طرفی چون MFC رو نسبتا مسلط شدم و مایکروسافت هم یه Feature Pack واسه VS2008 داد بیرون که توش کلی کنترلهای پیچیده رو به MFC اضافه کرده بود (واقعا عالیه توی sample هاش محیطی مثل ms office داره که با همین کنترلهای اضافه شده ساخته شده) اوون مزیت Builder هم برام خیلی کم رنگ شد و کاملا سوییچ کردم روی ویژوال استودیو. MFC اولش یه مقدار ترسناکه و سخته ولی اگر روش مسلط بشین خیلی حساب کتاب دار تر از Builder است. توی Builder نوشتن کمپوننت و استفاده ازش واقعا دردسره و چون کمپوننت هاش یه مقدار هم High Level است بعضی جاها خیلی اذیت میکنه و اصلا نمیشه فهمید که مثلا فلان event رو کی صدا میزنه و چجوری باید باهاش برخورد کرد ولی توی MFC این لایه ای که روی API ویندوز نوشتن خیلی نازکتر است و عملا شما همون message های ویندوز رو پردازش میکنید، این باعث سرعت بیشتر کمپوننت های MFC هم میشه.

کلا برای خود گیم که به دلیل سرعت بیشتر کد خروجی ویژوال سی توصیه میشه و حتی برای رابط کاربر هم با توجه به پیشرفت MFC و مشکلات پیش رو برای استفاده موازی از VC و Builder باز هم توصیه میکنم قید Builder رو بزنید و با همون VS2008 SP1 به بالا کار کنید که امکان ایجاد رابط کاربرهای پیچیده رو هم میده مضاف بر اینکه میتونید خیلی راحتتر و منطقی تر خودتون هم کنترلهای مورد نظرتون رو بسازید یا Customize کنید. این کاریه که خودم هم کردم و الان هم خیلی راضیم.

ممنون علی

----------


## gbg

> ببین... خیلی بعیده کسی بیاد builder رو با کامپایلر هایی مثل VC، GCC یا Intel C مقایسه کنه، اصلاً کلاس این کامپایلر ها فرق می کنه، زبان ربطی نداره و فقط رابطه! builder رو با کامپایلرهای .NET و جاوا و این چیزا معمولا مقایسه می کنند که کارایی ایشون تقریبا تو یک مورد هست اونم برنامه های Database ای.
> گرچه در حال حاضر C++‎‎‎‎‎ Builder و Delphi تقریبا در هیچ مکانی جای نمی گیرند، حتی نرم افزارهای اداری و دیتابیس، چون .NET و java و حتی برنامه های web based که با پروتکل ajax ساخته می شه در این موارد high level تر و پر کاربرد تر هستند.
> در مورد برنامه های high-performance هم شما بگرد دنبال مقایسه بین کامپایلرهای ICC (intel) ، VC و GCC ، چون C++‎‎‎‎‎ builder در بین اینها از نظر سرعت اجرا و کارایی جایی نداره که اصلا بخواد مقایسه بشه، مثل این می مونه که بگردی دنبال مقایسه ماشین سوپر اسپورت با پراید؛ جفتشون هم یکجور رانندگی می شه.
> شما می تونی به راحتی در زمان شروع کار مغزت رو مشغول این جفنگیات هم نکنی، و یک راست بری سراغ VC چون 99.9% بازی های PC رو با این نرم افزار کامپایل می کنند. شرمنده "منبع" هم ندارم. ولی می خوای مطمئن بشی برو سایت Gamedev.net یه چرخی بزن، یک پست هم بده اونجا از گیم سازها بپرس. چون معمولا حرف خارجی ها منبع خوبی برای ما ایرانی ها حساب می شه.
> 
> - EDIT : یادم رفت بگم که برای افراد تازه کار در برنامه نویسی گیم  .NET و XNA مایکروسافت انتخاب خوبی هست.


دوست عزیز من اگه قرار بود مغزم رو مشغول جفنگیات کنم این پست رو نباید میزدم و یک راست می رفتم سراغ watcom C که سروَر همه کامپایلر هاست و به جرات می گم 90 درصد بازی ها با این کامپایر کمپایل شدن ( حداقل تو داس رو مطمعن هستم) اون موقع که همه می خواستن برن تو مود پروتکت و برنامه بنویسن و هزار داستان دیگه من چندتا بازی تحت داس با این کامپایلر و حدود سال 73 و بعد از اون نوشتم ولی بعد از سال 77 که برنامه ها تحت ویندوز رواج بیشتری پیدا کرد سراغ کار کردن با سی نرفتم و دلفی رو مناسب تر دیدم به هرحال گفتم بدونی که همچین تازه کار گیم هم نیستم.
حالا که تصمیم گرفتم دوباره نوشتن گیم رو شروع کنم اگه می خواستم همینجوری برم سراغ کامپایلر می رفتم ببینم watcom کامپایلرش چطوره و اینجا پست نمی زدم.

پی نوشت : این کامپایلر در اون زمان برنامه رو 32 بیتی کامپایر می کرد و برنامه تو مود پروتکت اجرا میشد و محدودیت دسترسی حافظه و ... از بین می رفت.

----------


## سپول

می دونم watcom چی بوده و چی کار می کرده. اون مال زمان گیم سازی تحت dos و دوران انتقال نرم افزارها از 16 به 32 بود. قضیه مال 10-15 سال پیشه !!! در صنعت نرم افزار 10-15 سال یک عمر محسوب می شه.

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

به هر حال اگه اون موقع watcom حرف اول رو می زد، الان VC این کار رو انجام می ده.

----------


## seyedof

> دوست عزیز من اگه قرار بود مغزم رو مشغول جفنگیات کنم این پست رو نباید میزدم و یک راست می رفتم سراغ watcom C که سروَر همه کامپایلر هاست و به جرات می گم 90 درصد بازی ها با این کامپایر کمپایل شدن ( حداقل تو داس رو مطمعن هستم) اون موقع که همه می خواستن برن تو مود پروتکت و برنامه بنویسن و هزار داستان دیگه من چندتا بازی تحت داس با این کامپایلر و حدود سال 73 و بعد از اون نوشتم ولی بعد از سال 77 که برنامه ها تحت ویندوز رواج بیشتری پیدا کرد سراغ کار کردن با سی نرفتم و دلفی رو مناسب تر دیدم به هرحال گفتم بدونی که همچین تازه کار گیم هم نیستم.
> پی نوشت : این کامپایلر در اون زمان برنامه رو 32 بیتی کامپایر می کرد و برنامه تو مود پروتکت اجرا میشد و محدودیت دسترسی حافظه و ... از بین می رفت.


سلام

بله در داس سریعترین و بهینه ترین کد رو Watcom C++‎ میداد من هم ازش استفاده میکردم. با استفاده از Dos Extender سی پی یو رو توی حالت Protected Mode میبرد و... الیته همون موقع هم بعضی وقتها یه کامپایلر به اسم DJGPP که پورت GCC به داس بود میتونست از Watcom جلو بزنه. اما به هر حال توی اوون شرکت دیگه از عرصه رقابت حذف شد، هر چند چند سال پیش هم یه نسخه مجانی WC تحت ویندوز دادن اما باز هم نتونست به جایی برسه.

نقشی که اوون موقع Watcom C داشت الان Intel C داره. اتفاقا شما اگر هم بخواین از Intel C استفاده کنید بهتره بازم برین سراغ VC چون Intel C مثل WatcomC محیط IDE نداره و کامند لاینی است ولی یه قابلیت جالبی داره که روی Visual Studio سوار میشه (Integrate میشه) که خیلی راحت میتونید از توی منوهای VS کمپایلرتون رو از VC به ICC تغییر بدین.

شک نکنید که VC فعلا بهترین انتخابه، اکثر برنامه های سنگین و پردازش محور رو توی دنیا با VC مینویسند و کمپایل میکنند.

ممنون علی

----------


## gbg

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

----------


## سپول

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


این تصور غلط ای هست که بین بازی سازهای ایران بوجود اومده که موتور آماده دانلود می کنن، روش اسکریپت می نویسن، می شه call of duty  و GTA .
در این مورد یک مقاله ای نوشتیم :
http://www.tochalco.com/blog/?p=48

----------


## SeganX

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


تاپیک بحث شما در مورد انتخاب زبان برنامه نویسی برای بازی بود یا انتخاب یه موتور آماده و اسکریپتش؟
اگه حوصله داشته باشی و حسابی تو اینترنت بگردی این روزا می تونی سورس موتورهای معروفی همچون CryEngine ، Unreal و ... رو پیدا کنی و ببنی که اونارو با چی نوشتن. به علاوه می تونی یه سری هم به middleware هایی همچون موتورهای فیزیک، هوش مصنوعی، اسکریپت، انمیشن کنترلر و ... بزنی.
البته این گونه مقاومت ها در برابر درستی یک موضوع یک امر طبیعی در ما ایرانیان هستش. فکر کنم منم یه زمانی اینطوری بودم.  :لبخند گشاده!:

----------


## gbg

مقاومت در برابر موضوع نیست
بدون هیچ دلیل قانع کننده ای میگین فلان کامایلر تمام بازی ها با فلان کامپایلر
من هم گفتم از نظر من اکثر بازی ها با انجین های آمادست
یه سری به سایت همین انجینها بزن و لیست بازی ها رو ببین که با این انجین ها نوشته شده

----------


## ژوپیتر

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

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

----------


## pswin.pooya

> مقاومت در برابر موضوع نیست
> بدون هیچ دلیل قانع کننده ای میگین فلان کامایلر تمام بازی ها با فلان کامپایلر
> من هم گفتم از نظر من اکثر بازی ها با انجین های آمادست
> یه سری به سایت همین انجینها بزن و لیست بازی ها رو ببین که با این انجین ها نوشته شده


قبول، داری درست میگی!. وقتی که میدونی چه خبره چرا بیخودی میپرسی؟

من خودم سورس unreal دارم و خیلی راحت و تظمین شده میگم کامپایلرش VC هستش. و حتی سورس به سجاد و کوچول هم نشون دادم. از یه طرف دیگه برنامه نویسهایی مثل سیداف و سپول و سجاد (SeganX) این مطلب رو دارن تایید میکنن که کامپایلر این بازیها VC هستش. بازم باور نداری؟ خب خیلی راحت برو سورسهای id رو بگیر و نگاهشون کن. اگر بازهم قانع نشدی دیگه سراغ بازی سازی نرو.

به نظرم سپول راست میگه، شما که تازه وارد هستی بهتره ذهنت رو با این چیزها مشغول نکنی و بچسبی با همون VC کار کنی. بیشتر از کامپایلر هم کدینگ و الگوریتمها اهمیت دارن. پس سعی کن حداقل تا زمانی که توی اونها فول نشدی بیخودی سراغ کامپایلر نگردی. چون حتی اگر سریعترین رو پیدا کنی تاثیر خیلی کمی (شاید نامحسوسی) رو توی سرعت متوجه بشی.

----------


## seyedof

> مقاومت در برابر موضوع نیست
> بدون هیچ دلیل قانع کننده ای میگین فلان کامایلر تمام بازی ها با فلان کامپایلر
> من هم گفتم از نظر من اکثر بازی ها با انجین های آمادست
> یه سری به سایت همین انجینها بزن و لیست بازی ها رو ببین که با این انجین ها نوشته شده


سلام

بدون دلیل کدومه؟ اینهمه دلیل. فهمیدنش اصلا سخت نیست برین فایل exe هر بازی که دوست دارین دنبال Signature کامپایلرش بگردین که ثابت بشه با VC نوشته شدن.

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

ممنون علی
http://www.tochalco.com/blog

----------


## gbg

این موضوع که تازه کار هستم رو اصلا قبول ندارم درسته که در زمینه بازی نویسی در ویندوز کار جدی و سه بعدی انجام ندادم ( چند مورد بازی تحت ویندوز با دلفی ، وِژوال سی و سی شارپ دارم ) ولی اصل اول بازی به نظر من وجود داستان خوب و قوی هستش
حالا که داستانم کامل شده و بزودی قرار تبدیل به سناریو بشه ، بهتر دیدم که یک کامپایلر هم انتخاب کنم براش و تا قبل از شخصیت پردازی برم سراغ نوشتن یه انجین و این تازه دومین قدم کارمه
از نظر من کارهایی رو که GPU انجام میده رو که فرقی نداره با چی نوشته میشه مشکل من برای زمانیه که می خوام هوش مصنوعی و فیزیک رو بنویسم هستش

----------


## 1485159

به نظر من لذت بردن مهمتره!!!! چون اگه سرعت از لذت بیشتر مهمتر بود، همه از اسمبلی استفاده میکردن تا سی++!!!! بنابراین حتی اگه از ویژوال بیسیک هم استفاده کنی میتونی موفق بشی! البته اگه موفق شدن رو فقط سرعت ندونی!!!
درضمن مهم نیست درخت رو با اره میبری یا با کارد!!! مهم اینه که میتونی دخلش رو در بیاری یا نه؟

----------


## hi.alir

جالبه، اصلا فکر نمی کردم که اینطور باشه. تقریبا تمام بازی هایی که نصب دارم رو نگاه انداختم، همشون با VC بود. بازی های بزرگ مثل Splinter Cell و ... اکثرا با VS 2005 بود.
البته در مورد Call Of Cthulhu یه چیز خیلی مسخره وجود داشت، اونجوری که من دیدم تهش نوشته بود Debug Mode  :لبخند گشاده!: 




> به نظر من لذت بردن مهمتره!!!! چون اگه سرعت از لذت بیشتر مهمتر بود، همه از اسمبلی استفاده میکردن تا سی++!!!! بنابراین حتی اگه از ویژوال بیسیک هم استفاده کنی میتونی موفق بشی! البته اگه موفق شدن رو فقط سرعت ندونی!!!
> درضمن مهم نیست درخت رو با اره میبری یا با کارد!!! مهم اینه که میتونی دخلش رو در بیاری یا نه؟


راستش بازی نوشتن با اسمبلی مثل قطع کردن درخت با سوزن می مونه  :کف کرده!: 
البته فعلا زیاد فرقی نداره که با VC کامپایل بشه یا Builder یا ... ، ولی کیفش اونجاس که ببینی بازیت رو یه کامپیوتر ضعیفتر باز 60 فریم رو میده.

----------


## سپول

> این موضوع که تازه کار هستم رو اصلا قبول ندارم درسته که در زمینه بازی نویسی در ویندوز کار جدی و سه بعدی انجام ندادم ( چند مورد بازی تحت ویندوز با دلفی ، وِژوال سی و سی شارپ دارم ) ولی اصل اول بازی به نظر من وجود داستان خوب و قوی هستش
> حالا که داستانم کامل شده و بزودی قرار تبدیل به سناریو بشه ، بهتر دیدم که یک کامپایلر هم انتخاب کنم براش و تا قبل از شخصیت پردازی برم سراغ نوشتن یه انجین و این تازه دومین قدم کارمه
> از نظر من کارهایی رو که GPU انجام میده رو که فرقی نداره با چی نوشته میشه مشکل من برای زمانیه که می خوام هوش مصنوعی و فیزیک رو بنویسم هستش


بستگی داره چه بازی داری می سازی، اگه می خوای کلاً به طور جدی وارد صنعت گیم بشی و برنامه نویسی حرفه ای بازی بکنی در آینده، بهتره که VC و کامپایلرهای مشابه مثل ICC و GCC کار کنی. (به قول آقای 143124 لذتش هم بیشتره)
اگه می خوای واسه خودت بازی های ساده یا ادونچر دو بعدی یا سه بعدی خیلی ساده مثل بازی میترا درست کنی Delphi ، XNA و .NET و خیلی ها دیگه جواب کارت رو می دن.
در مورد gpu و گرافیک هم اشتباه می کنی، بخش زیادی از توان پردازشی CPU تقریباً تمام بازی ها صرف رندر کردن صحنه می شه؛ از جمله Scene management ، sorting ، Draw Calls، Culling و خیلی چیزهای دیگه که ربطی به کارت گرافیک نداره.

----------


## 1485159

یه بحث دیگه که اینجاهست اینه که دلفی چطور؟ من فقط از لحاظ سرعت میگم نه از لحاظ کمبود بنابع و....

----------


## Felony

> یه بحث دیگه که اینجاهست اینه که دلفی چطور؟ من فقط از لحاظ سرعت میگم نه از لحاظ کمبود بنابع و....


دلفی تحت ویندوز چیزی از ++VC کم نداره و کتاب های معتبری هم در باره بازی سازی در دلفی ارائه شده ( مثل : Wordware - Delphi Graphics and Game Programming Exposed with DirectX 7.0 ) ، مشکل این جا هست که کتاب خانه های آماده یا انجین های متن باز برای این زبان وجود نداره که شما برداری و شخصی سازیش کنی و باید همه رو خودت از اول پیاده سازی کنی ( اختراع دوباره چرخ ! )




> البته فعلا زیاد فرقی نداره که با VC کامپایل بشه یا Builder یا ... ، ولی کیفش اونجاس که ببینی بازیت رو یه کامپیوتر ضعیفتر باز 60 فریم رو میده.


Wow ، چه ربطی داره ؟!!!

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

----------


## 1485159

> دلفی تحت ویندوز چیزی از ++VC کم نداره و کتاب های معتبری هم در باره بازی سازی در دلفی ارائه شده ( مثل : Wordware - Delphi Graphics and Game Programming Exposed with DirectX 7.0 ) ، مشکل این جا هست که کتاب خانه های آماده یا انجین های متن باز برای این زبان وجود نداره که شما برداری و شخصی سازیش کنی و باید همه رو خودت از اول پیاده سازی کنی ( اختراع دوباره چرخ ! )


نبودن چنتا کتابخونه که باعث نمیشه بگیم یک زبان به درد نمیخوره!!!
======



> 1485159, ‏*Mahmood_N*+, ‏seyedof+, ‏مجتبی تاجیک+, ‏*علی کشاورز*+


میبینم که همه ی دلفی کارا به این تاپیک حمله ور شدن... :لبخند گشاده!:

----------


## seyedof

> به نظر من لذت بردن مهمتره!!!! چون اگه سرعت از لذت بیشتر مهمتر بود، همه از اسمبلی استفاده میکردن تا سی++!!!! بنابراین حتی اگه از ویژوال بیسیک هم استفاده کنی میتونی موفق بشی! البته اگه موفق شدن رو فقط سرعت ندونی!!!
> درضمن مهم نیست درخت رو با اره میبری یا با کارد!!! مهم اینه که میتونی دخلش رو در بیاری یا نه؟


سلام

به همین دلیله که کسی با اسمبلی بازی نمی نویسه. دلفی هم شبیه بیلدر است از نظر سرعت کد. اصلا جای بحث نداره اینقدر بدیهیه، برین توی فروم Gamedev.net اصلا از این بحثهای خنده دار نمیشه چون همه میدونن.
اسمبلی اولا الزاما از سی سریعتر نمیشه (به دلایلی که حوصله ندارم توضیح بدم) ضمنا اسمبلی زبان مناسبی برای نوشتن برنامه های بزرگ و پیجیده نیست چون خوانایی نداره و نگهداری و دیباگش سخته به همین دلیل گیم و تقریبا هیچ نرم افزار دیگه ای رو به صورت کامل با اسمبلی پیاده نمیکنند (لطفا مثال نقض نزنید که مثلا فلان کس فلان برنامه رو کلا با اسمبلی.... استثنا ها نمیتونند ملاک تصمیم گیری یا فضاوت باشند).

راهنمایی اشتباه هم نکنید. ابزار خیلی مهمه و خیلی هم فرق میکنه. بله وقتی بخواهید یک گیم ساده درست کنید با هر چیزی میشه ولی گیم های AAA درست حسابی نمیشه ساخت، اگر هم بشه مطمئن باشید چیز درست و حسابی نمیشه و مشکلاتی خواهد داشت. 
دلیلی برای اصرار شما یا توضیح بیشتر این بحث نمیبینم کاملا بدیهی و واضحه دلیلش هم همین بس که هر بازی درست و حسابی که از بازار میخرید برین ببینین با چی نوشتن، مطمئن باشید اگر مثلا با VB میشد Call of Duty درست کرد اوونها ابله نبودند که برن کلی حقوق برنامه نویس سی بدن و با همون VB کار میکردن! وقتی اینهمه کمپانی بزرگ دارن بازی با سی مینویسند حتما دلیل محکمی داره (برای کسانی که نمیخوان دلایل منطقی رو قبول کنند و فکر میکنند که ما از روی تعصب یا نادانی میگیم باید با سی بنویسید، حداقل ببینید شرکتهای خارجی درست و جسابی چکار میکنند و تقلید کنید).

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

دلیل اینکه از سی برای بازی نویسی استفاده میشه وجود منابع هم نیست. زبان سی قدمت خیلی زیادی داره و در این مدتی که سی بوده خیلی زبانهای دیگه اوومدن و رفتن یا اوومدن و هنوز هستند اما هنوز هم برای کاربردهای سیستمی و کارهای Low Level و تشنه سرعت از سی استفاده میشه. سریعترین کدها رو کمپایلرهای سی (نه همشون، بعضی هاشون مثل اینتل سی) تولید میکنند. جدیدا حتی به دلیل مشکلات و کندی بعضی از قابلیتهای C++‎ برای کارهایی مثل گیم از زبان سی (نه سی پلاس پلاس) استفاده میشه، یعنی سرعت اینقدر مهمه که بعضی وقتها قید قواعد شی گرایی رو هم میزنند که سرعت کد بالاتر بره. البته باز هم تاکید میکنم برای بازی درست و حسابی نه منچ و مارپله و تتریس و این بازیهای ایرانی که میبینید. کسانی که با DDK ویندوز هم کار کرده باشن دیدن که کدها سی است نه سی پلاس پلاس.

ابزار مناسب برای کار خیلی مهمه، برای بازیهای کوچک ممکنه با هر چیزی نوشته بشه اما بازی AAA نه.

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

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

ممنون علی
http://www.tochalco.com/blog

----------


## seyedof

میبینم که همه ی دلفی کارا به این تاپیک حمله ور شدن... :لبخند گشاده!: [/QUOTE]


سلام
آقا فحش نده من دلفی کار نیستم :) البته شوخی بود. برنامه نویسی رو با GWBasic شروع کردم بعدش پاسکال و اسمبلی و بعد C++‎ بعدش تحت ویندوز اول با بیلدر کار کردم و بعد VC و تا سه سال پیش کدهای سیستمی رو با VC و جاهایی که رابط کاربر زیاد میخواست با بیلدر میزدم اما همونطور که توی پستها توضیح دادم با پیشرفت MFC و مشکلات بیلدر از 3 چهار سال پیش کلا فقط با VC کار میکنم و برای برنامه های رابط کاربر دار هم MFC. 
بنابراین اصلا نا آشنا نیستم و با تمام این زبانها پروژه انجام دادم و از روی تعصب نمیگم. یادم رفت بگم برای مدت بسیار کوتاهی با دلفی کار کردم ولی چون به نظرم C++‎ زبان بهتری اوومد سریع سوییچ کردم روی بیلدر.

ممنون علی
http://www.tochalco.com/blog

----------


## Felony

> نبودن چنتا کتابخونه که باعث نمیشه بگیم یک زبان به درد نمیخوره!!!


کسی نگفت به درد نمیخوره ، شما اگر حوصله داری کتابخانه های موجود رو خودت بنویسی یا به دلفی ترجمه کنی بسم الله !




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


نوشتن موتور نه ولی نشوتن موتور از پایه چرا ، تو همون موتورهایی که نوشته میشه کلی کتابخانه های آماده استفاده میشه ، تمام این کتابخانه ها برا اساس ++C هستن ، DirectX و OpenGL بر همین اساس کتابخانه ها رو منتشر میکنن پس کار برنامه نویسی که موتور رو با ++C مینویسه به مراتب راحت تر از برنامه نویس Delphi هست که باید کتابخانه ها رو بر داره و به دلفی ترجمشون کنه و بعد ازشون استفاده کنه .

----------


## seyedof

> کسی نگفت به درد نمیخوره ، شما اگر حوصله داری کتابخانه های موجود رو خودت بنویسی یا به دلفی ترجمه کنی بسم الله !
> 
> 
> نوشتن موتور نه ولی نشوتن موتور از پایه چرا ، تو همون موتورهایی که نوشته میشه کلی کتابخانه های آماده استفاده میشه ، تمام این کتابخانه ها برا اساس ++C هستن ، DirectX و OpenGL بر همین اساس کتابخانه ها رو منتشر میکنن پس کار برنامه نویسی که موتور رو با ++C مینویسه به مراتب راحت تر از برنامه نویس Delphi هست که باید کتابخانه ها رو بر داره و به دلفی ترجمشون کنه و بعد ازشون استفاده کنه .



سلام
نوشتن موتور از پایه رو متوجه نشدم. DirectX و OGL اینها که یک سری API گرافیکی هستند و به همون دلیل که اینجور برنامه ها رو با سی مینویسند برای دلفی (اسمش یادم نیست معادل همون هدر های سی فکر کنم اینترفیس میشد توی دلفی) و سایر زبانها فایلهای مورد نیاز برای استفاده از این API ها رو نمیدن چون قرار نیست کسی با زبانی غیر از زبانهای استاندارد اینکار باهاشون کار کنه. ضمنا تولید اوون فایلها برای دلفی رو یک عده انجام میدن معمولا و توی اینترنت هست. کلا کار درستی نیست که کسی بخواد از راههای عجیب و غیر استاندارد کاری رو انجام بده، راه درستش اینه که از ابزار استاندارد هر کاری استفاده کنه.
ترجمه اوون کتابخونه ها برای استفاده در دلفی کار گل است ولی اصلا فنی و ارزشمند نیست.

ممنون علی
http://www.tochalco.com/blog

----------


## gbg

امروز که تاپیک رو خوندم خیلی خوشحال شدم که دیدم دوستان انجمن دلفی هم اینجا حاضرن
از علی هم ممنون که حوصله کرد و متن به اون طولانی نوشت
ولی یک سوال دارم چرا ماکروسافت این همه سعی میکنه بازی نویس ها رو به سمت C#‎ سوق بده و چندین کتاب ( که چند سال پیش به فارسی هم ترجمه شدن ) و چند بازی با این زبان هم نوشته و در اختیار عموم قرار داده؟
به نظر من مهم ترین قسمت هر بازی داستان و جذابیتش هست ( چیزی که تمام بازی ها و حتی فیلم های سینمایی - جدید - ایرانی فاقد اون هستن) بعد از این که داستانی جذاب برای بازی نوشته شد باید تبدیل به سناریویی قوی برای بازی بشه ، بعدش شخصیت پردازی ، طراحی کاراکتر ها و صحنه ها و ...
بعدش با وجود SDKهایی که هست مثل OPENGL و DirectX لزومی استفاده از زبان های سریع تر چیه؟(درست که این ها رو با سی مینویسن پس ابجکت کد این ها با برنامه اصلی لینک میشه)

----------


## gbg

> سلام
> نوشتن موتور از پایه رو متوجه نشدم. DirectX و OGL اینها که یک سری API گرافیکی هستند و به همون دلیل که اینجور برنامه ها رو با سی مینویسند برای دلفی (اسمش یادم نیست معادل همون هدر های سی فکر کنم اینترفیس میشد توی دلفی) و سایر زبانها فایلهای مورد نیاز برای استفاده از این API ها رو نمیدن چون قرار نیست کسی با زبانی غیر از زبانهای استاندارد اینکار باهاشون کار کنه. ضمنا تولید اوون فایلها برای دلفی رو یک عده انجام میدن معمولا و توی اینترنت هست. کلا کار درستی نیست که کسی بخواد از راههای عجیب و غیر استاندارد کاری رو انجام بده، راه درستش اینه که از ابزار استاندارد هر کاری استفاده کنه.
> ترجمه اوون کتابخونه ها برای استفاده در دلفی کار گل است ولی اصلا فنی و ارزشمند نیست.
> 
> ممنون علی
> http://www.tochalco.com/blog


البته با این حرفت زیاد موافق نیستم
با سی مینوسین چون هسته اصلی ویندوز سی هست و استفاده از دلفی و یا حتی خیلی از زبان های دیگه غیر استاندارد نیست البته تعریف درستی هم از زبان استاندارد و غیر استاندارد در دست هم نیست!

----------


## Felony

> امروز که تاپیک رو خوندم خیلی خوشحال شدم که دیدم دوستان انجمن دلفی هم اینجا حاضرن
> از علی هم ممنون که حوصله کرد و متن به اون طولانی نوشت
> ولی یک سوال دارم چرا ماکروسافت این همه سعی میکنه بازی نویس ها رو به سمت C#‎‎‎‎‎‎ سوق بده و چندین کتاب ( که چند سال پیش به فارسی هم ترجمه شدن ) و چند بازی با این زبان هم نوشته و در اختیار عموم قرار داده؟
> به نظر من مهم ترین قسمت هر بازی داستان و جذابیتش هست ( چیزی که تمام بازی ها و حتی فیلم های سینمایی - جدید - ایرانی فاقد اون هستن) بعد از این که داستانی جذاب برای بازی نوشته شد باید تبدیل به سناریویی قوی برای بازی بشه ، بعدش شخصیت پردازی ، طراحی کاراکتر ها و صحنه ها و ...
> بعدش با وجود SDKهایی که هست مثل OPENGL و DirectX لزومی استفاده از زبان های سریع تر چیه؟(درست که این ها رو با سی مینویسن پس ابجکت کد این ها با برنامه اصلی لینک میشه)


مایکروسافت کسی رو به استفاده از C#‎‎‎‎‎ برای بازی سازی تشویق نکرده ، تو همه زبون های برنامه نویسی میشه به نوعی بازی سازی کرد ، حالا یه جا میشه Minesweeper نوشت یه جا Call of duty ، برای همه زبان های برنامه نویسی همچین کتاب های منتشر میشه چون علاقه مندانی من جمله دانشجویان رشته نرم افزار برای ارائه پروژه ها داره ولی دلیل به استفاده حرفه از اون نمیشه ؛ C#‎‎‎‎ خودش وابسته به Net. هست و برای اجرای یک دستور باید کد شما ترجمه بشه که اصلا به درد بازی سازی حرفه ای نمیخوره :





> البته با این حرفت زیاد موافق نیستم
> با سی مینوسین چون هسته اصلی ویندوز سی هست و استفاده از دلفی و یا حتی خیلی از زبان های دیگه غیر استاندارد نیست البته تعریف درستی هم از زبان استاندارد و غیر استاندارد در دست هم نیست!


بله ، باز هم میگم نوشتن با دلفی یا ++VC تو ویندوز تفاوتی نداره ، بحث این هست که هسته سیستم عامل با ++C نوشته شده ، همون کتابخانه های DirectX و OpenGL بر اساس DataType های ++C توسعه داده میشن و برای استفاده از اونها تو زبان های دیگه باید کلی تبدیل واحد انجام داد ، پس بهترن گزینه استفاده از همن ++C هست .

در ضمن اون بحث استاندارد اصلا معنایی نداره ، کسی زبان استانداردی برای بازی سازی معرفی نکرده که بخوایم بگیم زبان  X از این استانداردها پیروی نمیکنه پس استاندارد نیست !

----------


## gbg

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

----------


## Felony

> چرا این تشویق وجود داره و حتی قبلا مقالاتی ور دیدم که سی شارپ رو مناسب برای بازی های استراتژیک معرفی میکرده


مقالات برای کجا بوده ؟ لینکشون رو بدید (هر کسی میتونه یه مقاله ای بنویسه که ... ! )
خودت داری میگی بازی استراتژیک نسبت به بازی 3D فعلی مثل Prince اصلا پردازش گرافیکی سنگینی نداره ؛ در کل اصلا فکر زبان های Net. رو در برنامه نویسی هایی که نیاز به performance بالا دارن نکنید !

به عنوان مثال این تاپیک رو ببینید : https://barnamenevis.org/showthread.php?t=257513

----------


## SeganX

به نظر میاد که دوستان مطالب ذکر شده در پاسخ سوالاتشون رو با دقت نمی خونن و بحث رو کش میدن.
بارها گفته شده که در بازی های AAA ( *دقت کنید لطفا : بازی های AAA* ) مباحث API و استفاده از GPU تنها بخش کوچکی از بازی است و بیشتر پردازش های بازی همچنان روی CPU هستش ( که چندتاشون رو سپول گفت ) و بهترین زبان برای برنامه نویسی high performance همین زبان C و همون کامپایلر های ذکر شده است.

----------


## hi.alir

من یک سوالی واسم پیش اومد! چرا از C استفاده میشه؟ مگه ++C فقط نسبت به سی شی گرایی بیشتر داره؟ من از چند نفر شنیدم که زبان استاندارد بازی سازی ++C هست  :متفکر: 
از چند نفر دیگه هم شنیدم که تنها تفاوت سرعت C با ++C تو فراخوانی اضافی توابع سازنده و مخرب کلاس هاست!  :متفکر:

----------


## seyedof

> البته با این حرفت زیاد موافق نیستم
> با سی مینوسین چون هسته اصلی ویندوز سی هست و استفاده از دلفی و یا حتی خیلی از زبان های دیگه غیر استاندارد نیست البته تعریف درستی هم از زبان استاندارد و غیر استاندارد در دست هم نیست!


سلام

de facto standard  یعنی استاندارد صنعت اینه نه ISO داره نه جایی نوشته شده بلکه به خاطر کارآیی و مناسب بودنش برای این کاربردها استاندارد (و حالا برای بازی با کلمات منظورم همون مرسوم است) مرسوم شده.

ممنون علی

----------


## seyedof

> من یک سوالی واسم پیش اومد! چرا از C استفاده میشه؟ مگه ++C فقط نسبت به سی شی گرایی بیشتر داره؟ من از چند نفر شنیدم که زبان استاندارد بازی سازی ++C هست 
> از چند نفر دیگه هم شنیدم که تنها تفاوت سرعت C با ++C تو فراخوانی اضافی توابع سازنده و مخرب کلاس هاست!


سلام

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

ممنون علی
http://www.tochalco.com/blog

----------


## gbg

1-  در مورد ++
البته اگه از قابلیت های شی گرایی C++‎ استفاده نکنین همون سرعت C رو خواهید داشت
هرچی کنترل بیشتر باشه برنامه نویسی راحت تره ولی سرعت اجرا پایین تر هستش

وقتی یک شی تو C++‎ ایجاد میکنی این شی تشکیل شده از یک سری رویداد و خواص که کنترل اینها باعث کندتر شدن اجرا میشه ولی کمک زیادی به برنامه نویس میکنه و مثلا رویدادها رو راحت تر میشه مدیریت کرد. ( می دونم خیلی گنگ نوشتم  - من زیاد توضیح دادنم جالب نیست )

 2- در مورد کش دادن بحث :
انتخاب خود من برای شروع C هستش ولی در مورد کمپایلر مطمعن نبودم و دوستان هم زحمت کشیدن میگن vc ، ولی من تو VC فقط با MFC کار کردم هیچ ایده ای در مورد VC بدون MFC ندارم و نسخه ای vs2005 رو که داشتم نگاه کردم و همراهش VC نبود و فقط نسخه های .net رو داشت.
قدیما که vc2 یا 3 بود یه ویزاردی برای c وجود داشت که برای ساخت گیم تو مایه های دوم وجود داشت آلان نمی دونم وضعیت به چه صورت هستش چون بعد از نسخه vc6 دیگه کمپایلر جدیدی از این خانواده رو نصب نکردم.
WC رو هم دانلود کردم و نصب کردم از نسخه تحت داس خیلی بهتر شده ولی صحبت و نظر دادن در موردش سخته ، فعلا هم چیزی در باره اینتل سی پیدا نکردم

----------


## pswin.pooya

> برنامه نویسی شی گرا یه سری Overhead هایی داره، مثلا برای virtual  function ها که خیلی هم استفاده میشه افت پرفورمنس ایجاد میکنه و... برای  همین یه مقدار حرکت به سمت عدم استفاده از قابلیتهای شی گرایی مثل ارث بری  چندگانه و... است، به دلیل رسیدن به سرعت بیشتر.


نمی دونم این از کجا به ذهنتون رسیده اما توابع مجازی زمان کامپایل مشخص میشن و زمان لینک به درستی مثل توابع معمولی لینک میخورن میرن پی کارشون و برای توابعی که با یک نمونه درگیر هستن هم استفاده از شی گرایی یا توابع C هیچ تفاوتی از نظر پرفانس نداره. تنها موردی که از نظر کارایی میتونه C++‎‎‎ رو نسبت به C عقب بندازه سازنده ها و عملگرها (operators) هستند که سر بار زیادی رو ایجاد میکنن. حالا اگر برنامه نویس وارد باشه میتونه مشکل سازنده ها رو به راحتی حل کنه و عملگرها هم که اصلا برای یک ساختار  توی C ساپورت نمیشن که بخوایین بگین سریع یا کند شده. در حقیقت باید در هنگام کدینگ برای موارد خاص دقت بالایی رو به خرج بدین تا سربار اضافی رو به حداقل ممکن برسونید.

به نظر من مشکل اینجاست که هر مقدار به سمت کدینگ راحتر پیش میریم جزئیات بیشتری نادیده گرفته میشه و در نتیجه افت کارایی به مراتب بیشتر میشه.



> انتخاب خود من برای شروع C هستش ولی در مورد کمپایلر مطمعن نبودم و دوستان  هم زحمت کشیدن میگن vc ، ولی من تو VC فقط با MFC کار کردم هیچ ایده ای در  مورد VC بدون MFC ندارم و نسخه ای vs2005 رو که داشتم نگاه کردم و همراهش  VC نبود و فقط نسخه های .net رو داشت.
> قدیما که vc2 یا 3 بود یه ویزاردی برای c وجود داشت که برای ساخت گیم تو  مایه های دوم وجود داشت آلان نمی دونم وضعیت به چه صورت هستش چون بعد از  نسخه vc6 دیگه کمپایلر جدیدی از این خانواده رو نصب نکردم.
> WC رو هم دانلود کردم و نصب کردم از نسخه تحت داس خیلی بهتر شده ولی صحبت و  نظر دادن در موردش سخته ، فعلا هم چیزی در باره اینتل سی پیدا نکردم


بازی سازهایی مثل جان کارمک هستن که از سی استفاده میکنن اما اگر میخوای بعدا راحت باشی روی C++‎‎ سوئیچ کن. و داخل همون ویژوال استادیو در زمان نصب گرینه VC++‎‎.net 2005 رو انتخاب کن و از ویزارد win32 application و یا win32 consol  استفاده کن. اما اگر بازهم ترجیحت C هستش میتونی از کامپایلر GCC استفاده کنی که به نظر من بهترین گزینه برای اینکار هست.

----------


## gbg

GCC از قدیم هم بود ولی اصلا باهاش کار نکردم
اگه کسی در مورد اطلاعات داره بگه همچنین اینتل سی
ممنون

----------


## pswin.pooya

GCC جزء قدیمترینها هستش. کار باهاش خیلی راحته و مهمتر از همه یک کراس کامپایلر هست که بهترین ساپورت رو هم بین کامپایلرهای معروف از C++‎0x میده. همینطور گزینه های خیلی زیادی رو برای ست کردن موارد زیادی رو داخل فابل نهایی میده که نهایتا با ld میتونه یک مجموعه کامل رو تشکیل بده.

GCC برای کامپایل برنامه های لینوکس و البته خود هسته سیستم عامل لینوکس و هسته سیستم عاملهای دیگه ه ای هم استفاده میشه. تحت ویندوز شما باید MinGw کار کنین (یه سرچ در مورد نحوه استفاده بزنی کافیه) ولی تحت لینوکس هم میتونی به روش زیر باهاش کار کنی:

برای برنامه های سی:
gcc test.c -o test.o

برای برنامه های C++‎:
g++ test.cpp -o test.o

اگر میخوای کتابخونه هایی مثل OpenGL رو به لینکرش بدی:
g++ test.cpp -o test.o -lGL

اگر میخوای با استاندارد C++‎0x کار کنی:
g++ test.cpp -o test.o std=C++‎0x

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

برای برنامه نویسی ویندوز GCC به دلایل زیادی مثل امکان یکپارچه نشدنش با محیطهای توسعه معروفی مثل ویژوال استادیو گزینه چندان مناسبی نیستش مگر اینکه هدف خاصی مثل کراس پلتفرم بودن بازی و یا موارد مشابهی مد نظرت باشه. من خودم داخل انجینم دو نوع هدر ماکرو ویژوال C++‎ و GCC رو قرار دادم تا بتونم به طور کامل انجینم رو پورت کنم.

----------


## vcldeveloper

> نمی دونم این از کجا به ذهنتون رسیده اما توابع مجازی زمان کامپایل مشخص  میشن و زمان لینک به درستی مثل توابع معمولی لینک میخورن میرن پی کارشون


متدهای virtual در زمان اجرا resolve میشند. هر تابع virtual در یک کلاس به یک مدخل در جدول vmt اون کلاس اشاره میکنه. در زمان اجرا، از روی این مدخل vmt مشخص میشه که کدوم یک از نسخه های override شده اون متد باید اجرا بشه. به همین جهت، فراخوانی متدهای virtual به مقدار ناچیزی از فراخوانی متدهای static کندتر هست.

----------


## khorzu

- AAA يعني چيه ؟
- به نظر من هم متود هاي ويرچوال بعد از كامپايل مفهوم ندارن . اگه اين اشتباهه لطفا يكم توضيح بديد .



> تنها موردی که از نظر کارایی میتونه C++‎‎‎‎ رو نسبت به C عقب بندازه سازنده ها و عملگرها (operators) هستند که سر بار زیادی رو ایجاد میکنن.


- توضيح مي ديد لطفا ؟

----------


## pswin.pooya

> متدهای virtual در زمان اجرا resolve میشند. هر تابع virtual در یک کلاس به  یک مدخل در جدول vmt اون کلاس اشاره میکنه. در زمان اجرا، از روی این مدخل  vmt مشخص میشه که کدوم یک از نسخه های override شده اون متد باید اجرا  بشه. به همین جهت، فراخوانی متدهای virtual به مقدار ناچیزی از فراخوانی  متدهای static کندتر هست.


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




> نقل قول:
>  	 	 		 			 				تنها موردی که از نظر کارایی میتونه C++‎‎‎‎‎ رو نسبت به C عقب بندازه  سازنده ها و عملگرها (operators) هستند که سر بار زیادی رو ایجاد میکنن. 			 		 	 	 
> - توضيح مي ديد لطفا ؟


مواردی وجود داره که نیازی به اجرای سازنده نیست. مثلا ما میدونیم که قرار بعدا حتما اعضاء مقدار دهی بشن. اگر سازنده پیش فرض یکسری اونها رو مقدار دهی کنه یک اضافه کاری پیش میاد که یه برنامه نویس با تجربه میتونه از اینکار جلوگیری کنه.

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

----------


## vcldeveloper

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


بحثی که در پست شماره 45 شما بهش جواب دادید، درباره overhead برنامه نویسی OOP بوده. در اونجا در پاسخ کاربری که overhead متدهای مجازی را بالاتر از متدهای static ذکر کرده، شما عنوان کردید که virtual methods در زمان کامپایل مشخص میشند. 

استفاده از virtual methods در OOP به خاطر همین بحث Polymorphism هست، و گرنه ضرورت خاصی برای وجودشان نبود. فراخوانی virtual methods هم همانطور که در پست قبلی اشاره کردم، نسبت به متدهای static، در runtime مقداری سربار داره.




> در حقیقتدر زمان اجرا برای چند ریختی در مورد اونها تصمیم گرفته میشه


به همین دلیل هست که سربار بیشتری دارند، چون باید اشاره گری که به متد مربوطه اشاره میکنه، از vmt پیدا بشه.

البته از اونجایی که اطلاعات من درباره دلفی هست، و شک کردم که شاید در ++C این متدها را به شکل دیگه ایی پیاده سازی کرده باشند، یه سرچ کوچیک درباره اش کردم، و ظاهرا در ++C هم به همون شکل پیاده سازی شدند:

http://stackoverflow.com/questions/2...nction-to-call

----------


## gbg

نه خیر آقای کشاورز درست میگی
1 - 
چون من مدت زیادی که بحث تئوری این بحث ها رو گذاشتم کنار زیاد تعاریف و اینجورچیزای سی ++ یادم نیست ولی مطمعن هستم که سربار زیادی برای سیستم داره ، البته اون سال ها کامپیوتر ها هم ضعیفتر بودن ، شاید درحال حاضر برای سرعت این پردازنده های ، سربار زیادی به حساب نیاد اینجور کارا!

2 -
یکی از دلایلی که باعث شد برم سمت دلفی این بود که اصلا با vc حال نکردم و مخصوصا از MFC خوشم نیومد.
به هر حال تصمیم گرفتم به راه گذشته برگردم و برم دنبال زبان سی++ ولی نه برای کارای تجاری

3-
از دوستی که درباره GCC توضیح داده بود هم ممنون ، می خواستم ببینم این کامپایلر چقدر برای بازی مناسب هستش و ترجیح استفاده بین این کامپایلرها کدومه (برای بازی سازی)

----------


## pswin.pooya

> از دوستی که درباره GCC توضیح داده بود هم ممنون ، می خواستم ببینم این  کامپایلر چقدر برای بازی مناسب هستش و ترجیح استفاده بین این کامپایلرها  کدومه (برای بازی سازی)


از اونجا که اکثر بازیها برای پلتفرم ویندوز ساخته میشه بهترین گزینه ها داخل ویندوز کامپایلر اینتل و مایکروسافت ویژوال C++‎ هست اما اگر پلتفرمهای دیگه و یا برنامه نویسی سیستمی مد نظرتون باشه کامپایلر GCC توصیه میشه. اما بیخودی به کامپایلر گیر ندین چون هر کدوم که باشه تاثیر چشم گیری رو نصبت به بقیه اعمال نمی کنه به عنوان یک مبتدی بهترین گیزینه MSVC هست و بس اگر یه روز خواستین که برین سراغ توسعه برای MAC و یا لینوکس و حتی سیستم عامل های به غیر مایکروسافت بهتره که از GCC استفاده کنید. البته کامپایلر اینتل هم از لینوکس و مک پشتیبانی میکنه.

----------


## gbg

بقیه دوستان نظری ندارن؟

----------


## seyedof

> بقیه دوستان نظری ندارن؟


سلام

آقا شما داری نظر سنجی میکنی یا واقعا میخوای راه درست رو بدونی یا اینکه ما رو سر کار گذاشتی؟
اینهمه دلیل و سند کافی نیست که شما تصمیم بگیرید با سی بنویسین یا نه؟ اگه بخواین روی هر موضوع بدیهی اینهمه گیر بدید تا دویست سال دیگه به رندر کردن یک مکعب هم نمیرسید چه برسه به بازی!

VC++‎ ولسلام.

ممنون علی

----------

