Firework
Firework
program Firework;
uses Common, QuickDrawII, EventMgr, MscToolSet;
type
Fire = Object
x, y, xdir, ydir: Integer;
procedure setup(startX, startY: Integer);
procedure move;
end;
var
i, j, k, x, y, color: Integer;
tick: LongInt;
fires: Array[0..30] of Fire;
procedure Fire.setup;
begin
x := startX;
y := startY;
xdir := randomInteger mod 8 - 4;
ydir := randomInteger mod 8 - 4;
end;
procedure Fire.move;
begin
setSolidPenPat(black);
moveTo(x, y);
line(0, 0);
x := x + xdir;
y := y + ydir;
setSolidPenPat(color);
moveTo(x, y);
line(0, 0);
end;
begin
startDesk(320);
clearScreen(black);
hideCursor;
tick := getTick;
setRandSeed(tick);
while true do begin
{ Setup fire }
setPenSize(1, 1);
color := randomInteger mod 15 + 1;
x := randomInteger mod 320;
y := randomInteger mod 100 + 50;
for i := 0 to 30 do begin
new(fires[i]);
fires[i].setup(x, y);
end;
{ Draw fire }
for i := 1 to 30 do begin
setSolidPenPat(black);
moveTo((i - 1) * x div 30,
(i - 1) * y div 30);
line(0, 0);
setSolidPenPat(color);
moveTo(i * x div 30, i * y div 30);
line(0, 0);
repeat until getTick - tick > 1;
tick := getTick;
end;
{ Draw firework }
for i := 1 to 30 do begin
for j := 0 to 30 do begin
setPenSize(i div 15 + 1, i div 15 + 1);
fires[j].move;
if button(0) then begin
for k := 0 to 30 do
dispose(fires[i]);
endDesk;
halt(0);
end;
end;
repeat until getTick > tick;
tick := tick + 1;
end;
clearScreen(black);
end;
end.
Firework!
This is the Orca/Pascal version, written using Object Pascal to demonstrate object oriented programming.