سلام.
توضیح کد بازی منچ:
«بسم الله الرحمن الرحیم»
توضیحات کد...
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر TAS که از اسمش پیداست برای اینکه مقدار تاس انداخته شده در آن قرار گیرد مثلاً اگر تاس 6 یا 2 یا... بود در این متغیر ذخیره میشود که در کدهای بعدی میتوانید ببینید که چه جاهایی مقدار دهی می شود.
حتماً در محیط دیزاین (Design) فرم، لیبل هایی را مشاهده میکنید که متن انها "پرتاب تاس" و "بی حرکت می باشد" متغیر LBL_Nobat یکی از ان لیبل ها را در خود قرار میدهد که به نوبت هر بازیکن تغییر میکند مثلاً اگر نوبت بازیکن سبز باشد این برچسب همان لیبلی میشود که نوبت آن هست مثلاً Lbl_s که بعد از توضیحات کدهای بعدی متوجه میشوید که به چه درد میخورد.
ما یک Enum تعریف کردیم به نام ClassModel که با مشاهده آن میفهمید که دارای Zard,Ghermez,Sabz,Abi میباشد. به موقع توضیح میدهیم که Enum چه کار میکند.ما یک متغیر به نام Nobat تعریف کردیم که همانطور که از اسمش پیداست نشان میدهد که نوبت بازی دست چه بازیکنی است.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رویداد Form_Load زمانی فراخوانی می شود که فرم اجرا مشود.
خاصیت Tag کنترل ها یک متغیر از نوع object است که میتوان هر چیزی را در آن قرار داد. که ما در کد بالا برای چهار تا لیبل Lbl_z, Lbl_a, Lbl_g, Lbl_s متغیر مورد نظر را در آن قرار دادیم که بعداً از آن استفاده کنیم.
کد LBL_Nobat = new Label(); برای این است که لیبل خالی نباشد که اگر خالی باشد باعث ایجاد خطا در اول بازی میشود.
حلقه زیر تمام کنترل های فرم را جستجو میکند و آن را یکی یکی در Main_Ctl میرید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر کمی به کد زیر دقت کنید و به طریقه نام گذاری کنترل ها در فرم هم دقت کنید میبینید که ما در کد زیر از نام کنترل هایی که میخواهیم استفاده کنیم استفاده کرده ایم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متد Contains در کد بالا یک متن مثلاً "Pic_Start"را گرفته و در نام کنترل که Main_Ctl.Name جستجو میکند اگر آن متن وجود داشته باشد True بر میگرداند و شرط درست میشود.و اگر دقت کنید تمام کنترل هایی در نام آنها Pic_Start وجود دارد که بازی کن باشند.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خط اول کد بالا ما کلاس اصلی خود را که ساختیم تعریف کردیم و خط زیر:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ما از متغیر AccessibleName در کنترل ها استفاده کردیم اگر نگاه کنید میبینید که هر کدام یک عدد هستند...
و چون متغیر AccessibleName یک String بود ما آن را با کلاس زیر به عدد تبدیل کردیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر (Class_Main.ClassModel) در اصل عدد به دست آمده Convert.ToInt16(Main_Ctl.AccessibleName) را تبدیل به Class_Main.ClassModel میکند.
This یعنی فرم پیشفرض که کلاس ما یک فرم میخواست و ما فرم پیش فرش را به کلاس دادیم.
Main_Ctl هم همان کنترلی است که از حلقه گرفتیم. ما برای هر کنترل بازیکن یک کلاس تعریف کردیم و آن ها را با کد زیر در Tag کنترل قرار میدهیم که بعداً فراخوانی کنیم.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متد زیر یک عدد میگیرد و عکس آن عدد را برمیگرداند که این عکس همان عکسی است که در تاس فرم مشاهده میکنید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رویداد یک رویداد کلیک است که به وسیله دکمه پرتاب تاس زده میشود:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کلاس Random برای آن است که ما یک عدد رندوم یا یک عدد تصادفی به عنوان منچ در متغیر TAS بریزیم.
کد زیر عکس را بر اساس TAS در متد Get_Tas_Imag(TAS) جستجو میکند و در Image کنترل تاس میریزد:
Pic_Tas.Image = Get_Tas_Imag(TAS);
متد زیر را بعاً توضیح خواهیم داد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر: در صورتی که TAS ما شش نباشد نوبت عوض میشود چون اگر شش باشد نوبت عوض نمیشود و کسی که شش آورده میتواند جایزه خود را بندازد.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این عدد باید از 0 تا 3 باشد برای همین ما شرط زیر را گذاشتیم که باعث خطا نشویم:
if (Convert.ToInt16(Nobat) + 1 == 4)
یعنی اگر Enum چهار بود نویت را به اولین Enum بده..یعنی زرد.
توضیح متید زیر:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این متد تاس مورد نظر را میگیردو در tas میریزد دقت کنید که دو متغیر TAS و tas با هم فرق میکنند:
v
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خط زیر که نیازی به توضیح ندارد ما در اصل متن لیبل ها را به حالت بی حرکت در آوردیم تا نوبت تاس انداختن مشخص شود:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر دقت کنید کسی که نوبتش میشود با رنگ قرمز در فرم دیده میشود.کد زیر همه رنگ ها را به حالت اولیه در میاورد تا در صورت نوباپت رنگ را عوض کند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر تمام کنترل های بازی را از کار می اندازد تا کسی بی نوبت بازی نکند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شرط زیر نشان میدهد در صورتی که نوبت برابر زرد باشد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رنگ لیبل زرد قرمز میشود:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
لیبل زرد در لیبل نوبت قرار میگیرد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تمام کنترل های زرد که نوبتشان است به رو میایند و به کار می افتند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با نام Pic_Start_Zard میتوان زرد ها را جستجو کرد
با کد زیر به رو میایند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در شرط زیر:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در صورتی که تاس شش باشد متن برچسب یا لیبل زرد برابر "اجازه ورود" میشود و در غیر این صورت "تاس پرتاب شد" می شود که با کد زیر در بالاتر، در متغیر text قرار دادیم:
text = "پرتاب تاس انجام شد";
در مورد کد های دیگر هم توضی مانند بالاست فقط به جای زرد مثلاً قرمز، آبی یا سبز میشود.
کد زیر:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رویداد Pic_Start_Abi1_Click وقتی اجرا می شود که روی دکمه بازیکنی کلیک شود این رویداد شامل تمام کنترل های بازی کن میشود که زرد، قرمز، سبز و آبی میباشند.
شرط زیر زمانی اجرا میشود که متن لیبل نوبت (که توضیح داده بودیم که وقتی نوبت لیبلی باشد همان لیبل در آن قرار میگیرد) برابر "اجازه ورود" باشد و اگر یادتان باشد ما در TAG هر کنترل بازیکن یک کلاس اصلی قرار دادیم که الان از اینجا فراخوانی میکنیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر متغیر object به نام sender را به PictureBox تبدیل میکند....این pictureBox همان کنترلی است که رو آن کلیک شده است:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که ما متغیر Tag کنترلی را که روی آن کلیک شده را دریافت کردیم و با کد زیر آن را به کلاس تبدیل کردیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
علامت ! پشت این متغیر ها یعنی مخالف بودن یا True نبودن شرط.
کد زیر هم که ما کلاس را از Tag کنترل بازیکن فراخوانی کردیم و در M_Cls قرار دادیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با خط زیر ما مجوز حرکت کلاس کنترل مورد نظر را True کردیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر در اصل کنترل را وادار به حرکت میکند که در کلاس اصلی توضیح میدهیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کدهای زیر هم که نیازی به توضیح نیست خط اول متن لیبل نوبت را تغیرر میدهد و "بی حرکت" میکند و خط دوم هم دکمه تاس را فعال میکند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خط زیر هم اگر تاس مخالف شش بود دکمه پرتاب تاس را فعال میکند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شرط زیر برای زمانی است که نوبت باشد ولی تاس ما شش نباشد و کنترل ما مجوز حرکت داشته باشد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توضیحات کلاس اصلی:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر ها:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر Frm_Main در اصل همان فرم اصلی ماست که فراخوانی مشود:
کد زیر هم نشان میدهد که این کلاس برای کدام بازی کن است:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر یک آرایه از کنترل هاست در این آرایه کنترل های فرم قرار میگیرند در اصلی این کنترل ها هم خانه های بازی هستند که بازیکن باید بر اساس این آرایه رو فرم حرکت کند:
متغیر زیر میزان حرکت کنترل را نشان میدهد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر زیر مجوز حرکت کنترل مورد نظر است:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر زیر هم کنترل اصلی فرم ایت که این کلاس به آن اختصاص داده میشود:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با متد زیر هم که آشنا هستید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این متد هم هنگام تعریف کلاس آرگومانهای خود را دریافت میکند که قبلاً توضیح داده شد.
با کد زیر متغیر Frm_Main برابر فرم ورودی مشود:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با کد زیر هم بازیکن مورد نظر را مشخص میکند و در متغیر Model میریزد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر هم که کنترل دریافتی را در کنترل اصلی برای استفاده میریزد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ما در خانه ها منچ برای هر بازیکن حدود 44 خانه داریم بنابر این برای آرایه خود 44 کنترل تعریف میکنیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که در زیر مقدار دهی می شوند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر در فرم اصلی دقت کنید میبینید که کنتذهای خانه ها اول نامشان PIC است.بنابر این ما با آنها کار داریم و اگر به آخر نام انها دقت کنید دو شماره را میبینید 00 که کد زیر این شماره ها را دریافت میکند و در آرایه به صورت مرتب قرار میدهد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به کد زیر دقت کنید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر خوب ببینید،می بینید که کدهای زرد با بقیه فرق میکند....چون اولین بازیکن زرد است و بازی با زرد شروع میشود بنابراین ما دیگر نیاز به مرتب سازی زرد نداشتیم و فقط چهار خانه آخر آن را قرار دادیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شرط زیر متغیر Model را مقایشه میکند ببیند که قرمز است یا خیر:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ما یک آرایه دیگه تعریف کردیم برای مرتب سازی قرمز چون اگر مرتب نکنیم بازی کن های قرمز از اولین خانه زرد شروع به بازی میکنند . ما باید آنها را مرتب کنیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حلقه زیر را ببینید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این حلقه در اصل یک حلقه بی نهایت میباشد که ما بعد از اتمام خانه ها با استفاده از متغیر J و کد زیر آن را خارج میکنیم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چون اخرین خانه قرمز از 30 شروع میشود ما I را 30 قرار دادیم تا اولین خانه قرمز 30 باشد و تا آخر برود:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد از خروج از حلقه هم کد زیر چهار خانه پایانی را به آرایه میدهد و همه را در آرایه اصلی میریزد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در مورد کدهای دیگر هم توضیحات بالا کفایت میکند.
و اما متد زیر:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این متد همان متدی است که شما تعداد خانه هایی که باید حرکت کنید را به آن میدهید مثلاً اگر میخواهید چهار خانه به جلو بروید باید به این متغر عدد 4 بفرستید که مثالش در کدهای فرم است.
متد زیر:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متد بالا در اصل عملیات حرکت را انجام میدهد:
متغیر Val عددی است که شما به وسلیه منچ بدست میاورید و به متغیر میدهید. و Go تعداد خانه هایی است که کنترل بازی شما حرکت کرده است.
شرط زیر بررسی میکند که تعداد حرکت های رفته بیش از حد نباشد و کنترل مجوز حرکت داشته باشد(یعنی شش آورده و داخل بازی باشد) و اینکه کنترلی دیگر در آن خانه قرار نداشته باشد.چون دو کنترل در یک خانه نمیتوانند قرار گیرند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر کنترل را حرکت میدهد و آن را برابر با یکی ار خانه های کنترل آرایه ای میکند:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر نشان میدهد که در خانه ای که قرار داریم دیگر کنترل دیگر نباید باشد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد زیر نشان میدهد که در خانه قبلی که قرار داشتیم میتواند کنترل بازی کنی قرار گیرد زیرا دیگز آن خانه خالی شده است:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و در آخر هم Enum:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Enum کاربرد بسیاری برای ما داشت.که ما در برنامه خود بجای چند متغیر از یک Enum استفاده کردیم.
برای بازی کردن تاس را بیندازید اگه شش نیاوردید روی آن بازی کنی که نوبتش است کلیک کنید مثلاً وقتی نوبت شماست و شش نیاوردید رو کنترل خود کلیک کنید تا تاس فعال شود و نوبت بازیکن بعدی شود.
اگر شش آوردید آن بازیکنی که میخواهید وارد بازی کنید را کلیک کنید و برای حرکت هم همینطور.
دانلود برنامه:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
[/COLOR]
ببخشید که توضیحات کمی نا مفهوم بود.این توضیحات برای یکسال پیشه من وقت نکردم دوباره بخونمش.
موفق باشید
.