Assignment A1 - Maze Runner
Introduction
Maze Runner is a maze solver which when given a maze, can return an output that solves it, and when given both a maze and a user-entered path, can check whether or not the given path is correct to solve the given maze.
The project is built upon a program given by the professor, made to allow exploration of a maze (stored in a text file) from start to finish. The character # represents a wall and ␣ (empty spaces) represent passages. The code to finish and/or validate mazes is what was created by me.
Usage
Run the program using the command below, with the corresponding flags:
java -jar target/mazerunner.jar -i MAZE_FILE [-p PATH_SEQUENCE]
The format in which to input a potential path is as follows:
F means 'move forward' according to your current directionR means 'turn right', and L means ‘turn left’ (does not move, just change direction).F, R and L symbolsFFF = 3F, LL = 2L).FFLFF = FF L FF)The program will then return a factorized path if -p flag is not set, and will check the validity of the given path if the -p flag is a properly formatted path.
<aside> 🛠 This project was an important step in learning how to operate GitHub. I applied and built upon my knowledge of GitHub by additionally making use of Kanban Boards to track progress. It was also very good practice in learning to design elegant code, using SOLID and GRASP principles, deciding on ideal trade-offs and analyzing technical debt.
</aside>
<aside> 💡 During the project, I was curious about what we could have done, given more time. For example, if time permitted I could have looked into how to refactor the code, add more design patterns, and make it more maintainable. I could have also made it more user-friendly, by implementing some kind of GUI.
</aside>
<aside> ⛔ Some roadblocks I hit included maintaining an incremental schedule for new additions to the program, maintaining the Kanban board (including deciding the priority of issues and whether or not some of them were needed), and setting up a better Java environment for my development.
</aside>
<aside> 🚧 A big stumbling block for me was figuring out how to use dependencies like the apache log4j logger. Some of the more complex dependencies out there could be a nightmare to work with, especially without proper documentation.
</aside>