Project 4: Implementing driver algorithms that make the robot escape from the maze


To Deliver: release 6.0 in svn repository (tags/release6.0), email with crc card design to your grader: Md Atiqur Rahman <mrahman@email.wm.edu> (Section 1), Jianhua Sun <jsun01@email.wm.edu> (Section 2).

To Download: 

Due date for submission:    Oct 26

Drop out date:                     Oct 29, at 5 AM (EARLY MORNING)


Motivation

There are many different ways to escape from a maze.  In this project, we want to implement such algorithms for the robot whose functionality is specified by a given Robot.java interface which you implemented in Project 3.

The interface follows what a Lego robot may provide for as sensors to recognize distant objects (here walls) and the ability to move forward, backward and to turn on the spot. 

We also want to compare algorithms in terms of their energy efficiency to operate the robot. So there is a some energy consumption being involved in any movement and sensor operation and the robot draws energy from its battery on its journey. 

Operating the robot needs care, hitting a wall will damage it and will cause an emergency stop. 


We want to consider four different Robot driver algorithms:




We also need to adjust the maze application class to provide us with a user interface such that we can select a robot driver algorithm (plus one option for a manual operation). Hint: check for Combo Boxes. The RobotDriver will basically do the same thing as the manual driver implemented in Project 3 but this time in a fully automated way. 


The robot configuration we will consider at this point is the following:


What to learn from this project:

- Experience in test-driven design and limitations of testing when it comes to randomized algorithms and graphics. 

- Using inheritance to share code across classes that solve same problems in different ways

- Implementing different versions of algorithms in an object oriented manner

- Learn to work with exceptions



Design decision


To retain a reasonably uniform design, I would like to fix the following naming conventions for classes:


Classes that implement the RobotDriver interface for the different algorithms are named: Gambler.java, CuriousGambler.java, WallFollower.java, Wizard.java.

Provide each class with at least one constructor that has no parameters and operates a robot with the default configuration we consider.



Classes that implement test cases for each class have the class name followed by suffix Test, e.g. GamblerTest.java for the Gambler.java class.




To do list:



 

Grading