68 lines
2.0 KiB
Plaintext
68 lines
2.0 KiB
Plaintext
BEGIN
|
|
INTEGER NUM_PARTICLES;
|
|
INTEGER LINES, COLUMNS;
|
|
INTEGER SEED;
|
|
|
|
NUM_PARTICLES := 1000;
|
|
LINES := 46;
|
|
COLUMNS := 80;
|
|
SEED := ININT;
|
|
BEGIN
|
|
|
|
PROCEDURE DRAW_BROWNIAN_TREE(WORLD); INTEGER ARRAY WORLD;
|
|
BEGIN
|
|
INTEGER PX, PY; COMMENT PARTICLE VALUES ;
|
|
INTEGER DX, DY; COMMENT OFFSETS ;
|
|
INTEGER I;
|
|
|
|
COMMENT SET THE SEED ;
|
|
PX := RANDINT(0,LINES-1,SEED);
|
|
PY := RANDINT(0,COLUMNS-1,SEED);
|
|
WORLD(PX,PY) := 1;
|
|
|
|
FOR I := 0 STEP 1 UNTIL NUM_PARTICLES - 1 DO BEGIN
|
|
COMMENT SET PARTICLE'S INITIAL POSITION ;
|
|
PX := RANDINT(0,LINES-1,SEED);
|
|
PY := RANDINT(0,COLUMNS-1,SEED);
|
|
|
|
WHILE TRUE DO BEGIN
|
|
COMMENT RANDOMLY CHOOSE A DIRECTION ;
|
|
DX := RANDINT(-1,1,SEED);
|
|
DY := RANDINT(-1,1,SEED);
|
|
|
|
IF DX + PX < 0 OR DX + PX >= LINES
|
|
OR DY + PY < 0 OR DY + PY >= COLUMNS THEN
|
|
BEGIN
|
|
COMMENT PLOP THE PARTICLE INTO SOME OTHER RANDOM LOCATION ;
|
|
PX := RANDINT(0,LINES-1,SEED);
|
|
PY := RANDINT(0,COLUMNS-1,SEED);
|
|
END ELSE IF WORLD(PX + DX, PY + DY) <> 0 THEN BEGIN
|
|
COMMENT BUMPED INTO SOMETHING ;
|
|
WORLD(PX, PY) := 1;
|
|
GO TO BREAK;
|
|
END ELSE BEGIN
|
|
PY := PY + DY;
|
|
PX := PX + DX;
|
|
END IF;
|
|
END WHILE;
|
|
BREAK:
|
|
END FOR;
|
|
END DRAW_BROWNIAN_TREE;
|
|
|
|
INTEGER ARRAY WORLD(0:LINES-1,0:COLUMNS-1);
|
|
INTEGER I,J;
|
|
|
|
DRAW_BROWNIAN_TREE(WORLD);
|
|
|
|
FOR I := 0 STEP 1 UNTIL LINES-1 DO
|
|
BEGIN
|
|
FOR J := 0 STEP 1 UNTIL COLUMNS-1 DO
|
|
BEGIN
|
|
OUTCHAR(IF WORLD(I,J)=0 THEN '.' ELSE '*');
|
|
END;
|
|
OUTIMAGE;
|
|
END;
|
|
|
|
END;
|
|
END.
|