unit maze;

interface

uses graph3, crt;
const GREEN = 1; RED = 2; ORANGE = 3;
type MAZE_ARRAY = ARRAY [1..33] OF STRING;

procedure init_chicago_maze (var name: STRING; var chicago_maze: MAZE_ARRAY);
procedure init_london_maze (var name: STRING; var london_maze: MAZE_ARRAY);
procedure init_japan_maze (var name: STRING; var japan_maze: MAZE_ARRAY);
procedure write_text (name: STRING);
procedure draw_maze (any_maze: MAZE_ARRAY; colour: INTEGER);
procedure draw_blocks (any_maze: MAZE_ARRAY; colour: INTEGER);
function  roadblock_count (x_pos, y_pos: INTEGER; any_maze: MAZE_ARRAY):INTEGER;
function  wall_count (x_pos, y_pos: INTEGER; any_maze: MAZE_ARRAY):INTEGER;

implementation

procedure init_chicago_maze (var name: STRING; var chicago_maze: MAZE_ARRAY);
begin
  name := '       Chicago 1986';
  Chicago_maze [1]:=(' - - - - - - - - - - - - - - - - ');
  chicago_maze [2]:=('Ý       Ý   Ý Ý   Ý     Ý       Ý');
  chicago_maze [3]:=(' - -                       - -   ');
  chicago_maze [4]:=('Ý     Ý       Ý Ý Ý Ý Ý     Ý   Ý');
  chicago_maze [5]:=('   -     - -                     ');
  chicago_maze [6]:=('Ý   Ý Ý     Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý');
  chicago_maze [7]:=('                                 ');
  chicago_maze [8]:=('Ý Ý Ý Ý Ý Ý     Ý     Ý Ý Ý   Ý Ý');
  chicago_maze [9]:=('   -   - - -   - - - -     -     ');
  chicago_maze[10]:=('Ý   Ý   Ý   Ý Ý         Ý   Ý   Ý');
  chicago_maze[11]:=('     - - -             - -   - - ');
  chicago_maze[12]:=('Ý Ý Ý       Ý Ý Ý Ý Ý     Ý     Ý');
  chicago_maze[13]:=(' -     -   -           - - - -   ');
  chicago_maze[14]:=('Ý   Ý         Ý   Ý Ý     Ý     Ý');
  chicago_maze[15]:=('   - - - - - - - - - - -     -   ');
  chicago_maze[16]:=('Ý           Ý     Ý       Ý   Ý Ý');
  chicago_maze[17]:=('   - - - - -         - -   -   - ');
  chicago_maze[18]:=('Ý Ý         Ý Ý   Ý         Ý   Ý');
  chicago_maze[19]:=('     - - -     - - - -           ');
  chicago_maze[20]:=('Ý Ý Ý       Ý Ý Ý   Ý Ý Ý Ý   Ý Ý');
  chicago_maze[21]:=('     - - -               - -     ');
  chicago_maze[22]:=('Ý Ý       Ý   Ý   Ý   Ý     Ý   Ý');
  chicago_maze[23]:=('     -   - - -   -       -       ');
  chicago_maze[24]:=('Ý Ý Ý               Ý   Ý   Ý Ý Ý');
  chicago_maze[25]:=('   - - - - - - - - - - - -       ');
  chicago_maze[26]:=('Ý Ý       Ý     Ý Ý       Ý Ý   Ý');
  chicago_maze[27]:=('   - -       -       - -   - -   ');
  chicago_maze[28]:=('Ý     Ý Ý   Ý Ý   Ý         Ý Ý Ý');
  chicago_maze[29]:=('   -     - -     - - - - -       ');
  chicago_maze[30]:=('Ý Ý Ý Ý   Ý       Ý         Ý   Ý');
  chicago_maze[31]:=('             - -   - -     - -   ');
  chicago_maze[32]:=('Ý Ý     Ý       Ý       Ý       Ý');
  chicago_maze[33]:=('   - - - - - - - - - - - - - - - ');
end; { init_chicago_maze }

