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.