# مباحث متفرقه برنامه نویسی > طراحی و ساخت بازی‌های کامپیوتری >  Kochol Game Engine

## kochol

سلام
من امروز یه گیم انجین برای خودم ساختم من از ساخت این چند هدف را دنبال می کنم.
1. یادگیری
2. کار گروهی در ایران من می خواهم این پروژه بصورت اپن سورس فقط دست ایرانیان باشه و اگه کسی مایل بود با همدیگه هم یاد بگیریم هم یه انجین برای خودمان داشته باشیم
3. می خواهم استفاده از این موتور ساده باشه حالا این نمونه کد را بررسی کنید ببینید که ساده به نظر می یاد یا نه.

Imports KGE   'We want to use Kochol Game Engine

Public Class Form1
    Inherits System.Windows.Forms.Form
    Private KgeX As New KgeX
    Dim Kge3D As Kge3D
    Dim xFile As KgeMesh
    Dim xFile2 As KgeMesh

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Kge3D.ColorFill(Color.OliveDrab)
        xFile.Draw()
        xFile2.Draw()
        Kge3D.Flip()
    End Sub

    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated
        Kge3D = New Kge3D(KgeX, Me)
        Dim Cam As New KgeCamera(Kge3D, New KgeVector3(0, -300, 55), New KgeVector3)
        xFile = New KgeMesh(Kge3D)
        xFile.LoadFromFile("C:\Documents and Settings\Kochol Soft\My Documents\Visual Studio Projects\C#‎\d3dtest01\bin\Debug\tiny.x")
        xFile2 = New KgeMesh(Kge3D)
        xFile2.LoadFromFile("C:\Documents and Settings\Kochol Soft\My Documents\Visual Studio Projects\C#‎\d3dtest01\bin\Debug\Warrior1.x")
    End Sub
End Class

----------


## kochol

سلام
من سورس این برنامه را قرار می دم 
کلاسهای ایجاد شده تا به این جا:
KgeX
Kge3D
KgeVector3
KgeCamera
KgeMesh
طراحی این کلاسها طوری هست که بدون داشتن دایرکت ایکس اس دی کی هم بشه از این موتور استفاده کرد ولی دیگه برای تغییر سورس ان باید حتما دایرکت ایکس اس دی کی را نصب کنید.

سلام سورس آپدیت شدشو تا تاریخ 23/9/84 را قرار دادم

----------


## afshinadly

سلام

امیدوارم موفق باشی و کارهای بعدیتو ببینیم   :تشویق:  
اگه کمکی از دست ما بر میاد بگو ؟

----------


## kochol

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