procedure init_london_maze (var name: STRING; var london_maze: MAZE_ARRAY);
begin
  name := '        London 1981';
  london_maze [1]:=(' - - - - - - - - - - - - - - - - ');
  london_maze [2]:=('Ý                               Ý');
  london_maze [3]:=('   - - - - - - - - - - - - - -   ');
  london_maze [4]:=('Ý Ý                           Ý Ý');
  london_maze [5]:=('     - - - -     - - - - - -     ');
  london_maze [6]:=('Ý Ý Ý       Ý Ý             Ý Ý Ý');
  london_maze [7]:=('       - -       - -   - -       ');
  london_maze [8]:=('Ý Ý Ý Ý   Ý Ý Ý Ý         Ý Ý   Ý');
  london_maze [9]:=('                 - - - -       - ');
  london_maze[10]:=('Ý Ý Ý Ý Ý Ý Ý Ý           Ý Ý Ý Ý');
  london_maze[11]:=('               - - - -   -       ');
  london_maze[12]:=('Ý Ý Ý Ý Ý Ý Ý Ý       Ý     Ý Ý Ý');
  london_maze[13]:=('                 - -   - -       ');
  london_maze[14]:=('Ý Ý Ý Ý Ý Ý Ý   Ý         Ý   Ý Ý');
  london_maze[15]:=('               -     - -   - -   ');
  london_maze[16]:=('Ý Ý Ý Ý Ý Ý Ý Ý   Ý Ý   Ý Ý     Ý');
  london_maze[17]:=('                           -   - ');
  london_maze[18]:=('Ý Ý     Ý Ý Ý Ý   Ý Ý Ý Ý   Ý   Ý');
  london_maze[19]:=('   - - -       - -       -   -   ');
  london_maze[20]:=('Ý Ý     Ý Ý Ý       Ý     Ý Ý   Ý');
  london_maze[21]:=('       -     - - - - - -       - ');
  london_maze[22]:=('Ý Ý Ý     Ý Ý             Ý Ý   Ý');
  london_maze[23]:=('     - - -     - -   -   -   -   ');
  london_maze[24]:=('Ý Ý   Ý     Ý                   Ý');
  london_maze[25]:=('         - - - - - -           - ');
  london_maze[26]:=('Ý   Ý   Ý           Ý           Ý');
  london_maze[27]:=(' -     -   - - - -   -   -   -   ');
  london_maze[28]:=('Ý   Ý Ý   Ý       Ý   Ý         Ý');
  london_maze[29]:=('         -   - -   -   -   -   - ');
  london_maze[30]:=('Ý Ý Ý   Ý     Ý     Ý   Ý       Ý');
  london_maze[31]:=('       - - -     - - -   - - -   ');
  london_maze[32]:=('Ý Ý           Ý                 Ý');
  london_maze[33]:=('   - - - - - - - - - - - - - - - ');
end; { init_chicago_maze }

procedure init_japan_maze (var name: STRING; var japan_maze: MAZE_ARRAY);
begin
  name := '        Japan 1982';
  japan_maze [1]:=(' - - - - - - - - - - - - - - - - ');
  japan_maze [2]:=('Ý Ý             Ý       Ý       Ý');
  japan_maze [3]:=('     - - - - -   -               ');
  japan_maze [4]:=('Ý Ý         Ý Ý     Ý Ý Ý Ý Ý Ý Ý');
  japan_maze [5]:=('   -             -       -       ');
  japan_maze [6]:=('Ý Ý Ý Ý Ý Ý Ý Ý     Ý Ý     Ý Ý Ý');
  japan_maze [7]:=('                 - - -   - - -   ');
  japan_maze [8]:=('Ý Ý Ý Ý Ý Ý Ý Ý               Ý Ý');
  japan_maze [9]:=('                 - - -   - -     ');
  japan_maze[10]:=('Ý Ý   Ý Ý Ý Ý Ý               Ý Ý');
  japan_maze[11]:=('                 - - -   - -     ');
  japan_maze[12]:=('Ý Ý Ý Ý       Ý               Ý Ý');
  japan_maze[13]:=('                 - - -   - -     ');
  japan_maze[14]:=('Ý Ý Ý Ý Ý Ý Ý Ý               Ý Ý');
  japan_maze[15]:=('   -           - - - - - - - -   ');
  japan_maze[16]:=('Ý       Ý Ý Ý Ý               Ý Ý');
  japan_maze[17]:=('   -               - - - - -     ');
  japan_maze[18]:=('Ý Ý Ý Ý Ý Ý Ý Ý   Ý             Ý');
  japan_maze[19]:=('               - - - - - - - -   ');
  japan_maze[20]:=('Ý Ý Ý Ý Ý Ý Ý Ý                 Ý');
  japan_maze[21]:=('                 - - -   - -     ');
  japan_maze[22]:=('Ý Ý Ý Ý       Ý               Ý Ý');
  japan_maze[23]:=('                 - - -   - -     ');
  japan_maze[24]:=('Ý Ý   Ý Ý Ý Ý Ý               Ý Ý');
  japan_maze[25]:=('                 - - -   - -     ');
  japan_maze[26]:=('Ý Ý Ý Ý Ý Ý Ý Ý               Ý Ý');
  japan_maze[27]:=('                 - - -   - - -   ');
  japan_maze[28]:=('Ý Ý Ý Ý Ý Ý Ý Ý     Ý Ý     Ý Ý Ý');
  japan_maze[29]:=('   -             -       -       ');
  japan_maze[30]:=('Ý Ý         Ý Ý     Ý Ý Ý Ý Ý Ý Ý');
  japan_maze[31]:=('     - - - - -   -               ');
  japan_maze[32]:=('Ý Ý             Ý       Ý       Ý');
  japan_maze[33]:=('   - - - - - - - - - - - - - - - ');
