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 }