2 pièce(s) jointe(s)
Animation produite par une procédure récursive
Bonjour !
Dans le cadre du défi Pascal j'ai écrit un petit programme qui génère un labyrinthe et cherche un chemin d'un point à un autre. La recherche progresse par récursion. A l'entrée de la procédure je dessine un petit carré à la position courante, et à la sortie je l'efface, sauf si le point d'arrivée est atteint, auquel cas le programme s'arrête et laisse voir le chemin parcouru.
Code:
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
| procedure tDemo.ChercheCentre(aL: tLabyr; aX, aY: integer);
var
i, dX, dY, lX, lY: integer;
arret: boolean;
begin
if (aX<1) or (aX>19) or (aY<1) or (aY>19) then
Exit;
Carre(aX, aY, c1, c2);
fil[aX, aY] := TRUE;
if aX * aY = 100 then
trouve := TRUE;
for i := 0 to 3 do
begin
lX := aX + croix[i,0];
lY := aY + croix[i,1];
arret := fil[lX, lY]
or (aL[lX div 3, lY div 3][lX mod 3, lY mod 3] = 1)
or trouve;
if not arret then
ChercheCentre(aL, lX, lY);
end;
if not(trouve or (aX*aY = 1)) then
Carre(aX, aY, Asparagus, Asparagus);
if not trouve then
fil[aX, aY] := FALSE;
end; |
Mais de cette façon on ne voit pas les évolutions du chemin.
J'ai écrit le même programme pour FreePascal avec l'unité WinGraph : il m'a suffi de mettre un Sleep() après le dessin du petit carré pour obtenir l'effet désiré (voir pièce jointe).
Mais pour une animation Flash ça ne peut pas convenir, n'est-ce pas ? Comment vous y prendriez-vous pour faire une chose de ce genre avec FlashPascal ? :roll: