Introduction to Computer Science I Term Project
Using Object-Oriented Programming (last updated 12/1/2005)
For the third and final deliverable, you will modify your version of
Conway's Game of Life such that it uses cell-objects. You should use
the principles covered in class and in Sections 39-41 to create
encapsulated classes of a cell.
Your cell must provide the following services:
'current: returns this cell's current
'determine-new: causes this cell to compute it's new state
'switch-to-new: causes this cell to change to its computed new state
The key problem you may immediately notice is, how will a cell know its
neighbors. You should use a new-grid
definition: (vectorof (vectorof cell-object)).
Then you should provide a means for a cell object to find its
neighbors, and then it can ask each of its neighbors for their
respective current states. When you create a cell-object, you
will want to provide its state and its location as arguments to the
constructor. In this way, it should not be difficult for a
cell-object to find its neighbors.
So, define an cell-object "interface" with a constructor called make-cell-object. This
constructor should consume three arguments, a current state [1,0], a
row index and a column index.
Finally, you'll need to make minor alterations to the rest of your
program that displays the grid and updates it. The basic approach
you'll probably want to use is have all of the cell-objects
"determine-new" by querying their respective neighbors, and then have
all the cell-objects "switch-to-new". Then re-display the grid
using "current", and finally repeat. Your modified
gcol function should accept a new-grid,
(vectorof (vectorof cell-object)), and a number. As before, it
should create a canvas of the appropriate size, do whatever population
or initialization is necessary from the given new-grid, and then
simulate the generations of the grid according to the rules for
Conway's Game of Life.
To grade this deliverable, I will review your code (including
contracts, purpose statements, indentation, etc.), and then call your
gcol function. Therefore,
it is important that you follow the data definitions carefully.