SỐ 169
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!
[Đầu trang]
Trang chủ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Cõi người ta
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền Công ty Phần mềm & Truyền thông VASC
 99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn
Mọi chi tiết về kinh doanh và quảng cáo xin liên hệ Phòng Quảng cáo. Tel: (04) 9782077 kd@vasc.com.vn