سه شنبه 3 اسفند 1395 - 24 جمادي الاول 1438 - 21 فوريه 2017
ابتدا می خواهیم عکس شخصیت های بازی را به برنامه اضافه کنیم، در صورتی که بخواهیم از تصویری جهت نمایش بر روی برچسب ها استفاده کنیم، کمی مشکل است زیرا کنترل برچسب برای این کارتعریف نشده است بنابراین باید ازکنترلی استفاده کنیم که مخصوص نمایش تصویر می باشد...
عکس نویسنده
عکس نویسنده
نویسنده : محسن نصرتی
بازدید :
زمان تقریبی مطالعه :

ساخت بازی پازل با #C، جلسه ششم

آموزش برنامه نویسی #c، جلسه ششم


هدف کلی:
آشنایی با اعداد تصادفی، افزودن عکس و زمان


سرفصل های تئوری:
1. آشنایی با کنترل های Timer PictureBox, وRandom
2. قواعد نام گذاری
3. پروژه ی تام و جری  - بخش دوم

همانطور که در جلسه ی قبل دیدیم با استفاده از خصوصیت top و left براحتی توانستیم برچسب را با حرکت ماوس تغییر دهیم. و همچنین با ریختن مقادیر ماوس درون این برچسب ها، مکان ماوس در هر لحظه را روی label ها نمایش دادیم. در این جلسه می خواهیم این بازی را تکمیل کنیم.

افزودن عکس:

ابتدا می خواهیم عکس شخصیت های بازی را به برنامه اضافه کنیم، در صورتی که بخواهیم از تصویری جهت نمایش بر روی برچسب ها استفاده کنیم، کمی مشکل است زیرا کنترل برچسب برای این کارتعریف نشده است بنابراین باید ازکنترلی استفاده کنیم که مخصوص نمایش تصویر می باشد این کنترلpictureBox  نام  دارد.


کنترل PictureBox
از جعبه ابزار دو کنترلPictureBox  را بر روی فرم بکشید حال عکس های مورد نظر (تام و جری) با رفتن به خصوصیت Image آنها انتخاب کنید همچنین با انتخاب  پنجره خصوصیت  PictureBox خصوصیت sizemod آن را به StretchImage  تغییر دهید تا اندازه ی خود را با عکس درون خود انطباق دهند: (می توانید label های جلسه ی قبل را با کلیک روی آنها و زدن دکمه ی delete از کیبورد، حذف نمایید)

آموزش برنامه نویسی #c، جلسه ششم
 
آموزش برنامه نویسی #c، جلسه ششمآموزش برنامه نویسی #c، جلسه ششم

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

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
pictureBox1.Left= e.X;
pictureBox1.Top = e.Y;
}

قواعد نام گذاری:
یکی از چیزهایی که رعایت آن برنامه نویسی را خیلی راحت می کند نام َگذاری درست متغیرهاست، برای مثال در محیط ویندوز فرم، معمولا نام هر کنترل با حروف اختصاری که جنس متغیر را نشان می دهد شروع می شود و در ادامه عبارتی قرار می گیرد که توصیف کننده ی کاربرد کنترلر باشد، برای تمرین کردن این قواعد، در بخش properties مربوط به عکس Tom بروید، و مقدار خصوصیت name را برابر pb_Tom قرار دهید که به معنای این است که این کنترلر از جنس PictureBox است و حاوی عکس Tom، عکس جری را هم به همین صورت درست کنید، بعد از این کار درون تابع Form1_MouseMove را مشاهده کنید، خواهید دید که نام عکس ها در این تابع نیز به روز رسانی (update) شده است، این یکی از هنرهای یک محیط مجتمع مانند ویژوال است.


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


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

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
       Random r = new Random();
         pb_Jeri.Top = r.Next(this.Height);
         pb_Jeri.Left = r.Next(this.Width);
         pb_Tom.Left= e.X;
         pb_Tom.Top = e.Y;
 }

