In this program you will implement the Obstacle Course specification from the Object-Oriented Design lab.
Design a program to simulate a race through an obstacle course. Racers start at the starting line and move one space at a time. The race ends when the first racer crosses the finish line.
Your program should be able to support a variety of racer classes with different movement strategies.
Your program should include a graphical user interface that allows a user to control creating the obstacle course and placing obstacles and racers in it. Here are several design alternatives for the initialization aspect of the graphical user interface:
Regardless of the program initialization design you choose, your program should be able to handle multiple types of racers (or multiple movement strategies). You could allow each racer on the course to be of a different type, or you could allow one type for each run of the simulation, with all racers in a given run having the same type. Your program should also provide start/stop buttons and/or a step button. Finally, your program should graphically display the state of the obstacle course and obstacles and racers in it at the end of each time unit and provide a slider bar for changing the speed of the racers. (Actually, the slider bar controls the speed of the animation -- how long the program pauses to let you view the display between time steps -- rather than the speed of the racers.) When the first racer crosses the finish line, your program should report which racer finished first, and its winning time.
You may use the following classes or files, which have been fully or partially implemented and are available in ObstacleCourse.zip. Alternatively, you may implement your own graphical user interface.
ObstacleRaceApp
- a class
containing a partially implemented main method for the Obstacle Course projectAbstractRacer
- a class that extends GridObject; it redefines the changeLocation
method to prevent racers from attempting to move into locations that already
contain an obstacle or another racer (which would cause the program to throw
an exception)ObstCourseWindow
- a fully implemented class that provides a graphical user interface for
the Obstacle Course projectObstCourseEditor
- a fully implemented class that provides a second, "editing" window
for adding racers to the courseObstCourseFileMenuActionHandler
-
a fully implemented class that provides actions corresponding to the menu
items in the File menu created by ObstCourseWindow
ObstCourseDataFileHandler
- a fully implemented class that reads the obstacle course information from
a file and constructs the coursesixObstacles.dat
- a sample
initial configuration file for an obstacle courseimages
- a folder containing a number of pictures that could be used to
represent racers and obstaclesgrid.jar
- a Java archive library
containing classes such as BoundedGrid
,
PictureBlock
, PictureBlockDisplay
, BasicGridFileMenu
,
etc. The class documentation for all classes in this library
is available online.Before you can compile the code provided above, you will need to implement or modify the following classes:
ObstacleCourse
- a new class that extends the BoundedGrid
class (In
order for ObstCourseDataFileHandler
to work correctly, the new
class must be called ObstacleCourse
and it must have a two-parameter
constructor just like BoundedGrid
. You may decide to add or
redefine other methods later.)Obstacle
- a new class that represents obstacles on the course
(Should this class extend or implement any class or interface?)SimpleRacer
- a new class that extends the AbstractRacer
class
to always move forward in the race.Once you have a program that compiles and runs, you should modify it to stop when the first racer reaches the finish line (and report which racer won) and you should implement additional types of racers. If you are using the graphical user interface classes provided above and want different types of racers to be represented graphically with different images, you will need to edit ObstacleRaceApp to associate each new type of racer with the appropriate image.