[Back to MISC SWAG index] [Back to Main SWAG index] [Original]
{
SEAN PALMER
> Hello there.. I was just wondering.. Since I am completely 'C'
> illiterate, could someone please make an effort and convert the
> following code in Pascal For me? (Its supposedly makes a solveable
> maze every time, Cool)
{originally by jallen@ic.sunysb.edu}
{Turbo Pascal conversion by Sean Palmer from original C}
Const
h = 23; {height}
w = 79; {width}
Const
b : Array [0..3] of Integer = (-w, w, 1, -1);
{ incs For up, down, right, left }
Var
a : Array [0..w * h - 1] of Boolean; { the maze (False = wall) }
Procedure m(p : Integer);
Var
i, d : Byte;
begin
a[p] := True; {make a path}
Repeat
d := 0; {check For allowable directions}
if (p > 2 * w) and not (a[p - w - w]) then
inc(d, 1); {up}
if (p < w * (h - 2)) and not (a[p + w + w]) then
inc(d, 2); {down}
if (p mod w <> w - 2) and not (a[p + 2]) then
inc(d, 4); {right}
if (p mod w <> 1) and not (a[p - 2]) then
inc(d, 8); {left}
if d <> 0 then
begin
Repeat {choose a direction that's legal}
i := random(4);
Until Boolean(d and(1 shl i));
a[p + b[i]] := True; {make a path}
m(p + 2 * b[i]); {recurse}
end;
Until d = 0; {Until stuck}
end;
Var
i : Integer;
begin
randomize;
fillChar(a, sizeof(a), False);
m(succ(w)); {start at upper left}
For i := 0 to pred(w * h) do
begin {draw}
if i mod w = 0 then
Writeln;
if a[i] then
Write(' ')
else
Write('Û');
end;
end.
[Back to MISC SWAG index] [Back to Main SWAG index] [Original]