[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]