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