Giả lập cảnh cháy lửa trong Turbo Pascal
Giả lập cảnh lửa cháyLưu Văn MinhMột biển lửabùng cháy, các đối tượng bay trong không gian bốc cháy . Các cảnh này xuấthiện trong rất nhiều các demo, trông hệt như thật và rất ấn tượng. Bạn có muốnlàm được những điều này không, phương pháp để thực hiện nó hết sức đơn giản.Trước tiên bạn phải tạo một palette có những gam màu chuyển tiếp giống như màulửa cháy. Bạn sẽ thay đổi màu dần từ dưới thấp lên cao, màu của mỗi pixel trongngọn lửa chính là màu trung bình của 4 pixel dưới nó. Nghĩa là:Bây giờchúng ta cần một vị trí cho ngọn lửa bắt đầu. Và ta sẽ chọn ngay dưới đáy củamàn hình. Tại đây, ở tâm ngọn lửa, là nơi sáng chói nhất nên những màu đượcdùng nằm tại vị trí cao của bảng màu (vàng, trắng .). Dưới tácđộng của lưới lọc trên, mỗi lần lửa lại bốc lên phía trên và có màu sậm dần (vịtrí thấp trong bảng màu). ý tưởnglà thực hiện lưới lọc nhiều lần và sự thay đổi trông thấy của các lần lọc vớilưới lọc trên cho bạn cảm giác lửa đang bốc lên từ đáy màn hình.Và nếu bạnmuốn tạo thêm hiệu ứng chẳng hạn bạn có thể cho một dòng text màu sáng vào vùnglửa, nó sẽ chịu ảnh hưởng của bộ lọc ngay. Dòng text cũng bốc cháy giống nhưđưa nó vào ngọn lửa thật.Chươngtrình: FIRE.PASvarFire: array[-5 325, 120 200] of Byte;procedure SetRGB(Index, R, G, B: Byte);assembler;asmMov dx, 3C8H;Mov al, [Index];Out dx, al;Inc dx;Mov al, [R];Out dx, al;Mov al, [G];Out dx, al;Mov al, [B];Out dx, al;end;procedure SetPalette;i: Byte;beginfor i := 0 to 49 do beginSetRGB(i, 0, 0, 0);SetRGB(i + 50, i, 0, 0);SetRGB(i + 100, 49, i, 0);SetRGB(i + 150, 49, 49, i);end;(* Các bạn cũng có thể dùng Palete dướiđây *){for i := 0 to 63 dobeginSetRGB(i, i, 0, 0);SetRGB(i + 64, 63, i, 0);SetRGB(i + 128, 63, 63, i);SetRGB(i + 192, 63, 63, 0);end;}end;procedure Solution;x, y, Index: Integer;beginfor x := -5 to 325 dofor y := 120 to 200 dobeginIndex := Fire[x - 1, y + 1] + Fire[x, y + 1] +Fire[x + 1, y + 1] + Fire[x, y + 2]; Index := Index div 4;if y = 199 then Index := Random(80) + 120;if Index > 0 then Dec(Index);Fire[x, y] := Index;if (x > 0) and (x < 319) and (y < 199) thenMem[$A000:(y shl 6) + (y shl 8) + x] := Index;end;end;BEGINasmMov ax, $13;Int $10;end;SetPalette;repeatSolution;until Port[$60] = 1;asmMov ax, $3;Int $10;end;END. . Giả lập cảnh lửa cháyLưu Văn MinhMột biển lửabùng cháy, các đối tượng bay trong không gian bốc cháy. .. Các cảnh này xuấthiện trong rất nhiều. pháp để thực hiện nó hết sức đơn giản.Trước tiên bạn phải tạo một palette có những gam màu chuyển tiếp giống như màulửa cháy. Bạn sẽ thay đổi màu dần từ