بنام خالق جهان
میخوایم یکی از با نمک ترین برنامه های سی شارپ که میشه نوشت رو خدمتتون به اشتراک بذارم.
امیدوارم همراه ما باشید و لذت ببرید
امروز با برنامه بارش برف در سی شارپ در خدمتتون هستیم و امیدوارم خوشتون بیاد.
خب اول بگم که من تمامی properties هارو کد مینویسم و دستی نمیدم(به قول استادم که آدمو تنبل میکنه)
خب بریم برا دیدن و نوشتن کد
1- کتابخونه ها رو اول اضافه کنید(برای ویژوال استودیو های زیر 2015)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
2- یه مقدار ثابت قرار میدیم مثلا تعدادش رو 50 تنظیم میکنم که متعادل باشه تو صفحه(سلیقه ای مقدارش)
* نکته اینکه باید سراسری مقدارش داده بشه*
const int TEDAD = 50;
3- درون FormLoad قراره این کدارو بنویسیم
توضیحاتی بدم در مورد کد خط به خط:
1-خب برای اینکه نوع برف رو معلوم کنیم باید فونت براش انتخاب کنیم و از اونجایی که چنین فونتی درون سی شارپ نیست ما میریم از Word فونتی از نوع Windingz در میاریم که برف رو بتونیم اوکی کنیم
2-کادر یا همون border رو None میکنیم چرا که قرار بدون هیچ گونه علائم باشه(همون Exit,mini,hide)
3-فرم رو بزرگ قرار میدیم که کل صفحه رو بگیره
4-خب میخوایم پس زمینه برای بارش برف رو مشخص کنیم که چه بهتر رنگش همون رنگ اسمونی باشه(رنگ برف هم میتونه سلیقه ای باشه)
5-حالا میخوایم بطور تصادفی این برفای خوشگلمون توی صفحه پخش بشن در هر میلی ثانیه با توجه به ساعت سیستمتون
خب حالا اگه گفتین نوبت چیه؟ آفرین غلط گفتی
نوبت ساخت Lable هایی که قرار نقش برف رو بازی کنن(چون نمیشه 50 تا Lable توی فرم ایجاد کرد که برای همین با دستور ایجاد میکنیم(حرف استادم رو یادتون نرفته که))
به تعدادی که بالاتر تعریف شده بود میخوایم بسازیم و Properties هاش رو هم با توجه به نیازمون اوکی میکنیم
6-خب میرسیم به Text چون بالاتر گفتم که برف رو باید از Word بیاریم اینجا باید جاش بدیم
7-حالا محل قرارگیری برف هارو مشخص میکنیم میگیم که هرجا که دوست داری بطور تصادفی قرار بده(یعنی تو ارتفاع و عرض هرجا عشقت کشید برف رو ایجاد کن)
8-حالا نوبت به فونت رسیده میگیم نوع فونت همونی که بالاتر گفتیم از همون خانوادس و اندازش رو بطور تصادفی تو این بازه بذار(برای خوشگلی کار که برف ها یه دست نباشن یکی بزرگ و یکی کوچیک تو این بازه باشن)
9-خب حالا مهم ترین بحث اینجاس که این همه Lable داریم چجوری باید حرکت کنن؟(اون معلومه با تایمر) خب و لی چجوری همرو حرکت بدی؟
میایم از Tag استفاده میکنیم چرا چون نمیشه یکی کی نوشت که چجوری حرکت کنن،میشه؟ نه والا
میگم که برفای زیبا شما بیاین با استفاده از تایمیری که پایین تر نوشته میشه با سرعت معقول و مطمئنی حرکت کنین که چجوری حرکت پاببن تر میگم
10-و حالا که تمامی خصوصیات مربوط به Lable رو گفتیم میایم Lable هارو ایجاد میکنیم.
this.Font = new Font("Wingdings", this.Font.Size); this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Maximized; this.TransparencyKey = this.BackColor = Color.SkyBlue; Random r = new Random(DateTime.Now.Millisecond); for (int i = 0; i < TEDAD; i++) { Label l = new Label(); l.BackColor = Color.Transparent; l.AutoSize = true; l.Text = ""; l.Location = new Point(r.Next(this.Width), r.Next(this.Height)); l.ForeColor = Color.White; l.Font = new Font(this.Font.FontFamily, r.Next(1, 25)); l.Tag = r.Next(5, 25); this.Controls.Add(l); }
4- برای اینکه جلوی موس رو بگیریم که نتونه برف رو قطع کنه از Event ها KeyDown استفاده میکنیم که برف ها با فشرده شدن کیبرد قطع بشن و از برنامه خارج بشین
Application.Exit();
5-حالا نوبت به اصل ماجرا یعنی حرکت برف ها رسید
1-اول یه تایمر به برنامه اضافه کنید و از قسمت Properties این تنظیمات رو درست کنید
Enabled=True
interval=1
2-حالا بروی تایمر دبل کایک کنین و بیاد تو
3-با استفاده از دستور Forech(امیدوارم این دستور رو بدونید چیه؛اگرم نمیدونید حتما درموردش پایین موضوع میگم بهتون بطور قابل فهم و درک)
تو این دستور میاد تمامی Lable هایی که در فرم قرار دارن رو صدا میزنه و تک تک میخواد بگه چیکار باید بکنن
3-تمامی Lable ها با سرعت خاصی که گفتم بالا قرار حرکت کنن و بیان پایین خب مسلما از بالای صفحه میان که میشه Top و این خط داره مقدار رو تبدیل به عدد میکنه
4-اینجا میگه اگر اینجا که Lable ها دارن میان پایین از عرض صفحه سیستمتون رد شدن چیکار باید بکنی
یعنی اگر برفا رد شدن بطور مرتب اونا رو بازتکرار کن و از بالا بفرست بیان پایین
و بطور تصادفی از سمت چپ سیستم پخش بشن و سرعتشم طبق معمول تو بازه 5 و 25 هستش
Random r = new Random(DateTime.Now.Millisecond); foreach (Label item in this.Controls) { item.Top += Convert.ToInt32(item.Tag);//+= 5; if (item.Top > this.Height) { item.Top = -item.Height; item.Left = r.Next(this.Width); item.Tag = r.Next(5, 25); } }
امیدوارم این برنامه رو اجرا کنید و لذت ببرید.
سوال دیگه ای هم بود در خدمتم.
Foreach چیست:
این دستور هم خونواده حلقه طلایی یعنی for هستش و بجای for که میاد همرو باهم شامل میشه این Foreach تک تک رو بررسی میکنه همین
مثلا ما تو فرم تعداد زیادی Button و ... داریم میخوایم مثلا Lable استفاده کنیم یقینان با For یکمی دردسر میشه پس برای همین میگیم آهای کسایی که توی فرم هستین من با کمک ForEach فقط با Lable کار دارم و شماهارو نیازی ندارم
فک کنم خیلی ساده و روون گفتم
به به بعد عمری دو سه تا نویسنده جدید و مطلب های جدید :)
وبلاگ جون گرفت