Separated the maze generation logic, so each algorithm has its own class. Also added a parent class containing common objects and methods to be shared for each algorithm class