-- Introduction to Computer Science II
Programming Project: This week, you will begin building a general framework for
puzzles and simulated worlds. The core of this framework will
consist of the grid and the grid-object . The grid will
be the world on which puzzle pieces can be placed and/or moved, or on
which critters "live" and move about. The grid-objects will be
puzzle pieces or critters. To start this extended project, you
should create the Grid class and a sample GridObject class that can be
used to populate a grid instance with block-like objects; these classes
should display a grid with any such blocks that it contains in their
Note: your assignment this week requires more design thought than your
previous assignments. You will need to think about what specific
methods to provide. In future assignments, I will provide more
detailed specifications to which you will need to adapt your
code. The design process is part of this assignment.
[a. the Grid] The grid should be rectangular and take width and
height arguments (in terms of number of cells) to the
constructor. The cells of a grid may contain zero or more
grid-objects (such as blocks). You will, at a minimum, need to
provide methods to add and remove objects from specific locations on
[b. the GridObject class] The objects that populate a grid may
have widely different characteristics and behaviors. Thus, as you
create this general
GridObject class, you will want to be thinking abstractly and generally
so that future assignments can create classes that extend the
GridObject class. For the purposes of this assignment, you may
assume that a grid-object covers or lives within a single cell.
(However, keep in mind during your design that this will definitely not
be the case for all of your future assignments.) Your first
GridObject class should provide the functionality of a block.
That is, it just sits there but has a color property. That is, it
does not move after being placed.
[c. display the Grid and its contents] Create a graphical display
of a grid and the objects (blocks in this case) that it contains.
Here, you will probably want to create your Grid as extension of
Frame. You will need to override the paint method inherited from
Frame; your method should take care of painting all the grid's
objects. Using the Asteroid game as an example, your grid-objects
will have their own paint methods that get called by your Grid's
overridden paint method. The "Graphics" argument is provided
internally for you by the repaint() method of your Grid.
That is, repaint() calls the paint method with the appropriate graphics
arg. Then your paint method can pass that Graphics object along
to your grid-objects' paint methods. You should display the grid
such that cells are visible whether or not they contain
GridObjects. In other words, you should draw grid-lines.
Note: you will need to address scaling issues such that a grid that is n rows by m columns is displayed
appropriately on a window that is x
by y pixels as given in the
To run your program, provide a main method that creates a Grid 15 rows
high and 30 rows wide. Add GridObjects of assorted colors at
locations [3,17], [5,7], [5,8], [6,8], and [11,24]. Keep in mind
that even though you're not required to exercise
multiple-object-per-cell functionality this week, your design must
support this. In general, your grade will reflect how completely
you understand, design for, and implement the requirements given above.
On your machine where you are doing your homework, create a folder
called <your email name> followed by "A7". For example,
with email address "cjones" would create a folder called
Inside that folder, place plain text file(s) containing your answers to
any exercises. Also, place whatever Java files are necessary
your Programming Projects in the same folder. Finally, either tar
zip the folder so that when I
it, the folder
"<emailname>A7" will be created. (Note: the '<'
and '>' should not be part
of your folder name.) If
you choose to use zip instead of tar, change the extension of the
resulting zip file
from "<something>.zip" to "<something>.foo". This
webmail will allow you to attach the file. If I get an attachment
extension .foo, I will change it back to .zip and all should be well.