Visual C# Code:
/// <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 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:
Visual C# Code:
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)