The Minnow program simulates three small fish, the minnows, swimming in a small, bounded environment such as a pond or aquarium. The small, bounded environment is represented as a rectangular grid of cells. Through a graphical user interface, the user can control how the program is run, stepping through it one step at a time or running it for many steps until the Stop button is pressed. In each step, the three minnows move one cell.
The exercises in this project are designed to introduce you to the Minnow
class, which represents the small, simple fish swimming in the environment.
You will be modifying the Minnow
class to improve the way minnows
move. To do this you will use methods from three other classes: Environment
,
Location
, and Direction
. An Environment
object represents the environment in which minnows swim, a Location
object represents the row and column of a specific cell in the environment,
and a Direction
object represents a direction, such as north, south,
east, or west. Each minnow in the environment is at a particular location
and facing a certain direction.
Environment
provides two kinds of methods. One set deals
with the objects in the environment, such as numObjects
(how many
objects are there?), allObjects
(get me all the objects), isEmpty
(is there an object at a particular location?), and objectAt
(get
me the object at a particular location). Environment
also
provides methods for navigating around the environment; for example, a minnow
at a particular location can ask the environment what location is to its north
or south (getNeighbor
), or what direction it needs to go to get
to another location (getDirection
). The exercises in this
project will focus on using the getDirection
, getNeighbor
,
and isEmpty
methods.
Some of the classes in the Minnow project, including Environment
,
Location
, and Direction
, come directly from the AP®
Marine Biology Simulation case study. Others, such as Minnow
,
are based on classes in the case study.†
[Educational prerequisites for this project: Students should be familiar with reading class documentation, constructing objects and invoking methods, the format of a class implementation (instance variables and methods), the basic flow control constructs (conditions and loops), and reading class documentation. Students should also be familiar with the
add
,get
,remove
, andsize
methods of theArrayList
class.]
Exercise 1 — Running the program:
|
A Minnow
object has instance variables to keep track of the environment
in which it lives, its location and direction in that environment, and its color.
Its constructor initializes those variables. It also provides accessor
methods that allow client code to find out those values — what environment
the minnow lives in, what its location or direction is, or what color the minnow
is. Its most important method, though, is the act
method,
because that is the method that gets called in each timestep. When the
user clicks on the step or run buttons, the program asks each object in the
environment to "act." For a minnow, acting means to move, so
the act
method calls an internal move
method.
The move
method calls another internal method, nextLocation
,
to determine the next location to which the minnow should move. If the
minnow is blocked, nextLocation
returns the minnow's current location,
indicating that it can't move. If the next location is not
equal to the current location, the minnow moves there (calling changeLocation
),
possibly changing direction in the process. The minnow's new direction
is determined by asking the environment what direction the minnow had to swim
to get from its old location to its next location. (The separate changeLocation
method handles updating the minnow's location and notifying the environment
of the move.)
Exercise 2 — Understanding the code:
|
In the next exercise you will modify the Minnow class so that a minnow moves forward if possible; otherwise it turns around and moves in that direction.
Exercise 3 — Turning around:
|
In the next exercise you will modify the Minnow
class so that
a minnow moves forward, right, left, or backward, if possible. You may
search the locations in the four directions in any order to find one that is
empty.
Exercise 4 — Rotating:
|
In the next exercise you will modify the Minnow
class to make
use of the emptyNeighbors
helper method. A minnow will still
move forward, right, left, or backward, if possible, but now you should use
a location returned by emptyNeighbors
.
Exercise 5 — Using
|
In the next exercise you will modify the Minnow
class to randomly
choose an empty location to which to move.
Exercise 6 — Random behavior
|
In the next exercise you will modify the Minnow
class to prevent
minnows from moving backward or turning completely around in one step.
Exercise 7 — No turning back
|
After completing these exercises, you are ready to explore the Fish
class in the Marine Biology Simulation (MBS) case study.* When moving on to
the MBS case study, notice the following differences between the Minnow
and Fish
classes:
Fish
class has more instance variables and more constructors.
(See pp. 27 - 30 of the MBS case study narrative.)Fish
check that they are still in the environment before acting.
(p. 33)Fish
methods use the changeDirection
helper method
and the environment
, location
, and direction
accessor methods. (p. 39)Fish
helper methods are protected, not private. (pp.
30, 65)