Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 18
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Chương trình tạo hiệu ứng tuyết rơi với lập trình C#

    Nhâ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. Do là chương trình demo nhỏ nên chức năng và giao diện ko được hoàn thiện lắm, các bạn thông cảm.



    Bài viết này xin dành tặng cho Taro (cây nhà lá vườn [IMG]images/smilies/11.gif[/IMG]). Chúc bạn noel và năm mới an khang, hạnh phúc.

    Giới thiệu:

    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.


    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:

    Mã:
     /// <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:


    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 tại đính kèm:

    40px
    Noel 2010

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    this.SetStyle(   ControlStyles.AllPaintingInWmPaint |   ControlStyles.UserPaint |   ControlStyles.DoubleBuffer,true);
    [IMG]images/smilies/smile.png[/IMG]

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thank you, để mình set lại

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Yin Yang
    Thank you, để mình set lại
    Trong constructor, gọi cái này sau hàm InitializeComponent()

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Anh YY cám ơn anh nhiều lắm. Món quà đầu tiên em được nhận trong noel năm nay. Cám ơn anh nhiều lắm và chúc anh một noel thật hạnh phúc.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thank chủ Pic nhiều nhé

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Món quà nhỏ nhưng rất ý nghĩa! [IMG]images/smilies/biggrin.png[/IMG] Thanks!

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi snake_programmer
    Món quà nhỏ nhưng rất ý nghĩa! [IMG]images/smilies/biggrin.png[/IMG] Thanks!
    A Snake...anh YY tặng cho em mà, ai cho anh cám ơn chứ.hihi

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Rất cool thanhk chủ topic nhe![IMG]images/smilies/2.gif[/IMG]

  10. #10
    cái này hay đó
    nhưng tắt đi kiểu gì vậy

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •