|
|
|||
|
درباره وبلاگ
![]() با سلام خدمت شما بازديد كننده محترم . اين وبلاگ در جهت آموزش تكنيك هاي پيشرفته ويژوال بيسيك و رفع مشكلات شما عزيزان و همچنين دانلود برنامه هاي كاربردي و جذاب موبايل فعاليت مي كند وآماده پاسخگويي به سوالات و نظرات شما بازديدكنندگان محترم مي باشد. با تشكر مدير وبلاگ ( سيد كمال رضايي)
منوي وبلاگ
آرشيو مطالب گذشته
هفته چهارم بهمن 1386
هفته اوّل بهمن 1386 هفته چهارم دی 1386 هفته سوم دی 1386 هفته دوم دی 1386 هفته اوّل دی 1386 آرشيو موضوعات وبلاگ
لينك دوستان
آموزش و ترفند
دانلود برنامه و ترفند برنامه هاي يك برنامه نويس آموزش دروس كامپيوتر آس كلاس آموزش ويژوال بيسيك ويژوال بيسيك و گرافيك رياضيات و وي بي ****۞ startxp ۞**** BN - Soft توابع API آموزش میکروکنترلر avr علم نجوم ويروس نويسي در ويژوال بيسيك آموزش فلش-برنامه نویسی-مقاله-سورس کد اويانيك - وبلاگي براي برنامه نويسان الکترونيک - کامپيوتر - برنامه نويسي اموزش ساخت بازی با فلش سورس کدهای ویژوال بیسیک قدرت برتر سلطان كامپيوتر مغناطيس كامپيوتر اينترنت موبايل ترفند جوك عكس... كتابفروشي اينترنتي مکانی برای برنامه نویسان ایرانی آموزش ويندوز _ هك _ ترفند كد نويس punisher boy دهكده موبايل اروم بلاگ ×××بیا تو کلیپ××× Visual i3asiC رمز تمام بازی ها **بهترین ها فقط در اینجا** آموزش رایگان سايت تخصصي موبايل مطالب برتر وبلاگ
نكاتي در مورد وبلاگ
اين وبلاگ تقريبا هفته اي دو بار بروز مي شود - ممكن است به دليل كثرت سوالات به سوالات شما دير پاسخ داده شود اما حتما به همه سوالات پاسخ داده مي شود - لطفا سوالات خود را در قسمت نظرات بيان كنيد و سوالاتتان را ميل نكنيد - فقط پنج پست آخر در صفحه نخست قرار مي گيرد براي دسترسي به همه مطالب مي توانيد از آرشيو استفاده كنيد .
نظر سنجي وبلاگ
آمار وبلاگ
آيه روز
|
پاسخ به سوال آقاي رضا.ر (بازي Snake)
با سلام در اين پست مي خواهم ساختن Snake يا همان بازي معروف مار را كه آقاي رضا.ر خواسته بودند (در ضمن گفته بودند كه سورس نباشه و آموزش بدين) به طور تقريبا كامل آموزش دهم . همان طور كه ميدانيد اساس كار اين بازي ساده يك شي شبيه مار است كه كاربر سعي مي كند با كنترل آن طعمه هايي كه در مسير وجود دارد را بگيرد (به اصطلاح بخورد ) و امتياز كسب كند . ما به عنوان برنامه نويس اين بازي ساده بايد چند چيز را طراحي كنيم : 1 – كادري كه مار درون آن حركت كند و اگر به ديواره آن برخورد كند برنامه پيامي مبني بر باخت كاربر اعلام نمايد . 2 – يك شي شبيه مار كه كاربر با كليدهاي جهت دار بتواند آن را كنترل كند . 3 – طعمه اي كه به صورت تصادفي روي صفحه نمايش داده شود و كاربر بتواند آن را بگيرد و بر امتيازات او افزوده شود . 4 – قسمتي از برنامه كه امتياز كاربر را نمايش دهد . حال به صورت يك پروژه مراحل ساخت اين بازي ساده را با هم دنبال مي كنيم : يك پروژه جديد با يك فرم ايجاد نماييد . شما بايد اندازه فرم را به هر اندازه اي كه مايليد صفحه بازي شما باشد و كاربر در آن مار را حركت دهد تغيير دهيد . براي اينكه بتوانيم اندازه فرم را به درستي تعين كنيم كمي درباره سيستم مختصات در ويژوال بيسيك توضيح مي دهم . در ويژوال بيسيك ارتفاع و پهنا اشيا به ترتيب با مشخصه هاي Height و Width تعين مي شود . فاصله شي از سمت چپ فرم را خاصيت Left و فاصله شي از بالاي فرم را خاصيت Top تعين ميكند. هر چه شي به سمت پايين حركت كند خاصيت Top آن بيشتر مي شود و هرچه شي به سمت راست حركت كند خاصيت Left آن بيشتر مي شود . حال كه با سيستم مختصات بيشتر آشنا شديم مي توانيم اندازه فرم را مشخص كنيم. ابتدا بايد از يك شي به عنوان مار استفاده كنيم كه مي توانيم از Image و Picture استفاده كنيم اما براي ساده تر شدن برنامه از كنترل Shape استفاده مي كنيم . از جعبه ابزار يك كنترل Shape بر روي فرم قرار دهيد. سپس مشخصه هاي Height و Width آن را برابر 255 قرار دهيد تا يك شي مربعي داشته باشيد . نام آن را به S تغيير دهيد و خاصيت index آن را برابر با صفر قرار دهيد . حال خاصيت FillStyle را برابر با 0 – Solid قرار دهيد تا توپر شود . يك Shape ديگر به فرم اضافه كنيد و نام آن را به P تغيير دهيد .و بقيه مشخصات آن را مانند كنترل Shape قبلي تنظيم كنيد و خاصيت Visible آن را به False تغيير دهيد تا در موقع اجراي برنامه طعمه از ديد كاربر خارج شود . اين كنترل همان طعمه خواهد بود . يك كنترل Label به فرم اضافه نماييد و نام آن را به lblstart تغيير دهيد . و در خاصيت Caption آن اين جمله را تايپ نماييد " براي شروع كليد Enter را فشار دهيد " . درپايان هم يك كنترل Timer با نام Timer1 به فرم بيفزاييد و خاصيت Interval آن را به 150 تغيير داده و خاصيت Enabled آن را برابر False قرار دهيد . همه كار كرديم جز تعين ارتفاع و پهنا ي فرم . بايد ارتفاع و پهنا ي فرم را طوري تنظيم كنيم كه بر 255 بخش پذير باشد . چون مقياس ما براي حركت مار 255 است مثلا ارتفاع (Height ) فرم را به 2550 تغيير مي دهيم تا كاربر بتواند مار را تا 10 خانه به صورت عمودي حركت دهد . و پهنا (Width ) فرم را 5100 قرار مي دهيم تا كاربر بتواند مار را تا 20 خانه به صورت افقي حركت دهد . حال كار طراحي فرم و اشيا پايان يافته است و شكل نهايي فرم بدين صورت است :
Dim key As String Dim gamestart As Boolean Dim t() As Integer Dim l() As Integer Dim tedad As Byte متغير Key مشخص مي كند كه كدام كليد جهت نما فشرده شده است . متغير gamestart مشخص مي كند كه آيا بازي در حال اجرا است و يا هنوز شروع نشده است . دو متغير t() و l() كه به صورت آرايه اي تعريف شده اند مختصات تمامي Shape هايي كه در طول برنامه ساخته خواهد شد را درون خود نگه مي دارند . و متغير tedad نيز تعداد طعمه هايي كه كاربر گرفته است را درون خود نگه مي دارد . روي فرم دابل كليك كنيد و رويداد KeyDown آن دستورات زير را تايپ نماييد : If KeyCode = 13 And gamestart = False Then Key = "chap" lblstart.Visible = False Timer1.Enabled = True Gamestart = True Call Tomeh End If If gamestart = True Then If KeyCode = 38 And key <> "paeen" Then key = "bala" End If If KeyCode = 37 And key <> "chap" Then key = "rast" End If If KeyCode = 40 And key <> "bala" Then key = "paeen" End If If KeyCode = 39 And key <> "rast" Then key = "chap" End If End If در رويداد KeyDown يك متغير به نام KeyCode وجود دارد كه كد اسكي كليد فشار داده شده را مشخص مي كند . ما با يك شرط ساده مي فهميم كه كاربر چه كليدي را فشار داده است . در خط اول در يك شرط مشخص مي كنيم كه اگر كاربر كليد Enter را فشار داد و بازي هنوز شروع نشده بود بازي آغاز شود و متغير key با مقدار chap مقدار دهي شود كه اين كار مشخص مي كند كه پس از شروع بازي مار به سمت چپ حركت كند . سپس متني را كه پيامش فشار دادن كليد Enter براي شروع بازي بود مخفي مي كنيم . سپس خاصيت Enabled كنترل Timer را با True مقدار دهي مي نماييم تا فعال شود .(وقتي كه كد مورد نياز را براي تايمر نوشتيم متوجه مي شويد كه تايمر وظيفه حركت كنترل ها را بر عهده دارد ) . در خط بعد هم متغير gamestart را با True مقدار دهي كرديم تا مشخص كنيم بازي شروع شده است در پايان هم تابع Tomeh كه در ادامه آن را بررسي مي كنيم را فراخواني مي كنيم تا طعمه در يك مكان تصادفي ظاهر شود . در خطوط بعد هم مشخص مي كنيم كه اگر بازي شروع شده بود و كاربر كليدهاي جهت نما را فشار داد مار به حركت در آيد . حال روي كنترل تايمر دابل كليك كنيد و در رويداد Timer آن دستورات زير را درج كنيد : For i = 1 To tedad - 1 If s(0).Top = s(i).Top And s(0).Left = s(i).Left Then Call bakht End If Next i If key = "chap" And s(0).Left <> 4845 Then Call harekat Call khordan s(0).Left = s(0).Left + 255 ElseIf key = "rast" And s(0).Left <> 0 Then Call harekat Call khordan s(0).Left = s(0).Left - 255 ElseIf key = "bala" And s(0).Top <> 0 Then Call harekat Call khordan s(0).Top = s(0).Top - 255 ElseIf key = "paeen" And s(0).Top <> 1785 Then Call harekat Call khordan s(0).Top = s(0).Top + 255 Else Call bakht End If اين دستورات هم واضح هستند و فقط لازم است ذكر كنم كه bakht و khordan و harekat هر سه توابعي هستند كه در ادامه به تعريف آنها مي خواهيم پرداخت. تابع باخت كارش اين است كه در صورت برخورد مار با بدن خود و يا برخورد با بدنه فرم يك پيغام مبني بر باخت كاربر به او اعلام نمايد و امتياز او كه در عنوان فرم قرار دارد را نيز درج نمايد و سپس از بازي خارج شود . تابع زير را به همين صورت تايپ كنيد : Public Sub bakht() Timer1.Enabled = False MsgBox ("Your Score Is =" & " " & Me.Caption) End End Sub حالا تابع harekat كه باعث حركت مار به صورت يك مار واقعي مي شود را به اين صورت تعريف نماييد : Public Sub harekat() If tedad <> 0 Then ReDim Preserve t(tedad - 1) As Integer ReDim Preserve l(tedad - 1) As Integer For i = 0 To tedad - 1 t(i) = s(i).Top l(i) = s(i).Left Next i For f = 0 To tedad - 1 s(f + 1).Top = t(f) s(f + 1).Left = l(f) Next f End If End Sub در اين تابع مشخص مي كنيم كه اگر طعمه اي توسط كاربر گرفته شده بود آن طعمه را به دنبال مار بكشاند . تابع Tomeh نيز كارش اين است كه طعمه را در يك مكان تصادفي قرار دهد كه به صورت زير تعريف مي شود : Public Sub tomeh() Dim rt, rl As Integer Randomize rt = (Rnd * 7) + 1 rl = (Rnd * 18) + 1 p.Visible = True p.Top = Fix(rt) * (255) p.Left = Fix(rl) * (255) End Sub كه اين تابع هم نياز به توضيح ندارد و خيلي ساده است. در پايان هم تابع khordan را تعريف مي كنيم : Public Sub khordan() If p.Top = s(0).Top And p.Left = s(0).Left Then p.Visible = False tedad = tedad + 1 Form1.Caption = tedad * 10 Load s(tedad) s(tedad).Visible = True Call tomeh End If End Sub كار اين تابع هم اين است كه در صورت اينكه مختصات سر مار با مختصات طعمه برابر شد طعمه مخفي شود و ما دراز تر شده و بر امتياز كار بر افزوده شود . تمام شد به همين راحتي شما يك بازي Snake ساخته ايد . چون سرم خيلي شلوغ است نمي توانم دستورات برنامه را خط به خط تجزيه و تحليل كنم اما اگر سوالي در مورد هر كدام از قسمت هاي اين برنامه و يا هر سوال ديگري در مورد ويژوال بيسيك و ويندوز داشتيد بيان كنيد تا در اسرع و قت به آن پاسخ داده شود . در ضمن سورس اين برنامه را از این لینک ميتوانيد دانلود كنيد . پسورد فايل هم www.skrsoft.blogfa.com است. لطفا نظرات خود را در مورد مطالب اين وبلاگ بيان نماييد !
/ نوشته شده در پنجشنبه پانزدهم شهریور 1386 و ساعت 14:17 در ارتباط با موضوع ویژوال بیسیک |
|
||