مقدمه
Managed DirectX was released with the latest version of the core DirectX libraries in DirectX9. It enables developers using the new .NET languages (i.e. C#‎, VB.NET, etc.) to develop rich multimedia applications with DirectX. Unfortunately the Managed DirectX runtime was released without adequate documentation, and developers are having a hard time figuring out the best way to write managed applications. This book covers how to use the Managed DirectX objects, how they differ from the core DirectX libraries, and how to create these rich multimedia applications in C#‎. It also covers in depth graphics techniques and the new high-level shader language shipping with DirectX9.

لینکهای دانلود:
http://docs.cirkva.net/E-books/!naucne/Game%20programming/Managed%20DirectX%209%20Kick%20Start%20-%20Graphics%20and%20Game%20Programming%20-%20Sams.chm

http://www2.fixdown.com/en/soft/14203.htm


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

----------


## kochol

Small Update
سلام
کلاسهای ایجاد شده:
KgeSprite
کلاسهای تغییر کرده:
KgeX
KgeMesh
باگهای رفع شده:
باگ شماره 1.

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

این کلاس هنوز از Trancparenty پشتیبانی نمی کنه یعنی نمیشه یه رنگ از عکس را محو کرد و همچنین عکس های نمایش داده را تبدیل می کنه به یکی از اندازه های 2*2 4*4 8*8 16*16 32*32 64*64 128*128 256*256 ... 4048*4048 که البته در خود کتاب هم نوشته بود اگر من کدهای این کتاب را گیر بیاورم فکر کنم بتونم این دو تا کمبود را در کلاس درست کنم و همچنین قابلیت انیمیشن هم به این کلاس می دهم.

درخواست کمک:
هر کسی که مایل بود و به اینترنت همیشه وصل بود لطفا با emule برای من فایل کدهای کتاب Managed directx را بگیرد و من هر قسمتی را که خواستم به من بدهد تا من بتونم کارهایی را که باید انجام بدهم راحتتر و سریع تر انجام بدهم. به خاطر اینکه تعداد افرادی که این فایل را دارند در ایمول کم هست پس من هم که در روز 1 ساعت بیشتر نمی تونم انلاین بشم خودم نمی تونم دانلودش کنم.

----------


## kochol

سلام
کلاس جدید:
KgeTimer
این کلاس فکر کنم بسیار پر کاربرد باشد و در بازی ها زیاد استفاده بشه کلا کار با این کلاس ساده هست و دارای سا تابع برگشتی هست که:
1. MilliSecondsPassed
تعداد میلی ثانیه هایی که از ایجاد کلاس یا از آخرین زمانی که این تابع فراخوانده شده را بر می گرداند. از 0 تا 999 میلی ثانیه
2. SecondsPassed 
مثل تابع بالا هست ولی ثانیه ها را برمی گرداند. از 0 تا 59 ثانیه
3. NextFrame
این هم وقتی است که شما می خواهید کاری را بر اساس مقداری از زمان که گذشته استفاده کنید. معمولا در هر بار که صفحه را رندر می کنید چک می کنید که این تابع مقدار true را دارد یا نه اگر داشت هر کاری که باید انجام شود را به او می دهید. این زمانی هم که باید چک کند از طریغ خاصیت Interval قابل تعریف هست.
البته باید یه روال Reset هم برای این کلاس بسازم.

کلاس به روز شده:
KgeX
اگر کارت گرافیک شما بتونه و توانایی ساپورت را داشته باشه تکستچر ها را شفاف تر و دقیق تر نمایش می دهد.
به اصطلاح اگر کارت گرافیک شما از MinifyAnisotropic و  MagnifyAnisotropic پشتیبانی کنه موتور به صورت اتوماتیک استفاده می کند.

کارهای بعدی:
احتمالا بر روی کلاس KgeMesh کار می کنم و تغییرات زیادی را به آن می دهم.

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

----------


## kochol

سلام
من این چند وقته داشتم بیشتر بر روی پایه و اساس موتور فکر می کردم و اینکه چه چیزهایی لازم دارد و چگونه باید باشد به همین دلیل ساختار شی گرایی و راحتی کار با ان را تغییر دادم.
ساختار قبلی طوری بود که کلاس KgeX بسیار بزرگ می شد و کلاسهای دیگر همه ی وظایف خود را به این کلاس واگذار می کردند پس به کل این کلاس را حذف کردم و کدهاشو در بین کلاس های دیگر تقسیم کردم.
و کلاس Kge3D هم به KgeScreen تغییر نام پیدا کرد بقیه کلاس ها هم کار خود را خودشان انجام می دهند اینطوری برنامه خیلی قابل فهم تر شد.

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

----------


## kochol

سلام
کلاسهای جدید:
Kge2DSprite
این کلاس برای نمایش انیمیشانهای دو بعدی هست و کلا اگر بخواهیم بازی 2 بعدی بسازیم باید از این کلاس استفاده کنیم هر چند که می شود از نور پردازی و اشیای 3 بعدی هم در صفحه استفاده کرد ولی کلا این کلاسبرای این کار هست که من یکی از ارزوهام ساختن این کلاس بود چون همیشه دوست دارم بازیهای 2 بعدی بسازم تا 3 بعدی البته هنوز انیمیشن را ساپورت نمی کنه که من فکر کنم تا فردا بتونم این رو هم درست کنم.
KgeImages
این کلاس به نظر من یکی از شاهکارهای این موتور هست که البته نه سازندهای داره نه هیچی و کاربر هیچ استفاده ای از این کلاس نمی تونه بکنه حالا کار این کلاس عجیب چیه این کلاس تمام تکستچرها را در کل برنامه کنترل می کند اگر بخواهیم که یک تکستچری که قبلا لود شده را لود کنیم این کلاس شماره تکستچر قبلی را می فرستد که یک اشاره ای می کند و تکستچر جدید را لود نمی کند و همینطور هم این کار را برای ست کردن تکستچر بر روی دیوایس انجام می دهد.

کلاس های تغییر پیدا کرده:
KgeScreen
این کلاس تغییر زیادی نکرده فقط یکسری تغییرات جزیی برای دستیابی به اندازه صفحه در اون ایجاد شده هست.
KgeCamera
این کلاس هم یک روال بهش اظافه شده که دوربین حالت 2 بعدی را فعال می کند.

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

----------


## aakh1361

تا حالا بازی رو به اتمام رسوندید ؟
 :kaf: 
امیدوارم موفق باشی

 :تشویق:   :تشویق:   :تشویق:

----------


## kochol

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

----------


## kochol

سلام
بالاخره این موتور حداقل به پای موتور دو بعدی MCDX رسید کاری که آنها می خواستند در MCDX 3 انجام بدهند من در نسخه های ابتدایی موتورم انجام دادم.
حالا کمکم شروع می کنم و اول بازی Kochol Blocks را با این موتور می سازم تا ایده هایی را که داشتیم مثل چرخوندن کل صفحه حالا قابل انجام هست.

کلاسها تغییر کرده:
Kge2DSprite
به این کلاس متدهایی اظافه شد که باعث می شه به راحتی ما بتونیم از انیمیشن در بازی هایمان استفاده کنیم و کار با ان طبق اصول  اولیه موتور ساده هست.
که من امیدوارم که حالا کسانی پیدا بشن و حاضر باشن با  این موتور بازی های 2 بعدی بسازن کار بعدی که می خواهم انجام بدهم اینه که شما بتونین یک عکس را برعکس نمایش بدهید و همینطور هم اجسامی که خارج از دید دوربین هستند را حذف خواهم کرد.

----------


## kochol

سلام
کلاس های جدید:
Kge2DControl
این کنترل را اظافه کردم به موتور که با کشیدن آن بر روی فرم کلی از کارها راحتتر می شه و اتوماتیک دوربین دو بعدی را تنظیم می کنه و دارای رویدادهای مفیدی هست.
این کنترل یک خاصیت داره بنام angle که بر حسب درجه کل دوربین را می چرخونه

کلاس های تغییر کرده:
Kge2DSprites
حالا تصاویری که خارج از دوربین باشن نمایش داده نمی شوند و همینطور هم سه خاصیت به این کلاس اضافه شده تا بتونه اطلاعاتی را درون شی خود جای دهد که بعدا حتما به کار خواهد آمد.
یه خاصیتی هم که بهش اظافه شد به نام flip که عکس را برعکس نمایش می ده.

----------


## PalizeSoftware

موفق باشی
ادامه بده

----------


## kochol

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

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

کلاسهای تغییر کرده:
Kge2DSprite
KgeScreen

کار بعدی هم که می خوام انجام بدم احتمالا ساخت Particel System هست من از توی کتاب Focus On 2D in Direct3D یه چیزهایی یاد گرفتم و در چند روز آینده هم فکر کنم بسازمش.

----------


## aakh1361

> سلام
> این که بازی نیست یه موتور برای ساخت بازی ها هست که سود آورترین کاری که انجام میده این هست که لازم نیست کدها را دوباره بازنویسی کنید.


البته ببخشید اونجا یک *ای*  جا افتاد

منظورم این بود که با این موتور بازی ای تا حالا نوشتید ؟

----------


## kochol

نه ما که خودم هنوز بازی با این موتور ننوشته ام چرا که این موتور خیلی نو پا هست و امروز 18 روز می شه که شروعش کردم ولی کاملا توانایی ساخت بازیها ی دو بعدی با امکانات زیاد از قبیل نور پردازی ادقام با اشیاه 3 بعدی و نورپردازی را دارد من هم قصد ندارم فعلا برای این موتور بازی بسازم اول باید دمو بسازم

----------


## kochol

سلام 
خیلی وقته که آپدیتی براتون ندادم ولی بهتون بگم که یه کار هایی تفریحی کردم 
مثل ساخت باران. 
کلاسهای جدید: 
KgeParticles.Rain 
که برای استفاده از باران هست در برنامه یه اسکرین شات هم براتون می زارم 
کلاس های تغییر کرده: 
KgeParameter 
این کلاس را طوری ساخته ام که بشه با کلاس Kge2DSprite هماهنگی کامل داشته باشه و کلا با هر کلاس دیگری و این باعث می شه که با یه ورتکس بافر بتونیم خیلی اشکال را رسم کنیم. 
مثال 
dim param1 as new kgeparameter.Transform 
param1.x +=1 
... 
Kge2DSprite.Draw(param1) 
keg2dsprite.draw(param2) 
... 
خوب بید

----------


## aakh1361

> خوب بید


اره جیگر  
ولی نمی دونم چرا به نظرم قطره ها رو به بالا میرن

----------


## kochol

سلام
شاید به خاطر این هست که قسمت پایین قطره ها یعنی انتها انها را با ابی پر رنگ پر کردم و قسمت بالایی آنها را با آبی کم رنگ پر کردم

----------


## Iran-PC

خیلی خیلی عالیه.
کیف کردم.
ماشالا
ای ول
ادامه بده.

----------


## kochol

> خیلی خیلی عالیه.
> کیف کردم.
> ماشالا
> ای ول
> ادامه بده.


سلام
خیلی ممنون انتظار اینهمه تشویق را اصلا نداشتم خودم هم که این موتور را ساختم شاید قدر شما ذوق نکردم
ممنون از لطفتون

----------


## Moharram

کوچول جون، خیلی کارت درسته، ادامه بده

----------


## kochol

> کوچول جون، خیلی کارت درسته، ادامه بده


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

----------


## Ali Rahbar

سلام کوچول.
من دوست دارم عضو تیم تو شوم.
من 15 سال دارم و با DirectX8 کار میکنم.
من خودم یک موتور سه بعدی طرای کرده ام.تحت سی++ و بوسیله ی DirectX8.
موتور من دارای AntiAlias نیز است.
و کلاس های آن عبارتند از:

IEngine
ICamera
IMesh
IMesh2
ILight_Omni
ILight_Spot
ILight_Directional
ILightCache
IMeshCache
من هنوز در حال کامل کردن آن هستم.
ولی ما چگونه میتوانیم با هم یک تیم شویم؟

----------


## kochol

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

----------


## Ali Rahbar

از این که به من  جواب دادید ممنونم .
من چه طور میتوانم شما را ببینم .

----------


## kochol

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

----------


## kochol

سلام به تمام دوستان 
من شروع کردم به خوندن سی ++ و حالا هم می خواهم یه انجین با این سی ++ بسازم از اول احتمالا در سایت چیزهای مفید زیادی خواهیم داشت و الان 3 نفر هستیم.

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

آدرس سایت kge.mybbland.com

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

----------


## Iran-PC

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

----------


## kochol

سلام
من به علت استقبال گسترده شما یک سایت مجزا ساختم که از اول شروع به یاد دهی بازی ساختن بکنم البته با کمک شما در سایت ما عضو شوید و با ما رشد کنید.
http://irangamedev.com

----------


## Iran-PC

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

----------


## Ehsansh

کوچول خان.
میتونی یه مرجع آموزش DirectX راه بندازی که مثل آموزش OpenGL در سایت NeHe باشه؟

----------


## kochol

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

----------

