5.1
Getting started
Now is a good time to start working with the AP Computer Science
Case Study, which is a program called GridWorld.
To get started, in-
stall GridWorld, which you can download from the College Board: http:
//www.collegeboard.com/student/testing/ap/compsci_a/case.html.
When you unpack this code, you should have a folder named GridWorldCode
that contains projects/firstProject, which contains BugRunner.java.
Make a copy of BugRunner.java in another folder and then import it
into your development environment.
There are instructions here that
might help:
http://www.collegeboard.com/prod_downloads/student/
testing/ap/compsci_a/ap07_gridworld_installation_guide.pdf.
Once
you
run
BugRunner.java,
download
the
GridWorld
Student
Manual from http://www.collegeboard.com/prod_downloads/student/
testing/ap/compsci_a/ap07_gridworld_studmanual_appends_v3.pdf.
The Student Manual uses vocabulary I have not presented yet, so to get you
started, here is a quick preview:
❼ The components of GridWorld, including Bugs, Rocks and the Grid
itself, are objects.
52
Chapter 5. GridWorld: Part One
❼ A constructor is a special method that creates new objects.
❼ A class is a set of objects; every object belongs to a class.
❼ An object is also called an instance because it is a member, or instance,
of a class.
❼ An attribute is a piece of information about an object, like its color
or location.
❼ An accessor method is a method that returns an attribute of an
object.
❼ A modifier method changes an attribute of an object.
Now you should be able to read Part 1 of the Student Manual and do the
exercises.
5.2
BugRunner
BugRunner.java contains this code:
import info.gridworld.actor.ActorWorld;
import info.gridworld.actor.Bug;
import info.gridworld.actor.Rock;
public class BugRunner
{
public static void main(String[] args)
{
ActorWorld world = new ActorWorld();
world.add(new Bug());
world.add(new Rock());
world.show();
}
}
The first three lines are import statements; they list the classes from Grid-
World used in this program. You can find the documentation for these classes
at http://www.greenteapress.com/thinkapjava/javadoc/gridworld/.
5.2. BugRunner
53
Like the other programs we have seen, BugRunner defines a class that pro-
vides a main method. The first line of main creates an ActorWorld object.
new is a Java keyword that creates new objects.
The next two lines create a Bug and a Rock, and add them to world. The
last line shows the world on the screen.
Open BugRunner.java for editing and replace this line:
world.add(new Bug());
with these lines:
Bug redBug = new Bug();
world.add(redBug);
The first line assigns the Bug to a variable named redBug; we can use redBug
to invoke the Bug’s methods. Try this:
System.out.println(redBug.getLocation());
Note: If you run this before adding the Bug to the world, the result is null,
which means that the Bug doesn’t have a location yet.
Invoke the other accessor methods and print the bug’s attributes. Invoke the
methods canMove, move and turn and be sure you understand what they do.
Now try these exercises:
Exercise 5.1.
1. Write a method named moveBug that takes a bug as a
parameter and invokes move. Test your method by calling it from main.
2. Modify moveBug so that it invokes canMove and moves the bug only if
it can.
3. Modify moveBug so that it takes an integer, n, as a parameter, and
moves the bug n times (if it can).
4. Modify moveBug so that if the bug can’t move, it invokes turn instead.
Exercise 5.2.
1. The Math class provides a method named random that
returns a double between 0.0 and 1.0 (not including 1.0).
2. Write a method named randomBug that takes a Bug as a parameter
and sets the Bug’s direction to one of 0, 90, 180 or 270 with equal
probability, and then moves the bug if it can.
54
Chapter 5. GridWorld: Part One
3. Modify randomBug to take an integer n and repeat n times.
The result is a random walk, which you can read about at http: // en.
wikipedia. org/ wiki/ Random_ walk .
4. To see a longer random walk, you can give ActorWorld a bigger stage.
At the top of BugRunner.java, add this import statement:
import info.gridworld.grid.UnboundedGrid;
Now replace the line that creates the ActorWorld with this:
ActorWorld world = new ActorWorld(new UnboundedGrid());
You should be able to run your random walk for a few thousand steps
(you might have to use the scrollbars to find the Bug).
Exercise 5.3. GridWorld uses Color objects, which are defined in a Java
library. You can read the documentation at http: // download. oracle.
com/ javase/ 6/ docs/ api/ java/ awt/ Color. html .
To create Bugs with different colors, we have to import Color:
import java.awt.Color;
Then you can access the predefined colors, like Color.blue, or create a new
color like this:
Color purple = new Color(148, 0, 211);
Make a few bugs with different colors. Then write a method named colorBug
that takes a Bug as a parameter, reads its location, and sets the color.
The Location object you get from getLocation has methods named getRow
and getCol that return integers. So you can get the x-coordinate of a Bug
like this:
int x = bug.getLocation().getCol();
Write a method named makeBugs that takes an ActorWorld and an integer
n and creates n bugs colored according to their location. Use the row number
to control the red level and the column to control the blue.