end; { init_chicago_maze }

procedure write_text (name: STRING);
var row: INTEGER;
begin
  graphcolormode;
  writeln (name);
  for row := 1 to 11 do writeln;
  writeln ('            F');
  for row := 1 to 9 do writeln;
  writeln ('   S');
end;

procedure draw_maze (any_maze: MAZE_ARRAY; colour: INTEGER);
var row, column, x, y, last_x, last_y: INTEGER;
begin
  y := 23;
  for row := 1 to 34 do
  begin
    x := 21; last_x := x;
    for column := 1 to 32 do
    begin
      x := x + 10;
      column := column + 1;
      if any_maze[row][column] = '-' then draw (last_x, y, x, y, colour);
      last_x := x;
    end;
    y := y + 10;
    row := row + 1;
  end;

  y := 23;
  for row := 2 to 33 do
  begin
    x := 21; last_y := y;
    y := y + 10;
    for column := 1 to 34 do
    begin
      if any_maze[row][column] = 'Ý' then draw (x, last_y, x, y, colour);
      x := x + 10;
      column := column + 1;
    end;
    row := row + 1;
  end;
end; { draw_maze }

procedure draw_blocks (any_maze: MAZE_ARRAY; colour: INTEGER);
var row, column, x, y, last_x, last_y: INTEGER;
begin
  y := 23;
  for row := 1 to 34 do
  begin
    x := 21; last_x := x;
    for column := 1 to 32 do
    begin
      x := x + 10;
      column := column + 1;
      if any_maze[row][column] = 'B' then draw (last_x, y, x, y, colour);
      last_x := x;
    end;
    y := y + 10;
    row := row + 1;
  end;

  y := 23;
  for row := 2 to 33 do
  begin
    x := 21; last_y := y;
    y := y + 10;
    for column := 1 to 34 do
    begin
      if any_maze[row][column] = 'B' then draw (x, last_y, x, y, colour);
      x := x + 10;
      column := column + 1;
    end;
    row := row + 1;
  end;
end; { draw_maze }

function roadblock_count (x_pos, y_pos: INTEGER; any_maze: MAZE_ARRAY):INTEGER;
var x_wall, y_wall, count: INTEGER;
begin
  x_wall := x_pos * 2; y_wall := y_pos * 2;
  count := 0;

  if any_maze [y_wall  ][x_wall-1] <> ' ' then count := count + 1;
  if any_maze [y_wall  ][x_wall+1] <> ' ' then count := count + 1;
  if any_maze [y_wall-1][x_wall  ] <> ' ' then count := count + 1;
  if any_maze [y_wall+1][x_wall  ] <> ' ' then count := count + 1;

  roadblock_count := count;
end; { roadblock_count }

function wall_count (x_pos, y_pos: INTEGER; any_maze: MAZE_ARRAY):INTEGER;
var x_wall, y_wall, count: INTEGER;
begin
  x_wall := x_pos * 2; y_wall := y_pos * 2;
  count := 0;

  if any_maze [y_wall  ][x_wall-1] = 'Ý' then count := count + 1;
  if any_maze [y_wall  ][x_wall+1] = 'Ý' then count := count + 1;
  if any_maze [y_wall-1][x_wall  ] = '-' then count := count + 1;
  if any_maze [y_wall+1][x_wall  ] = '-' then count := count + 1;

  wall_count := count;
end; { wall_count }

end. { mouse }