//GenerateColourPNG method applys generation to grid, finds longest path and outputs result to coloured png.
        public static void GenerateColourImage(IGenerator _generator, int _width, int _height, string _path, IImageEncoder _imageEncoder, out DistanceGrid _grid)
        {
            //Create a grid.
            DistanceGrid grid = new DistanceGrid(_width, _height);

            //Apply maze algorithm.
            _generator.Generate(grid);

            //Find the distances.
            grid.FindDistances(grid[0, 0]);

            //Find the longest path.
            Cell startingCell = grid.FindLongestPath();

            grid.distances = grid.distances.PathTo(startingCell);
            grid.FindLongestPath();

            //Write result to file.
            MazeDisplay.ToImage(40, grid, RENDER_MODE.COLOUR, _path, _imageEncoder);

            //Output the grid.
            _grid = grid;
        }
        //GenerateConsolePath method applys generation to grid, finds longest path between and outputs result to console.
        public static void GenerateConsolePath(IGenerator _generator, int _width, int _height, out DistanceGrid _grid)
        {
            //Create a grid.
            DistanceGrid grid = new DistanceGrid(_width, _height);

            //Apply maze algorithm.
            _generator.Generate(grid);

            //Find the distances.
            grid.FindDistances(grid[0, 0]);

            //Find the longest path.
            Cell startingCell = grid.FindLongestPath();

            grid.distances = grid.distances.PathTo(startingCell);

            //Output result to console.
            MazeDisplay.ASCIIDisplay(grid);

            //Output the grid.
            _grid = grid;
        }