C# – Chương trình tạo hiệu ứng tuyết rơi

DemoNhân dịp noel 2010, xin tặng các bạn một chương trình nho nhỏ để giải trí và cảm nhận được phần nào không khí se lạnh của mùa đông.

Chương trình này có chức năng trang trí cho màn hình bằng cách tạo hiệu ứng tuyết rơi và một dòng text nhấp nháy ghi lời chúc. Vì chỉ làm đơn giản nên có thể không đẹp lắm, toàn đồ tự làm nên nếu không thích các bạn có thể chính sửa, thay thế thoải mái.

Demo


Sơ đồ lớp:

ClassDiagram

Trên đây là các class chính, chức năng của chúng như sau:

-SnowFlake: đại diện cho một bông tuyết

-FancyText: Chữ nhấp nháy

-AppSettings: chứa các thông tin thiết lập của chương trình

-HotkeyFilter: sử dụng các WinAPI để đăng kí các hotkey, bạn hãy tham khảo để biết cách sử dụng các API trong C#.

Phương thức hoạt động:

Chương trình hiển thị các bông tuyết trên 1 form đã bị trong suốt (dùng thuộc tính TransparentKeys của Form), sau đó cho form phủ kín màn hình.

Các bông tuyết tạo ra từ những ảnh có sẵn, nếu muốn tự vẽ ra bông tuyết với nhiều kiểu dáng khác nhau bạn có thể tham khảo các thuật toán vẽ hình Fractal có khá nhiều trên mạng. Ưu điểm của dùng ảnh là bạn có thể dễ dàng sử dụng và thay thế bất cứ ảnh nào mình muốn, ví dụ lá cây, giọt nước,…

Chương trình dùng 1 timer để tạo ra vòng lặp cho mưa tuyết. Ta bắt đầu tạo ra các bông tuyết với phương thức sau:

/// <summary>

/// Khởi tạo các giá trị ngẫu nhiên cho bông tuyết

/// </summary>

/// <param name=”pic”></param>

private void CreateSnowFlake(SnowFlake pic)

{

int screenWidth = Screen.PrimaryScreen.WorkingArea.Width;

if (_firstTime)

{

if (rnd.Next(2) == 0)

pic.Image = global::XMas.Properties.Resources.SnowFlake001;

else

pic.Image = global::XMas.Properties.Resources.SnowFlake003;

_firstTime = true;

}

pic.Position = new System.Drawing.Point(rnd.Next(screenWidth), -10);

int size=rnd.Next(40) + 10;

pic.Size = new System.Drawing.Size(size,size);

int sign=rnd.Next(2) == 0 ? -1 : 1;

pic.Direction = rnd.Next(10)*sign;

pic.Speed = rnd.Next(20) + 3;

}

Cờ _firstTime để việc gán Image cho bông tuyết chỉ xảy ra ở lần đầu tiên, các lần sau nó sẽ bỏ qua, tuy nhiên bạn có thể bỏ đi cờ này cũng không ảnh hưởng lắm đến tốc độ chương trình.

Sự kiện Tick của Timer để điều khiển quá trình tuyết rơi, có sẵn chú thích nên tôi sẽ không giải thích thêm:

private void timer1_Tick(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

int screenHeight = Screen.PrimaryScreen.Bounds.Height;

int screenWidth= Screen.PrimaryScreen.WorkingArea.Width;

//g.Clear(this.BackColor);

for(int i=0;i<pics.Length;i++)

{

// Xóa đi bông tuyết ở vị trí cũ

g.FillRectangle(SystemBrushes.Control, pics[i].Bounds);

// Nếu bông tuyết ra khỏi màn hình thì tạo lại các giá trị mới

if (pics[i].Top > screenHeight || pics[i].Right<0 || pics[i].Left >screenWidth)

{

CreateSnowFlake(pics[i]);

continue;

}

// Cập nhật vị trí mới cho bông tuyết

int x = pics[i].Position.X;

int y = pics[i].Position.Y;

x = x + pics[i].Direction + settings.Wind;

y = y + pics[i].Speed;

pics[i].Position= new Point(x, y);

// Vẽ bông tuyết lên form

g.DrawImage(pics[i].Image, pics[i].Bounds);

}

// Vẽ dòng chữ nhấy nháy

g.DrawImageUnscaled(_bmpText,settings.TextLocation);

}

Vậy là đã xong các bước cơ bản để tạo ra chương trình này, các chức năng khác bạn có thể tự tìm hiểu và chỉnh sửa lại theo ý muốn. Chúc các bạn một mùa Noel  an lành, hạnh phúc.

Download:

Chương trình (83KB)
Mã nguồn (507KB)

Ấm áp không phải khi ngồi bên đống lửa, mà là bên cạnh người mà bạn thương yêu!

Ấm áp không phải khi bạn mặc một lúc hai, ba áo, mà là khi bạn đứng trước gió lạnh, từ phía sau đến có ai đó khoác lên bạn một tấm áo.

Ấm áp không phải khi bạn nói “ấm quá”, mà là khi có người thì thầm với bạn: “Có lạnh không?”.

Ấm áp không phải khi bạn dùng hai tay xuýt xoa, mà là khi tay ai kia khẽ nắm lấy bàn tay bạn.

Ấm áp không phải khi bạn đội chiếc mũ len, mà là khi đầu bạn dựa vào một bờ vai tin cậy.

Ấm áp chưa hẳn là khi bạn ôm ai đó thật chặt, mà là khi ai đó khoác vai bạn thật khẽ (là người bố thân yêu của bạn chăng?!).

Và ấm áp là khi mùa thu qua, cái lạnh ùa về… Có một ai đó khẽ thì thầm vào tai bạn: “Chúc bạn một mùa đông ấm áp!”.

Noel 2010

http:// yinyangit.wordpress.com

One thought on “C# – Chương trình tạo hiệu ứng tuyết rơi

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s