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
| CONST Nmax= 5000;
TYPE VectW2 = RECORD x, y: Word END;
LstVw2 = ARRAY[0..Nmax] OF VectW2;
VAR Ndep, Nparc: Word; Liste: LstVw2;
PROCEDURE ZeroE(VAR k: Word);
BEGIN
k:= 0
END;
PROCEDURE TraceP(We: VectW2);
BEGIN
GotoXY((We.x MOD 256), (We.y MOD 256)); Write('Û')
END;
... / ...
PROCEDURE Trace1(VAR Nd: Word; VAR Li: LstVw2);
CONST NmaxTir = 100;
VAR h, k, m: Word; Va, Ve: VectW2; Tx, Ty, Tz: Bool;
BEGIN
Randomize; k:= 0; Ve:= Li[0];
REPEAT
h:= 0;
REPEAT
Inc(h); Va:= Ve;
TirageDir(Va); Tx:= ((0<Va.x) AND (Va.x<81));
Ty:= ((0<Va.y) AND (Va.y<61)); Tz:= TestProx(k, Va, Liste)
UNTIL (((Tx AND Ty) AND Tz) OR (h>NmaxTir));
IF (h<=NmaxTir) THEN BEGIN
Inc(k); Ve:= Va;
Li[k]:= Ve; TraceP(Ve)
END;
UNTIL (k=(Nmax - 1)) OR ((Ve.x>70) AND (Ve.y>50)) OR (h>NmaxTir);
IF (h>NmaxTir) THEN E(0012) ELSE E(0009);
TraceP(Liste[k]); Nd:= k
END;
PROCEDURE InitV(Vx, Vy: Word; VAR V1: VectW2);
VAR V2: VectW2;
BEGIN
WITH V2 DO BEGIN
x:= Vx; y:= Vy
END;
V1:= V2
END;
PROCEDURE InitL(VAR Li: LstVw2);
CONST Vzero: VectW2 = (x:0; y:0);
VAR k: Word;
BEGIN
FOR k:= 1 TO Nmax DO Li[k]:= Vzero
END;
PROCEDURE Trace0;
BEGIN
InitL(Liste); InitV(10, 10, Liste[0]);
E(1010); TraceP(Liste[0]);
F(71, 51, 80, 60, 5); E(0014)
END; |
Partager