1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
program Ondoyant;
{$IFDEF WINDOWS}
{$APPTYPE GUI}
{$ENDIF}
(* Programme original :
http://alcatiz.developpez.com/tutoriel/owl/?page=pg_gdi *)
uses
PtcGraph, PtcCrt;
const
indiceMax = 100;
vitesse = 100;
dx1: integer = 4;
dy1: integer = 10;
dx2: integer = 3;
dy2: integer = 9;
type
tLigne = record
x1, y1, x2, y2: integer;
couleur: word;
end;
tTabLignes = array[0..indiceMax]of tLigne;
var
tabLignes: tTabLignes;
indiceGeneral: integer;
effacer: boolean;
function Initialise: boolean;
var
d, m: smallint;
i: integer;
begin
d := d16bit;
m := m800x600;
InitGraph(d, m, '');
result := (GraphResult = grOk);
if result then
begin
for i := 0 to indiceMax do
tabLignes[i].x1 := -1;
indiceGeneral := 0;
effacer := false;
end;
end;
procedure NouvelleLigne(var coord, intervalle : integer; coordMax : integer; var couleur : word);
var
total : integer;
signe : integer;
begin
total := coord + intervalle;
if (total < 0) or (total > coordMax) then
begin
if intervalle >= 0 then
signe := -1
else
signe := 1;
intervalle := signe * (3 + Random(12));
couleur := Random(65535) + 1;
end else
coord := total;
end;
procedure DessinLigne(i: integer);
begin
with tabLignes[i] do
begin
SetColor(couleur);
Line(x1, y1, x2, y2);
end;
end;
procedure Redessine;
var
i: integer;
ancienIndice: integer;
begin
for i := 1 to 10 do
begin
ancienIndice := indiceGeneral;
if indiceGeneral = indiceMax - 1 then
begin
indiceGeneral := 0;
effacer := True;
end else
Inc(indiceGeneral);
if effacer then
begin
tabLignes[indiceGeneral].couleur := 0;
DessinLigne(indiceGeneral);
end;
tabLignes[indiceGeneral] := tabLignes[ancienIndice];
with tabLignes[indiceGeneral] do
begin
NouvelleLigne(x1, dx1, GetMaxX, couleur);
NouvelleLigne(y1, dy1, GetMaxY, couleur);
NouvelleLigne(x2, dx2, GetMaxX, couleur);
NouvelleLigne(y2, dy2, GetMaxY, couleur);
end;
DessinLigne(indiceGeneral);
end;
end;
begin
Randomize;
if Initialise then
begin
repeat
Redessine;
Delay(vitesse);
until KeyPressed;
CloseGraph;
end;
end. |
Partager