This project should help you prove your knowledge of inheritance in Java.
Do Programming Project 10.1.
Keep in mind that the Maze could be as simple as a String[][]! Don't try to over-complicate it. ...unless you want to...
Hint on the MemoryRobot: Your goal in remembering all locations you've previously visited is to mark those that lead to a dead end. For instance, when you turn down that first hall on your left (heading down from the top) in the example maze, you don't know you are at a dead end until you hit the fourth step and try to go on. Then you'll have to remember that this position lead to a dead end — and do so all the way back out of the hallway for each position!
This project earns you (Level 6) toward your level requirements.
For an additional (Level 1), you can implement a Maze class with specialized accessors such as isOpen() or isWall().
For an additional (Level 1.5), you can display the Maze to your user and ask them for the coordinates at which to start the robot. (Does this bring to light any assumptions you made during the design of your MemoryRobot?)
You can even add another (Level 1.5) to make the interface a GUI application with buttons for setting each robot type in motion and allowing them to click the position of the placement. Heck, implement a selection box (radio or drop-down style) of which robot to use for (Level 1) more!
For an additional (Level 1.5), you can have all the robots go 'at once'. That is, rather than having a single robot in the maze at a time, have them all roaming the halls at once. You'll need to assume that robots can pass one another in the hallway. But, more importantly, they can't actually all be moving simultaneously. You'll have to have a queue of them and cycle through it so that each robot gets a turn.
(If you remove the assumption that robots can pass each other in a hallway, it would seem that robots might be temporarily stuck. It is worse than that, however. Consider the following scenario in that upper hallway:
* ******* * rm * * * ***** * * * * *
Here r represents the RightHandRuleRobot and m represents the MemoryRobot. r must have come in here from below — following the right-hand turn. m may still be heading down the hall or may be coming back — marking that s/he's found a dead end. Either way, there will be no further progress for either of these two! r will keep trying to push down the hallway and m will keep trying to back out of the hallway. (RandomRobot causes no permanent problems since it could at any minute back out of the way.)
Other situations exist, too. Otherwise I'd probably let you remove the assumption for more Levels. *smile*)
For the over-eager or just plain bored, I'll throw (Level 6) to thread this booster. That is, run each robot in a separate thread. (You still must keep the passing assumption; threads won't break the above deadlock!)
This space reserved to add more boosters...