بؤیوک تانرینین آدی ایله
سلام دوستان.
امروز اومدم تا برای این چند وقتی که نیستم. دو تا سایت معرفی کنم. این سایتها در مورد ساخت بازی با وی بی هستند. یه سر بهشون بزنین ببینین چجوریه:
http://rookscape.com/vbgaming/
راستی تا یادم نرفته اینم بگم که اگه میخواین بازی سازی رو به صورت جدی دنبال کنین، سعی کنین زبان ++C زو یاد بگیرین (البته اگه بلد نیستین) و قید ویژوال بیسیک رو بزنین.
راستی حتما نظراتتون رو حتما بگین....
در ضمن دوستانی که مایل به تبادل لینک هستن تو قسمت نظرات اعلام کنن.
تا بعد.......
گؤزه ل تانرینین آدی ایله
سلام دوستان.
از لطف همتون ممنونم ولی یه چند وقتیه که درسای دانشگاه بدجوری سرمو شلوغ کرده ولی ظرف دو هفته آینده حتما درس جدید رو میذارم. پس فعلا تا اون موقع. (من هم الآن برم یه کم فیزیک بخونم برا میان ترم
.)
آدرس دانلود در persiangig:
http://javadnuri.persiangig.com/Game_Programming/Snake.zip
آدرس دانلود در تك كليك:
http://www.takclick.com/modules.php?name=News&file=article&sid=380&mode=&order=0&thold=0
انشاءالله تا فردا درس جديد رو ميذارم رو وبلاگ
ببخشید که نمیتونم آپدیت کنم. آخه سرم خیلی شلوغه. امروز ميخوام سايت تك كليك رو معرفي كنم. تو اين سايت ميتونين سورس كد هاي مختلف رو ببينين و از مطالب آموزشي و فروم سايت استفاده كنين:
http://www.takclick.com/index.php
سورس بازی که قبلا گذاشته بودم و Ripway برداشتتش رو هم ميتونين از همين سايت دانلود كنين:
http://www.takclick.com/modules.php?name=News&file=article&sid=373&mode=&order=0&thold=0
لينك سايت در سمت راست صفحه و تو قسمت پيوندها موجوده.
نظر يادتون نره. منتظر باشين--- بر مي گردم.
من دوباره برگشتم و به زودی درسهای جدید رو باهم دیگه دنبال می کنیم.
امروز اومدم ازتون خداحافظی کنم. چون میخوام تو این ۵ ماه باقیمونده برای کنکور با جدیت مطالعه کنم.
به عنوان هدیه این بازی رو داشته باشین. این بازی همون پارانیود خودمونه. (توپ و راکت) که Tutorial اون رو میتونین با کمی تغییر در سایت زیر پیدا کنین. حالا این بازی رو داشته باشین و سورس کدش رو خوب ببینین. شاید بعضی وقتها سر زدم. اگه سVالی بود بپرسید. نظر هم یادتون نره.
دانلود سورس کد: http://h1.ripway.com/turkboy/Folder%20Name/BrkOut.zip
http://francis.dupont.free.fr/coindev/english/
در سایت بالاا شما میتونید تیوتوریالهایی رو برای کار با دایرکت ایکس در VB پیدا کنید.
فعلا خداحافظ
امیدوارم حالتون خوب باشه.
ببخشید که نمیتونم آپدیت کنم. راستی شما هم که میاین اینجا یه نظری بدین منم ببینم اگه شماها دوست دارین ادامه بدم و اگه هیشکی این مطالب رو نمیخونه چرا باید بیخودی مطلب بنویسم. لطفا نظرتون رو اعلام کنید.
به نام خدا
دوستان سلام امروز اومدم که درس دوم رویاد بگیریم.
اینم بگم که چون من الآن دانش آموز مقطع پیش دانشگاهی (رشته ریاضی) هستم،به خاطر بلای قرن، کنکور (بخوانید خونخور) فکر نمی کنم که بتونم زود به زود آپدیت کنم.
شما هم دعا کنید که خدا توکنکور به من کمک کنه. مرسی. حالا درس رو داشته باشید.
برنامه های دایرکت ایکس در دو حالت اجرا میشند:
1- حالت تمام صفحه (Full Screen Mode)
2- حالت پنجره ای (Windowed Mode)
برنامه ای که امروز میخوایم بنویسیم در حالت تمام صفحه اجرا می شه.
خوب دست به کار بشید. ویژوال بیسیک 6.0 رو اجرا کنید و یه پروژه جدید از نوع استاندارد ایجاد کنید.
برای این که بتونیم از توابع اشیای دایرکت ایکس استفاده کنیم باید کتابخانه (Type Library) اون رو به پروژه مون اضافه کنیم.
برای اینکار بر روی منوی Project کلیک کنید و گزینه References رو انتخاب کنید. تو دیالوگ باز شده و در لیست موجود دنبال DirectX 7.0 for Visual Basic Library Type بگردید و کنار اون یه تیک بذارید و بعدش روی OK کلیک کنید.
حالا برای اینکه ما بتونیم از دایرکت ایکس استفاده کنیم باید یک شیئ از نوع DirectX7 تعریف کنیم. پس در قسمت General فرمتون یک شیئ از این نوع تعریف کنید. اینجوری:
Dim DX As New DirectX7
اشیاء دیگری که تعریف خواهیم کرد اینها هستند:
1- یک شیئ از نوع DirectDraw7 :
این همون شیئی که به ما کمک میکنه که سطوح رو ایجاد کنیم:
Dim DD As DirectDraw7
2- 2 شیئ از نوع DirectDrawSurface7:
این اشیاء سطوحی هستند که ما شکل ها، متون و ... رو بر روی اونها نگارش می کنیم(تخته سیاه J)
Dim Primary As DirectDrawSurface7 ‘سطح اصلی
Dim Backbuffer As DirectDrawSurface7 ‘ پشت صحنه!
البته اگه نمیدونید که این اشیاء چی هستند، زیاد نگران نباشید چون بعدا حل میشه. یه متغیر عمومی از نوع Boolean هم تعریف می کنیم. این متغیر مشخص می کنه که تا چه زمانی برنامه باید اجرا بشه:
Dim EndPro As Boolean
حالا ادامه میدیم.
طریقه کار به این صورته که اول ما شیئ DD رو مقداردهی میکنیم. یعنی در حقیقت به DirectX7 میگیم که شیئ DD رو برای ما ایجاد کنه. پس در ادامه (همون Form_Load) بنویسید:
Set DD = DX.DirectDrawCreate ("")
حالا باید به شیئ DD که از نوع دایرکت دراو 7 هست بگیم که ما میخوایم از کدوم فرم برنامه مون استفاده کنیم. مثلا من فرض کردم که فرم اصلی برنامه ام Form1 هست. (البته شما میتونید از شیئ Me نیز استفاده کنید). همچنین باید به کامپیوتر بفهمونیم که میخوایم برنامه مون تمام صفحه باشه یا نه. برای اینکار از متد SetCooperativeLevel شیئ DD استفاده می کنیم:
DD.SetCooperativeLevel Form1.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE
حالا باید رزولوشن صفحه نمایش رو تغییر بدیم. فرض کنیم که سیستم شما از حالت 480×640 پشتیبانی می کنه. برای اینکار از متد SetDisplayMode شیئ DD استفاده می کنیم:
DD.SetDisplayMode 640, 480, 16, 0, DDSDM_DEFAULT
آرگومان اول عرض، آرگومان دوم Height و آرگومان سوم عمق بیت حالت رو نشون میده. (اون یکی ها هم ref و Mode هستند.)
حالا میخوایم سطوحمون رو مقداردهی کنیم. کدهای زیر رو به پروژه خود بیفزایید:
Dim ddsd As DDSURFACEDESC2
ddsd.lFlags = DDSD_BACKBUFFERCOUNT Or DDSD_CAPS
ddsd.lBackBufferCount = 1
ddsd.ddscaps.lCaps = DDSCAPS_COMPLEX Or DDSCAPS_FLIP Or DDSCAPS_PRIMARYSURFACE Or DDSCAPS_VIDEOMEMORY
حالا برای اینکه این درس زیاد طولانی نباشه و من هم یه کمی مطلب رو جمع و جورش کنم(برای بعد) توضیح این کدها رو میذارم برای بعد، همین قدر بدونید که برای اینکه بتونید یه سطح رو ایجاد کنید باید یه شیئ از نوع DDSURFACEDESC2 رو بهش وابسته کنیم.
حالا سطح اصلی (Primary) خودمون رو ایجاد کنیم. این سطح همون سطحی یه که جلوی چشم کاربر هستش و کاربر اونو میبینه. (اینکه چه جوری کامپایلر میفهمه که این همون سطح هست برمیگرده به خصوصیات شیئ ddsd از نوع DDSURFACEDESC که بالا مقداردهی کردیم و این شیئ مشخص میکنه که Primary تخته سیاه باشه). با استفاده از متد CreateSurface شیئ DD این سطح رو ایجاد می کنیم. آرگومان این تابع همون شیئ بالاییه) داریم:
Set Primary = DD.CreateSurface(ddsd)
حالا باید سطح BackBuffer رو مقداردهی کنیم. ولی شاید بپرسید ما که Primary رو داریم دیگه این BackBuffer برای چیه؟ باید بگم برای اینکه از پرپر زدن صفحه نمایش جلوگیری کنیم، ما بجای اینکه همه چیز رو مستقیما روی سطح Primary رسم کنیم، میایم و اول روی سطح (BackBuffer) که متصل به Primary هستش رسم می کنیم و صحنه آماده رو منتقل می کنیم به Primary (در حقیقت میتونیم بگیم که BackBuffer چرک نویس ما هست).
پس حالا ما سطح BackBuffer رو متصل به سطح Primary ایجاد می کنیم. داریم:
Dim ddscaps As DDSCAPS2
ddscaps.lCaps = DDSCAPS_BACKBUFFER Or DDSCAPS_VIDEOMEMORY
Set Backbuffer = Primary.GetAttachedSurface(ddscaps)
حالا تقریبا همه چی آماده ست.
در ضمن فکر میکنم همه با نوع داده RECT آشنایی داشته باشند (اگه کسی آشنایی نداره در قسمت نظرات بگه تا من اونو هم توضیح بدم). در دایرکت ایکس برای اینکه بخوایم یه قسمتی از صفحه رو مشخص کنیم از این نوع داده استفاده می کنیم. یه متغیر هم از این نوع تعریف می کنیم تا کل صفحه رو مشخص کنیم. (برای رنگ آمیزی کل سطح و ...) توجه داشته باشید که این نوع داده در کتابخانه DirectX موجود هست و شما نیازی ندارید که مثل برنامه های دیگه این نوع رو تعریف کنید :
Dim rec As RECT
rec.Bottom = 480
rec.Left = 0
rec.Right = 640
rec.Top = 0
اینو به یاد داشته باشید که ما در برنامه هایی که با دارکت ایکس می نویسیم. کل عملیات رو در قالب یه حلقه (معمولا حلقه Do) انجام میدیم. به این صورت که پشت سر هم به طور مداوم صحنه های خودمون رو بر روی سطح ترسیم می کنیم و به Primary منتقل می کنیم. پس در پروژه خویشتن ( و در همان Form_Load، یعنی ادامه کدهای قبلی) بنویسید:
Do While EndPro=False
Backbuffer.BltColorFill rec, 0 ‘پاک کردن صفحه
Backbuffer.SetForeColor RGB(256, 0, 0) ‘ تنظیم رنگ ترسیم
Backbuffer.DrawText 300, 250, “Hello World”, False ‘درج متن
DoEvents ‘توضیح در پایین
Primary.Flip Nothing, DDFLIP_WAIT ‘Jانتقال از چرک نویس به پاک نویس
حالا ببینیم که چیکار کردیم. تا زمانی که مقدار متغیر EndPro نادرست است این عملیات رو انجام میدیم:
· برای پاک کردن صفحه هر بار صفحه رو با رنگ سیاه پر میکنیم. متد BltColorFill سطح رو به روش بلیت پر میکنه. یعنی این که در حافظه مقادیر هر پیکسل رو برابر رنگی که بهش میدیم قرار میده(در اینجا این رنگ رو برابر 0 که همون سیاه هست قرار دادیم).
· با استفاده از متد SetForeColor رنگ تمام ترسیماتی که انجام میدیم رو عوض می کنیم.(به اصطلاح ForeColor سطح رو تغییر میدیم.)
· با استفاده از متد DrawText متن مورد نظرمون رو بر روی صفحه حک می کنیم. دو آرگومان اول مختصات x و y محل درج متن رو مشخص می کنند.
· مـــــــهـــــــم: وقتی ما پشت سر هم و بدون وقفه یه کاری رو انجام میدیم، برنامه دیگه چیز دیگه ای رو پردازش نمی کنه. بنابراین ما با این عبارت(DoEvents) به کامپایلر میگیم در هر بار انجام دستورات حلقه، دستورات دیگه ای مانند فشرده شدن کلید، کلیک ماوس و ... رو هم پردازش کنیم. اگه خیلی کنجکاو هستید، بعد از این که پروژه تون رو Save کردید یه بار برنامه رو بدون DoEvents اجرا کنید
· حالا صحنه ما آماده است پس اونو میذاریمش جلوی چشم کاربر. این کار با استفاده از متد Flip سطح Primary انجام میشه. (درمورد فلیپ بعدا اگه عمری باقی باشه توضیح میدم.)
هنگامی که متغیر EndPro مقدار Trueبگیره(هنگامی که کاربر قصد خروج دارد)، حلقه شکسته میشه و ما باید برنامه رو به پایان ببریم. پس حافظه ای که به سطوح و اشیاء دیگر اختصاص داده ایم رو آزاد میکنیم:
Set DD = Nothing
Set Primary = Nothing
Set Backbuffer = Nothing
Set DX = Nothing
End
در اینجا Form_Load به پایان میرسه. حالا فقط یه کار مونده. اون هم اینه کا وقتی کاربر کلید Esc رو فشار میده باید برنامه به پایان برسه، یعنی مقدار متغیر EndPro برابر True بشه. پس این خطوط کد رو به پروژه تون اضافه کنید:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then EndPro=True
End Sub
حالا برنامه رو اجرا کنید و از اولین برنامه ای که با دایرکت ایکس نوشتین لذت ببرین (البته اگه این اولین برنامه ایه که با دایرکت ایکس می نویسین.)
تمرین:
1- برنامه را طوری تغییر دهید که به جای عبارت Hello World نام خودتان را نمایش دهد.
2- برنامه را طوری تغییر دهید که به جای عبارت Hello World ، زمان سیستم را نمایش دهد.
3- کاری کنید که عبارت Hello World در روی صفحه به سمت چپ (یا راست حرکت کند)
برنامه امروز رو میتونین از اینجا دانلود کنین.
اگه اشکالی در انجام تمرینها بود و یا نیاز به راهمنایی داشتین در قسمت نظرات اعلام کنین.
راستی من از شما درخواست می کنم که حتما نظر خودتون رو درباره وبلاگ و شیوه آموزش و ... در قسمت نظرات بگین تا نقایص موجود اصلاح بشن.
این مطالب و توضیحاتی که من دادم برداشتهای خودو بوده و اگه اشکالی وجود داره دوستان بگن تا اصلاح کنیم.
Saygilarimal
اولو تانرینین آدی ایله
سلام.
امیدوارم حال همه خوب باشه.
امروز اومدم تا درس اول رو باهم یاد بگیریم.
راستی اینم بگم که در این دروس فرض شده که شما با برنامه نویسی ویژوال بیسیک آشنایی دارید.
ممکنه که این درس کمی برای شما خسته کننده باشه، برای همین سعی میکنم که این مقدمه را تا اونجایی که میتونم کوتاه کنم و مطالعه بیشتر رو به خود شما بسپارم.
همونطور که ممکنه حدس زده باشید، امروز میخوایم کمی مقدمه چینی کنیم.
جدای از الگوریتمهای ریاضی و … که در بازیهامون ازشون استفاده می کنیم، ما باید بدونیم که با چی میخوایم بازیمونو بنویسیم.
وقتی که میخوایم با ویژوال بیسیک بازی بنویسیم چه جوری باید اینکار رو انجام بدیم؟
برای نوشتن بازی ما باید بتونیم شخصیت ها و ... رو بر روی صفحه نمایش بدیم. ولی چه جوری؟
اگه بخوایم از توابع خود ویژوال بیسیک استفاده کنیم، که باید سرعت رو کمپلتاً بی خیال بشیم.
ممکنه بخواید از API ویندوز برای اینکار استغاده کنید – توابعی مثل BitBlt و ... – ولی باید بدونید که این توابع هم برای این کار زیاد مناسب نیستند. برای همین کار مایکروسافت تصمیم گرفت که یه کتابخونه خییلی خؤب برای این کار از خودش دروکنه J! بله درست حدس زدید: دایرکت ایکس
ولی بیشتر افراد (مثل خود من) وقتی اسم DirectX رو میشنون یهو رنگشون می پره ولی شما سعی کنید اینجوری نباشید چون برنامه نویسی با دایرکت ایکس خیلی راحت تر از این حرفاست.
در درس بعد یاد میگیریم که
1- دایرکت دراو (DirectDraw) چیست؟
2- DirectDraw رو بکار بگیریم
3- Resolution صفحه نمایش رو تغییر بدیم. (چون بیشتر برنامه هایی که ما اینجا می نویسیم در حالت 480×640 اجرا میشند.
4- یه متن ساده رو روی صفحه نمایش بدیم.
5- برنامه مونو ببندیم
Saygilarimla
اولو تانرینین آدی ایله
سلام .
در این وبلاگ شما یاد خواهید گرفت که چگونه با استفاده از ویژال بیسیک بازیهای دوبعدی و سه بعدی بسازید.
فعلا خداحافظ
Saygılarımla