/*
Source file: MazeArray.java
Program: Maze Array
Author: Markus Bautsch
Licence: public domain
Date: 23 October 2020
Version: 1.0
Programming language: Java
*/
/*
This class implements a rectangular maze
with width fields in horizontal direction and
with height maze fields in vertical direction.
A maze field is rectangular and can have walls and borders at its edges.
The maze has to be initialised with all walls blocked
and some of these walls can be removed for building a maze.
The outer rim of the maze has to be defined by borders.
Borders are also allowed within the maze to exclude certain fields from the maze.
Borders must have walls.
Maze fields outside the outer borders must not have walls.
*/
public class MazeArray
{
/* Size of maze */
private int width;
private int height;
/* Array for maze fields */
public MazeField [][] fields;
/* Constructor */
public MazeArray (int width, int height)
{
this.width = width;
this.height = height;
createMazeFields ();
}
public int getWidth ()
{
return this.width;
}
public int getHeight ()
{
return this.height;
}
/* This method creates all maze fields */
private void createMazeFields ()
{
int width = this.width;
int height = this.height;
fields = new MazeField [width][height];
int y = 0;
while (y < height)
{
int x = 0;
while (x < width)
{
fields [x][y] = new MazeField (x, y);
x++;
}
y++;
}
}
/* This method throws a MazeException if it detects formal errors within the maze */
public void checkMaze () throws MazeException
{
int width = this.width;
int height = this.height;
int y = 0;
while (y < height)
{
int x = 0;
while (x < width)
{
if (!fields [x][y].checkBorders ())
{
throw new MazeException ("Maze field design error at: x = " + x + " / y = " + y);
}
x++;
}
y++;
}
}
}