Objective: Create a small game and practice writing child classes.
Due: Before the next class (Friday).
Copy the directory /home/courses/cs209/handouts/assign4
and its contents into your cs209
directory.
javac *.java
or javac Game.java
.
java Game
Game.java
. There
is a lot of code that you don't need to worry about. Focus on
the main
and animate
methods as well as the instance variables.
The main
method creates a new Game object,
including setting up the window. main
also calls the
animate
method, which starts the game running.
The animate
method creates the professor and moves
the professor. The professor's direction is determined by
pressing keys.
GamePiece.java
. (This
class contains some poor coding practices; bear with me--we haven't
seen the techniques to fix them yet.)
Note the instance variables, the constructor, and the available
methods--especially the
move(Game game)
method.
Human.java
. Look at the class's constructor and the
move
method. Hopefully, you're now seeing how the pieces fit together.Goblin
class, which inherits
from GamePiece
. There are several animated gifs to
choose from. A Goblin should "chase" the professor instead of just
standing there, which is what the
inherited GamePiece
's move
method does.
Treasure
class, whose image
is the gem. The gem will move around the window, periodically and
randomly. Note that the Treasure should not change positions during
every iteration of the animate
loop. (You may choose to
enforce this restriction either in the Treasure
or Game
class, but it probably makes more sense in
the animate
method.) Also, the top 20 pixels of the
window (indicated by YMIN_DISPLAY
) are covered by the
menu bar. Game
's animate
method. Create a
Goblin object and a Treasure object. Start the Goblin in the upper left corner. The Treasure
should be at a random spot on the window.move
method to make
them move. (Recall that you probably don't want the Treasure to move
constantly because it will be too difficult to catch.)draw
method to
display them. The window "refreshes" each frame, so you'll need to
draw each object, even if you don't move it.
Complete all of the above requirements before doing extra credit.
Add the overlap
method to
the GamePiece
class. The signature
for overlap
will look something like
public boolean overlaps( GamePiece gob )
. It will
return true iff the GamePiece overlaps the
GamePiece passed to the overlap
method as a
parameter. Note that, if you haven't done so already, you'll need to adjust the value of the
img_width
or char_width
variables
of the respective child classes, depending on the size of animated
gif you chose. Try a value of 15 to start.
Clearly, there is a lot more that can be done on this assignment--actually make the game stop, winning or losing, adding goblins (with different types of movements), ... Be creative, but keep the code neat.
Copy your assign4
directory into your
turnin directory.
There is no printed part of this assignment.
You will be evaluated based on the correctness and OO style of your classes.