76 lines
1.3 KiB
ObjectPascal
76 lines
1.3 KiB
ObjectPascal
{$H1}
|
|
{$S2}
|
|
program fire;
|
|
const MAXX = 30;
|
|
MAXY = 50;
|
|
var firebuf: array [0..MAXY, 0..MAXX] of integer;
|
|
|
|
firepalette: array [0..15] of integer =
|
|
( $FFA, $FF8, $FF4, $FF0, $FE0, $FD0, $FA0, $F90,
|
|
$F00, $E00, $D00, $A00, $800, $600, $300, $000);
|
|
x,y:integer;
|
|
|
|
procedure createPalette;
|
|
var i:integer;
|
|
begin
|
|
for i := 15 downto 0 do
|
|
setpalette(15 - i, firepalette[i]);
|
|
end;
|
|
|
|
procedure fireItUp;
|
|
var x,y:integer;
|
|
begin
|
|
y := MAXY - 1;
|
|
for x := 1 to MAXX - 1 do
|
|
firebuf[y, x] := random and 127;
|
|
end;
|
|
|
|
procedure updateFire;
|
|
var i,x,y:integer;
|
|
begin
|
|
for y := 0 to MAXY - 2 do
|
|
for x := 1 to MAXX - 1 do
|
|
begin
|
|
i :=
|
|
((firebuf[y + 1, x - 1]
|
|
+ firebuf[y + 1, x]
|
|
+ firebuf[y + 1, x + 1]
|
|
+ firebuf[y + 2, x])
|
|
) shr 2;
|
|
if i > 0 then
|
|
i := i - 1;
|
|
firebuf[y, x] := i;
|
|
end;
|
|
end;
|
|
|
|
procedure drawFire;
|
|
var x, y, col:integer;
|
|
begin
|
|
for y := 0 to MAXY - 1 do
|
|
begin
|
|
x := 0;
|
|
for col in firebuf[y] do
|
|
begin
|
|
putpixel(300 + x, 150 + y, col shr 3);
|
|
x := x + 1;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
randomize;
|
|
initgraphics;
|
|
createPalette;
|
|
while not conavail do
|
|
begin
|
|
fireItUp;
|
|
updateFire;
|
|
drawFire;
|
|
end;
|
|
|
|
for y := 0 to MAXY do
|
|
begin
|
|
x := firebuf[y, 10];
|
|
drawline(0, y, x, y, 1);
|
|
end;
|
|
end.
|