 |
|
KINH NGHIỆM LẬP
TRÌNH |
|
Pháo hoa mừng năm
mới
Ngô
Bảo Khoa (MiNaH2710@yahoo.com.sg - Q.Tân Bình,
TP.HCM) |
|
Năm mới Ất Dậu sắp đến, xin giới thiệu với bạn cách
tạo chương trình bắn pháo hoa bằng VB6 (hình 1). Bạn
có thể áp dụng để tạo "thiệp điện tử" (với nhạc nền
là bài Happy New Year thì “hết ý”) hay tạo một
screensaver trang trí cho máy tính những ngày Tết
(xem cách tạo screensaver bằng VB6 trong e-CHÍP số
55). Với “tiết mục” bắn pháo hoa, máy tính của bạn
hẳn sẽ mang đầy không khí lễ hội của những ngày đầu
năm... |
 |
Các điều khiển trong dự án
Dự án cần 2 Timer (tên Timer1 và Timer2) và một
PictureBox. PictureBox này để hiển thị pháo hoa, có
thuộc tính ScaleMode là 1 - Twip, màu nền là màu đen
(để tạo bầu trời đêm). |
Các biến và hằng cần khai báo
Pháo hoa bắn lên không trung sẽ tạo thành các đốm
lửa. Mỗi đốm lửa ứng với một phần tử của các mảng
sau:
- Mảng PhaoHoa, kiểu Boolean để đánh dấu đốm lửa nào
đang hoạt động (trị True) và không hoạt động (trị
False).
- Mảng GocPhong, kiểu Integer, cho biết góc phóng
của đốm lửa.
- Mảng TocDo, kiểu Integer, thể hiện tốc độ các đốm
lửa.
- Mảng XX, YY, kiểu Integer, cho biết tọa độ hiện
tại của đốm lửa.
- Mảng MauSacRGB, kiểu Integer, cho biết màu sắc của
đốm lửa. |
Ngoài ra, chương trình cần khai báo các hằng sau:
- dGoc: cho biết chênh lệch góc phóng tối đa giữa
hai đốm lửa của một viên pháo hoa.
- dTocDo: cho biết chênh lệch tốc độ tối đa giữa hai
đốm lửa của một viên pháo hoa.
- TDRoiToiDa: khi rơi xuống, đốm lửa sẽ biến mất khi
tốc độ của nó đạt giá trị này. |
Nhiệm vụ của Timer2
Sau khi đốm lửa được phóng lên, tốc độ đốm lửa
sẽ giảm đi dưới tác dụng của trọng lực. Khi tốc độ
giảm tới 0, đốm lửa sẽ rơi xuống và thành đốm lửa
không hoạt động. Do tốc độ các đốm lửa khác nhau nên
vào một thời điểm sẽ có những đốm lửa đang hoạt động
và những đốm lửa không hoạt động. Sau mỗi khoảng
thời gian định bởi trị Interval của Timer2, ta xem
những đốm lửa nào không hoạt động để làm chúng thành
hoạt động và gán cho chúng các giá trị ngẫu nhiên
ban đầu như vị trí, góc phóng, tốc độ, màu sắc. Các
đốm lửa vừa được cho hoạt động này cùng thuộc một
viên pháo hoa nên có cùng màu sắc, cùng tọa độ ban
đầu và có góc phóng hơi khác nhau (dựa trên góc
phóng chính), tốc độ hơi khác nhau (dựa trên tốc độ
gốc).
Góc phóng và tốc độ của các đốm lửa trong cùng một
viên pháo hoa cần khác nhau để đường đi của chúng
không trùng nhau. Sự chênh lệch này không được quá
lớn (vì những đốm lửa này cùng thuộc một viên pháo
hoa) mà phải nằm trong khoảng giá trị quy định bởi
hằng dGoc và dTocDo. Như vậy, sau khi tạo ra ngẫu
nhiên góc phóng chính và tốc độ gốc của một viên
pháo hoa, bạn cần cho mỗi đốm lửa một giá trị ngẫu
nhiên mới nằm trong giới hạn về góc phóng và tốc độ. |
Nhiệm vụ của Timer1
Sau mỗi khoảng thời gian định bởi trị Interval,
Timer1 có nhiệm vụ xem những đốm lửa nào đang hoạt
động để:
- Xóa hình ảnh đốm lửa tại vị trí cũ, thay đổi tọa
độ của nó và vẽ ra tại vị trí mới.
- Thay đổi góc phóng, tốc độ của đốm lửa cho phù
hợp.
Tọa độ đốm lửa thay đổi như minh họa ở hình 2. |
 |
Đốm lửa sẽ rơi xuống khi tốc độ của nó giảm đến 0.
Để đơn giản, ta cho góc rơi của đốm lửa ngược với
góc phóng. Như vậy góc rơi (góc phóng mới) = 360 -
góc phóng (cũ). Khi rơi xuống, tốc độ đốm lửa sẽ
càng ngày càng lớn, đến khi đạt giá trị của hằng số
TDRoiToiDa, đốm lửa sẽ biến mất (trở thành đốm lửa
không hoạt động).
Hình 3 minh họa nội dung thủ tục Timer1_Timer(). |
 |
|
Trên đây chỉ là nguyên tắc tạo chương trình bắn pháo
hoa. Để tìm hiểu chi tiết, bạn
tham khảo mã nguồn tại
www.echip.com.vn. Chúc bạn thành công! |
|
|
|
 |
|
 |