Firework
Firework
program Firework;
uses Types, QuickDraw, Events, MiscTool;
type
Fire = Record
x, y, xdir, ydir: Integer;
end;
var
i, j, x, y, color: Integer;
tick: LongInt;
fires: Array[0..30] of Fire;
begin
graphics(320);
clearScreen(black);
hideCursor;
tick := getTick;
setRandSeed(tick);
while true do begin
{ Setup firework }
setPenSize(1, 1);
color := random mod 15 + 1;
x := random mod 320;
y := random mod 100 + 50;
for i := 0 to 30 do begin
fires[i].x := x;
fires[i].y := y;
fires[i].xdir := random mod 8 - 4;
fires[i].ydir := random mod 8 - 4;
end;
{ Shoot 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);
setSolidPenPat(black);
moveTo(fires[j].x, fires[j].y);
line(0, 0);
fires[j].x := fires[j].x + fires[j].xdir;
fires[j].y := fires[j].y + fires[j].ydir;
setSolidPenPat(color);
moveTo(fires[j].x, fires[j].y);
line(0, 0);
if button(0) then exit;
end;
repeat until getTick > tick;
tick := tick + 1;
end;
clearScreen(black);
end;
end.
Firework!
This program teaches random number generation. The random number will always be the same unless it started on a random seed - the current system tick is a good choice.
You can see the alternate Orca/Pascal and GSoft BASIC versions here. Orca/Pascal version is written using Object Pascal, an object oriented extension of the Pascal language.