نکته: با استفاده از مقادیر this.Height و this.Width  مقدار تولید اعداد تصادفی را در بازه ی صفر تا اندازه طول و عرض فرم تنظیم کرده ایم.(با استفاده از this می توانیم به خصوصیات فرم دسترسی داشته باشیم)
با اجرای برنامه به یک مشکلی برخواهید خورد، زمانی است که ماوس را تکان می دهیم، pb_Tom با حرکت ماوس تغییر می کند اما همزمان pb_Jeri نیز با هر تغییر ماوس یک عدد تصادفی تولید می کند و تغییر مکان می دهد و این طوری گربه هرگز موفق به گرفتن موش نخواهد شد؟
برای حل این مشکل می توانیم از زمان استفاده کنیم و تنها در زمان های مشخصی مکان موش را تغییر دهیم.


کنترل timer:
کنترل timer فراخوانی یک پردازش را در یک زمان مشخص و یا پس از گذشت یک زمان مشخص امکان پذیر می سازد. کلاس timer در فضایی(namespace) با نام system.timer قرار دارد و دارای خاصیتی به نام Interval برای تعیین وقفه زمانی (بازه زمانی بین دو پردازش متوالی بر حسب میلی ثانیه) است. مقدار دادن خاصیت Interval در پنجره خصوصیات timer  و یا از طریق کد قابل انجام است.
خصوصیت Enable تایمر در حالت پیش فرض False است که با True کردن آن، کنترل timer فعال می شود و در صورتی که  بخواهیم دستوری طبق زمان مورد نظر تغییر کند کافی است کد مورد نظر خود را در رویداد timer یعنی در متد timer1_Tick بنویسیم. حال سعی کنید یک timer به فرم اضافه کنید و هر سه ثانیه یک بار دستور رندوم را فقط برای pb_Jeri اجرا کنید بنابراین کد نوشته شده در mouseMove را پاک کرده و آن را در متد timer1_Tick قرار می دهیم:

  private void timer1_Tick(object sender, EventArgs e)
        {
            Random r = new Random();
            pb_Jeri.Top = r.Next(this.Height);
            pb_Jeri.Left = r.Next(this.Width);
        }

 با اجرای برنامه مورد نظر می بینید که با حرکت ماوس گربه حرکت می کند و موش هر 3 ثانیه یکبار به یک جای مشخص می رود. برای اینکه برنامه شما زیباتر شود می توانید موارد زیر را نیز به برنامه خود اضافه نمایید:
-   4 عکس از تام و جری (درچهار جهت) پیدا و انتخاب کنید و برحسب تغییر جهت  x و y  حرکت ماوس عکس آنها را تغییر دهید.
-  گربه با حرکت سریع خود وقتی به محدوده تعیین شده مختصات موش رسید به امتیازی دست پیدا کند (می توانید امتیازها را روی یک label نمایش دهید)

-  سعی کنید قسمت هایی با استفاده از PictureBox درست کنید که با رسیدن موش به آن قسمت خاصیت کنترل آن Invisible شود و پس از مدتی دوباره نمایش داده شود و در صفحه ظاهر شود. (لانه ی موش را شبیه سازی کنید)
-  سعی کنید که موش به سمت نزدیک ترین سوراخ  تعیین شده در صفحه حرکت کند.
-  سعی کنید با استفاده ازPictureBox موانعی برای گربه ایجاد کنید که موش توانایی رد شدن از آن را داشته باشد اما گربه توانایی آن را نداشته باشد و با عبور از روی آن به نقطه اولیه بازگردانده شود.

ساخت بازی پازل با# C، جلسه اول
ساخت بازی پازل با# C، جلسه دوم
ساخت بازی پازل با# C، جلسه سوم
ساخت بازی پازل با# C، جلسه چهارم
ساخت بازی پازل با# C، جلسه پنجم
ساخت بازی پازل با# C، جلسه ششم
ساخت بازی پازل با# C، جلسه هفتم
ساخت بازی پازل با# C، جلسه هشتم  

بخش پژوهش های دانش آموزی تبیان، تهیه، محسن نصرتی 
تنظیم: نسرین صادقی
تلفن : 81200000
پست الکترونیک : public@tebyan.com
آدرس : بلوارکشاورز ، خیابان نادری ، نبش حجت دوست ، پلاک 12

ارتباط با ما

روابط عمومی

درباره ما

نقشه سایت

تعدادبازدیدکنندگان
افراد آنلاین