May 2005
Intermediate to advanced
998 pages
26h
English
The Obstacles object maintains an array of Rectangle objects called boxes. Each object contains the top-left hand coordinate of a box and the length of its square sides.
The public methods in the Obstacles class are synchronized since the event thread of the game could add a box to the obstacles list (via a call to add()) while the animation thread is examining or drawing the list.
add() is defined as
synchronized public void add(int x, int y)
{
boxes.add( new Rectangle(x,y, BOX_LENGTH, BOX_LENGTH));
wcTop.setBoxNumber( boxes.size() ); // report new no. of boxes
}The method updates the boxes text field at the top-level of the game by calling setBoxNumber().
WormPanel delegates the task of drawing the obstacles to the Obstacles object, by calling draw():
synchronized public void draw(Graphics g)
// draw a series of blue boxes
{
Rectangle box;
g.setColor(Color.blue);
for(int i=0; i < boxes.size(); i++) {
box = (Rectangle) boxes.get(i);
g.fillRect( box.x, box.y, box.width, box.height);
}
} // end of draw()
Worm communicates with Obstacles to determine if its new head (a Point object, p) intersects with any of the boxes:
synchronized public boolean hits(Point p, int size)
{
Rectangle r = new Rectangle(p.x, p.y, size, size);
Rectangle box;
for(int i=0; i < boxes.size(); i++) {
box = (Rectangle) boxes.get(i);
if (box.intersects(r))
return true;
}
return false;
} // end of hits()