Chapter 3 ! Improving the Crab – more sophisticated programming |  57 
harder  to understand.  By separating our code into  a number of shorter 
methods, we make the code easier to read. 
Exercise 3.8 
Create  another  new  method  named  randomTurn  (this 
method has no parameters and returns nothing). Select the code that 
does the random turning, and move it from the act method to the ran-
domTurn method. Then call this new randomTurn method from your act 
method. Make sure to write a comment for this method. 
Exercise 3.9 
Create yet another method named turnAtEdge (it also has 
no parameters and returns nothing). Move the code that checks whether 
we are at the edge of the world (and does the turn if we are) into the tur-
nAtEdge method. Call the turnAtEdge method from your act method. 
Your act method should now look like the version shown in Code 3-4. 
public void act() 
turnAtEdge(); 
randomTurn(); 
move(); 
lookForWorm(); 
Code 3-4: The new act method after creating methods for the sub-tasks 
By convention, method names in Java always start with a lowercase letter. 
Method names cannot contain spaces (or many other punctuation charac-
ters). If the method name logically consists of multiple words, we use capi-
tals in the middle of the method name to mark the start of each word.  
3.5 
Adding a Lobster 
We are now at a stage where we have a crab that walks more or less ran-
domly through our world, and eats worms if it happens to run into them. 
To make it a little more interesting again, let us add another creature: a 
lobster. 
Lobsters, in our scenario, like to chase crabs. 
Convert pdf back to powerpoint - control SDK system:C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
www.rasteredge.com
Convert pdf back to powerpoint - control SDK system:VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
www.rasteredge.com
58 
Introduction to Programming with Greenfoot 
Exercise 3.10 
Add a new class to your scenario. The class should be a 
subclass of Animal, called Lobster (with a capital ‘L’), and it should use 
the prepared image lobster.png. 
Exercise 3.11 
What do you expect lobsters to do when you place them 
into the world as they are? Compile your scenario and try it out.  
We now want to program our new lobsters to eat crabs. This is quite easy to 
do, since the behavior is very similar to the behavior of crabs. The only dif-
ference is that lobsters look for crabs, while crabs look for worms. 
Exercise 3.12 
Copy the complete act method from the Crab class into the 
Lobster class. Also copy the complete lookForWorm, turnAtEdge and 
randomTurn methods. 
Exercise 3.13 
Change the Lobster code so that it looks for crabs, rather 
than worms. You can do that by changing every occurrence of “Worm” in 
the source code to “Crab”. For instance, where Worm.class is men-
tioned, change it to Crab.class. Also change the name lookForWorm to 
lookForCrab. Make sure to update your comments. 
Exercise 3.14 
Place a crab, three lobsters, and many worms into the 
world. Run the scenario. Does the crab manage to eat all worms before 
it is caught by a lobster? 
You should now have a version of your scenario where both crabs and lob-
sters walk around randomly, looking for worms and crabs, respectively. 
Now, let us turn this program into a game. 
3.6 
Keyboard control 
To get game-like behavior, we need to get a player involved. The player 
(you!) should be able to control the crab with the keyboard, while the lob-
sters continue to run randomly by themselves, as they already do. 
The Greenfoot environment has a method that lets us check whether a key 
on  the  keyboard  has  been  pressed.  It is  called 
isKeyDown
,  and,  like  the 
getRandomNumber
method that we encountered in section 3.1, it is a method 
in the 
Greenfoot
class. The method signature is 
control SDK system:How to C#: Set Image Thumbnail in C#.NET
PDF, C#.NET convert PDF to svg, C#.NET convert PDF to text, C#.NET convert PDF to images VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET Back Color.
www.rasteredge.com
control SDK system:VB.NET Word: Word Conversion SDK for Changing Word Document into
completed. To convert PDF back to Word document in VB.NET, please refer to this page: VB.NET Imaging - Convert PDF to Word Using VB.
www.rasteredge.com
Chapter 3 ! Improving the Crab – more sophisticated programming |  59 
static boolean isKeyDown(String key) 
We can see that the method is static (it is a class method) and the return 
type is 
boolean
. This means that the method returns either true or false, and 
can be used as a condition in an if-statement. 
We also see that the method expects a parameter of type String. A String is 
a piece of text (such as a word or a sentence), written in double quotes. The 
following are examples of Strings: 
"This is a String" 
"name" 
"A" 
In this case, the String expected is the name of the key that we want to test. 
Every key on the keyboard has a name. For those keys that produce visible 
characters, that character is their name, e.g. the A-key is called "A". Other 
keys have names too. For instance, the left cursor key is called "left". Thus, 
if we want to test whether the left cursor key has been pressed, we can write 
if (Greenfoot.isKeyDown("left")) 
... // do something 
Note that we need to write "Greenfoot." in front of the call to 
isKeyDown
since this method is defined in the 
Greenfoot
class. 
If, for example, we want our crab to turn left by 4 degrees whenever the left 
cursor key is being pressed, we can write 
if (Greenfoot.isKeyDown("left")) 
turn(-4); 
The idea now is to remove the code from the crab that does the random 
turning, and also the code that turns automatically at the world edge, and 
replace it with the code that lets us control the crab's turn with our key-
board. 
Exercise 3.15 
Remove the random turning code from the crab. 
control SDK system:C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
control, RasterEdge XDoc.PDF, is a 100% clean .NET solution for C# developers to permanently rotate PDF document page and save rotated PDF document back or as
www.rasteredge.com
control SDK system:C# Image: Tutorial for Collaborating, Marking & Annotating
Besides, more annotations can be drawn and saved back to the database We are dedicated to provide powerful & profession imaging controls, PDF document, image to
www.rasteredge.com
60 
Introduction to Programming with Greenfoot 
Exercise 3.16 
Remove the code from the crab that does the turn at the 
edge of the world. 
Exercise 3.17 
Add code into the crab's act method that makes the crab 
turn left whenever the left cursor key is pressed. Test. 
Exercise 3.18 
Add another—similar—bit of code to the crab's act method 
that makes the crab turn right whenever the right cursor key is pressed. 
Exercise 3.19 
If you have not done so in the first place, make sure that 
the code that checks the key-presses and does the turning is not written 
directly in the act method, but is instead in a separate method, maybe 
called  checkKeypress.  This  method  should  be  called  from  the  act 
method. 
Try solving the tasks by yourself first. If you get stuck, have a look on the 
next page. Code 3-5 shows the crab's complete act and 
checkKeypress
meth-
ods after this change. The solution is also available in the book scenarios, as 
little-crab-3. This version includes all the changes we have discussed so far. 
You are now ready to have a first try at playing your game! Place a crab, 
some worms, and a few lobsters into the world, and see whether you can get 
all the worms before the lobsters catch you. (Obviously, the more lobsters 
you place, the harder it gets...) 
3.7 
Ending the game 
One simple improvement we can make is to end execution of the game when 
the crab is caught by a lobster. Greenfoot has a method to do this—we just 
need to find out what it is called. 
To find out what the available methods in Greenfoot are, we can look at the 
documentation of the Greenfoot classes.  
In Greenfoot, choose 
Greenfoot Class Documentation
from the 
Help
menu. This 
will show the documentation for all the Greenfoot classes in a web browser 
(Figure 3-3).  
This documentation is also called the Greenfoot API (for Application Pro-
grammers'  Interface).  The  API  shows  all  available  classes  and  for  each 
Concept
: The 
API Documen-
tation lists all 
classes and 
methods avail-
able in Green-
foot. We often 
need to look up 
methods here.
Tip
: Greenfoot 
automatically 
saves classes 
and scenarios 
when their win-
dows are closed. 
To keep a copy 
of interim stages 
of scenarios, 
use  Save A 
Copy As from 
the Scenario 
menu.
control SDK system:C# TIFF: Merge and Split TIFF File(s) with C# Programming
C#.NET Demo Code for Merging & Splitting TIFF File(s). // split TIFF document into 2 parts and save them back to disk TIFFDocument.SplitDocument(sourceFilePath
www.rasteredge.com
control SDK system:RasterEdge Product Refund Policy
the first step for you is to sign and send back RasterEdge Software We are dedicated to provide powerful & profession imaging controls, PDF document, image to
www.rasteredge.com
Chapter 3 ! Improving the Crab – more sophisticated programming |  61 
class, all  the  available  methods.  You  can see  that  Greenfoot  offers  five 
classes: 
Actor
Greenfoot
GreenfootImage
MouseInfo
, and 
World
The method we are looking for is in the 
Greenfoot
class. 
Exercise 3.20 
Open the Greenfoot API in your browser. Select the Green-
foot class. In its documentation, find the section titled "Method Sum-
mary". In this section, try to find a method that stops the execution of the 
running scenario. What is this method called? 
Exercise 3.21 
Does this method expect any parameters? What is its re-
turn type? 
/**  
* Act - do whatever the crab wants to do.  
*/ 
public void act() 
checkKeypress(); 
move(); 
lookForWorm(); 
/** 
* Check whether a control key on the keyboard has been pressed. 
* If it has, react accordingly. 
*/ 
public void checkKeypress() 
if (Greenfoot.isKeyDown("left"))  
{ 
turn(-4); 
if (Greenfoot.isKeyDown("right"))  
turn(4); 
Code 3-5: The Crab's 'act' method: Controlling the crab with the keyboard 
control SDK system:C# PDF: Start to Create, Load and Save PDF Document
can use PDFDocument object to do bulk operations like load, save, convert images/document to page in the document), you can save it back to a PDF file or
www.rasteredge.com
control SDK system:C# Imaging - Linear ITF-14 Barcode Generator
Y to control barcode image area on PDF, TIFF, Word 14 barcode image fore and back colors in BarcodeHeight = 200; barcode.AutoResize = true; //convert barcode to
www.rasteredge.com
62 
Introduction to Programming with Greenfoot 
Figure 3-3: The Greenfoot API in a browser window 
We can see the documentation of the Greenfoot classes by selecting them in 
the list on the left. For each class, the main panel in the browser displays a 
general comment, details of its constructors, and a list of its methods. (Con-
structors will be discussed in a later chapter.) 
If we browse through the list of available methods in the class 
Greenfoot
, we 
can find a method named 
stop
. This is the method that we can use to stop 
execution when the crab gets caught. 
We can make use of this method by writing 
Greenfoot.stop(); 
into our source code. 
control SDK system:How to C#: Create a Winforms Control
pages, VB.NET comment annotate PDF, VB.NET delete PDF pages, VB.NET convert PDF to SVG. VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET Back Color.
www.rasteredge.com
control SDK system:VB.NET Image: VB.NET Codes to Add Antique Effect to Image with .
a touch of history to the image which can help bring back the sweet We are dedicated to provide powerful & profession imaging controls, PDF document, image to
www.rasteredge.com
Chapter 3 ! Improving the Crab – more sophisticated programming |  63 
Exercise 3.22 
Add code to your own scenario that stops the game when 
a lobster catches the crab. You will need to decide where this code 
needs to be added. Find the place in your code that gets executed when 
a lobster eats a crab, and add this line of code there. 
We will use this class documentation frequently in the future to look up de-
tails of methods we need to use. We will know some methods by heart after 
a while, but there are always methods we need to look up. 
3.8 
Adding sound 
Another  improvement  to  our  game  is  the  addition  of  sounds.  Again,  a 
method in the 
Greenfoot
class helps us with this. 
Exercise 3.23 
Open the Greenfoot Class Documentation (from the Help 
menu), and look at the documentation of class Greenfoot. Find the de-
tails of the method that can be used to play a sound. What is its name? 
What parameters does it expect? 
By looking through the documentation, we can see that the 
Greenfoot
class 
has  a  method  called 
playSound
.  It  expects the  name  of  a sound  file  (as 
String) as a parameter, and returns nothing. 
Note 
You may like to look at the structure of a Greenfoot scenario in your file 
system. If you look into the folder containing the book scenarios, you can 
find a folder for each Greenfoot scenario. For the crab example, there are 
several different versions (little-crab, little-clab-2, little-crab-3, etc.). In-
side each scenario folder are several files for each scenario class, and sev-
eral other support files. There are also two media folders: images holds 
the scenario images and sounds stores the sound files. 
You can see the available sounds by looking into this folder, and you can 
make more sounds available by storing them here. 
In our crab scenario, two sound files are already included. They are called 
"slurp.wav" and "au.wav". 
We can now easily play one of the sounds by using the following method 
call: 
64 
Introduction to Programming with Greenfoot 
Greenfoot.playSound("slurp.wav"); 
Try it out! 
Exercise 3.24 
Add playing of sounds to your scenario: When a crab eats 
a worm, play the "slurp.wav" sound. When a lobster eats the crab, play 
the "au.wav" sound. To do this, you have to find the place in your code 
where this should happen. 
The little-crab-4 version of this scenario shows the solution to this. It is a 
version of the project that includes all the functionality we have discussed 
so far: worms, lobsters, keyboard control and sound (Figure 3-4). 
About sound recording 
You can also make your own sounds. Both the sounds included are re-
corded by simply speaking into the computer's microphone. Use one of 
the many free sound recording programs
4
, record your sound, and save 
(or export) it as a sound file, in either WAV, AIFF or AU format. Making 
your own sounds is further discussed in Chapter 8. 
Exercise 3.25 
If you have a microphone on your computer, make your 
own sounds to use when the worms or the crab get eaten. Record the 
sounds with any sound recording program, store them in the scenario's 
"sounds" folder, and use them in your code. 
4
Using an internet search, you should be able to find several free programs that can record 
and save sounds. One good program is Audacity (http://audacity.sourceforge.net), but there 
are many others. 
Chapter 3 ! Improving the Crab – more sophisticated programming |  65 
Figure 3-4: The crab game with worms and lobsters 
3.9 
Summary of programming techniques 
In this chapter we have seen more examples of using an if-statement, this 
time for turning at random times and reacting to key presses. We have also 
seen how to call methods from another class, namely the 
getRandomNumber
isKeyDown
and 
playSound
methods from the 
Greenfoot
class. We did this by 
using dot notation, with the class name in front of the dot. 
Altogether, we have now seen examples of calling methods from three dif-
ferent places: we can call methods that are defined in the current class itself 
(called local methods), method that were defined in a superclass (inherited 
methods), and static methods from other classes. The last of these uses dot 
66 
Introduction to Programming with Greenfoot 
notation. (There is one additional version of a method call: calling methods 
on other objects—we will encounter that a little later.) 
Another important aspect that we explored was how to read the API docu-
mentation of an existing class to find out what methods it has and how to 
call them. 
Concept summary 
When a method we wish to call is not in our own class or inherited, we need to specify the 
class or object that has the method before the method name, followed by a dot. This is 
called dot notation.
Methods that belong to classes (as opposed to objects) are marked with the keyword 
static in their signature. They are also called class methods.
A method definition defines a new action for objects of this class. The action is not imme-
diately executed, but the method can be called with a method call later to execute it.
Comments are written into the source code as explanations for human readers. They are 
ignored by the computer.
The API Documentation lists all classes and methods available in Greenfoot. We often 
need to look up methods here.
Documents you may be interested
Documents you may be interested