Improving the Crab— 
more sophisticated programming 
topics:  
random behavior, keyboard control, sound 
concepts:  
dot notation, random numbers, defining methods, comments 
In the previous chapter, we looked at the basics of starting to program our 
first game. There were many new things that we had to look at. Now, we 
will add more interesting behavior. Adding code will get a little easier from 
now on, since we have seen many of the fundamental concepts. 
The first thing we shall look at is adding some random behavior. 
3.1 
Adding random behavior 
In our current implementation, the crab can walk across the screen, and it 
can turn at the edge of our world. But when it walks, it always walks ex-
actly straight. That is what we want to change now. Crabs don’t always go 
in an exact straight line, so let us add a little random behavior: The crab 
should go roughly straight, but every now and then it should turn a little off 
course. 
We can achieve this in Greenfoot by using random numbers: The Greenfoot 
environment itself has a method to give us a random number. This method, 
called 
getRandomNumber
, expects a parameter that specifies the limit of the 
number. It will then return a random number between 0 (zero) and the 
limit. For example, 
Greenfoot.getRandomNumber(20) 
will give  us a random  number  between 0 and  20. The limit—20—is ex-
cluded, so the number is actually in the range 0 to 19. 
The notation used here is called dot notation. When we called methods that 
were defined  in  our own class  or  inherited,  it  was  enough  to write  the 
method name and parameter list. When the method is defined in another 
class, we need to specify the class or object that has the method, followed by 
Concept
: When 
a method we 
wish to call is 
not in our own 
class or inher-
ited, we need to 
specify the class 
or object that 
has the method 
before the 
method name, 
followed by a 
dot. This is 
called dot nota-
tion.
Converting pdf to ppt online - software SDK dll: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
Converting pdf to ppt online - software SDK dll: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
48 
Introduction to Programming with Greenfoot 
a full stop (dot), followed by the method name and parameter. Since the 
getRandomNumber
method is not in the 
Crab
or 
Animal
class, but in a class 
called 
Greenfoot
, we have to write “
Greenfoot.
” in front of the method call. 
Note: Static methods 
Methods may belong to objects or classes. When methods belong to a 
class, we write 
class
-
name
.
method
-
name
parameters
); 
to call the method. When a method belongs to an object, we write 
object
.
method
-
name
parameters
); 
to call it. 
Both kinds of methods are defined in a class. The method signature tells 
us whether a given method belongs to objects of that class, or to the class 
itself.  
Methods that belong to the class itself are marked with the keyword 
static at the beginning of the method signature. For example, the signa-
ture of Greenfoot’s getRandomNumber method is 
static int getRandomNumber(int limit); 
This tells us that we must write the name of the class itself (Greenfoot) 
before the dot in the method call. 
We will encounter calls to methods that belong to other objects in a later 
chapter. 
Let us say we want to program our crab so that there is a 10% chance at 
every step that the crab turns a little bit off course. We can do the main part 
of this with an if-statement: 
if ( 
something
-
is
-
true
)  
turn(5); 
Now we have to find an expression to put in place of 
something
-
is
-
true
that 
returns true in exactly 10% of the cases. 
Concept
: Meth-
-
ods that belong 
to classes (as 
opposed to ob-
jects) are 
marked with the 
keyword static 
in their signa-
ture. They are 
also called class 
methods.
software SDK dll:Online Convert PowerPoint to PDF file. Best free online export
Your PDF file is converted to look just the same as it does in your office software. Creating a PDF from PPTX/PPT has never been so easy! Easy converting!
www.rasteredge.com
software SDK dll:How to C#: Convert PDF, Excel, PPT to Word
How to C#: Convert PDF, Excel, PPT to Word. Online C# Tutorial for Converting PDF, MS-Excel, MS-PPT to Word. PDF, MS-Excel, MS-PPT to Word Conversion Overview.
www.rasteredge.com
Chapter 3 ! Improving the Crab – more sophisticated programming |  49 
We  can  do  this  using  a  random  number  (using  the 
Green-
foot.getRandomNumber
method) and a less-than operator. The less-than op-
erator compares two numbers and returns true if the first is less than the 
second. “Less-than” is written using the symbol <. For example: 
2 < 33 
is true, while 
162 < 42 
is false. 
Exercise 3.1 
Before reading on, try to write down, on paper, an expres-
sion using the 
getRandomNumber
method and the less-than operator 
that, when executed, is true exactly 10% of the time. 
Exercise 3.2 
Write down another expression that is true 7% of the time. 
Note 
Java has a number of operators to compare two values. They are: 
less than 
==  equal 
>   greater than 
!=   not equal 
<=  less than or equal 
>=  greater than or equal 
If we want to express the chance in percent, it is easiest to deal with random 
numbers out of 100. An expression that is true 10% of the time, for example, 
could be 
Greenfoot.getRandomNumber(100) < 10 
Since the call to 
Greenfoot.getRandomNumber(100)
gives us a new random 
number between 0 and 99 every time we call it, and since these numbers are 
evenly distributed, they will be below 10 in 10% of all cases. 
We can now use this to make our crab turn a little in 10% of its steps (Code 
3-1). 
software SDK dll:VB.NET PowerPoint: Convert & Render PPT into PDF Document
This VB.NET PowerPoint to PDF conversion tutorial will illustrate our effective PPT to PDF converting control SDK from following aspects.
www.rasteredge.com
software SDK dll:VB.NET PowerPoint: Complete PowerPoint Document Conversion in VB.
image or document formats, such as PDF, BMP, TIFF that can be converted from PPT document, please corresponding VB.NET guide for converting PowerPoint document
www.rasteredge.com
50 
Introduction to Programming with Greenfoot 
import greenfoot.*;  // (World, Actor, GreenfootImage, and Greenfoot) 
/** 
* This class defines a crab. Crabs live on the beach. 
*/ 
public class Crab extends Animal 
{ 
public void act() 
if ( atWorldEdge() )  
turn(17); 
if ( Greenfoot.getRandomNumber(100) < 10 )  
turn(5); 
move(); 
Code 3-1: Random course changes - first try 
Exercise 3.3 
Try out the random course changes shown above in your 
own version. Experiment with different probabilities for turning. 
This is a pretty good start, but it is not quite nice yet. First of all, if the crab 
turns, it always turns the same amount (five degrees), and secondly, it al-
ways turns right, never left. What we would really like to see is that the 
crab turns a small, but random amount to either its left or its right. (We will 
discuss this now. If you feel confident enough, try to implement this on your 
own first before reading on.) 
The simple trick to the first problem—always turning the same amount, in 
our case 5 degrees—is to replace the fixed number 5 in our code with an-
other random number, like this: 
if ( Greenfoot.getRandomNumber(100) < 10 )  
turn( Greenfoot.getRandomNumber(45) ); 
software SDK dll:VB.NET PowerPoint: Customize PPT Document Rendering Options in VB.
to render and convert PPT slide to various formats, including PDF, BMP, TIFF, SVG, PNG, JPEG, GIF and JBIG2. In the process of converting PPT slide to any of
www.rasteredge.com
software SDK dll:VB.NET PowerPoint: Process & Manipulate PPT (.pptx) Slide(s)
control add-on can do PPT creating, loading controls, PDF document, image to pdf files and for capturing, viewing, processing, converting, compressing and
www.rasteredge.com
Chapter 3 ! Improving the Crab – more sophisticated programming |  51 
In this example, the crab still turns in 10% of its steps. And when it turns, it 
will turn a random amount, between 0 and 44 degrees. 
Exercise 3.4 
Try out the code shown above. What do you observe? 
Does the crab turn different amounts when it turns? 
Exercise 3.5 
We still have the problem that the crab turns right only. 
That’s not normal behavior for a crab, so let’s fix this. Modify your code 
so that the crab turns either right or left by up to 45 degrees each time it 
turns. 
Exercise 3.6 
Try running your scenario with multiple crabs in the world. 
Do they all turn at the same time, or independently. Why? 
The project little-crab-2 (included with this book) shows an implementation 
of what we have done so far, including the last exercises. 
3.2 
Adding worms 
Let us make our world a little more interesting: let’s add another kind of 
animal.  
Crabs like to eat worms. (Well, that is not true for all kinds of crab in the 
real world, but there are some that do. Let’s just say our crab is one of those 
that like to eat worms.) So let us now add a class for worms. 
Figure 3-1: Creating new subclasses 
We can add new actor classes to a Greenfoot scenario by selecting 
New sub-
class
from one of the existing actor classes (Figure 3-1). In this case, our new 
class 
Worm
is a specific kind of animal, so it should be a subclass of class 
Ani-
software SDK dll:VB.NET PowerPoint: Convert PowerPoint to BMP Image with VB PPT
in VB class for rendering and converting PowerPoint presentations converters, such as VB.NET PDF Converter, Excel to the corresponding guide on C# PPT to BMP
www.rasteredge.com
software SDK dll:C# TIFF: Learn to Convert MS Word, Excel, and PPT to TIFF Image
doc.ConvertToDocument(DocumentType.TIFF, @"output.tif"); C# Demo for Converting PowerPoint to TIFF. Add references (Extra); Load your PPT (.pptx) document.
www.rasteredge.com
52 
Introduction to Programming with Greenfoot 
mal
. (Remember, being a subclass is an is-a relationship: A worm is an ani-
mal.) 
When we are creating a new subclass, we are prompted to enter a name for 
the class and to select an image (Figure 3-2). 
Figure 3-2: Creating a new class 
In our case, we name the class “Worm”. By convention, class names in Java 
should always start with a capital letter. They should also describe what 
kind of object they represent, so “Worm” is the obvious name for our pur-
pose. 
Then, we should assign an image to the class. There are some images asso-
ciated with the scenario, and a whole library of generic images to choose 
from. In this case, we have prepared a worm image and made it available in 
the scenario images, so we can just select the image named worm.png. 
software SDK dll:How to C#: Convert Word, Excel and PPT to PDF
How to C#: Convert Word, Excel and PPT to PDF. Online C# Tutorial for Converting MS Office Word, Excel and PowerPoint to PDF. MS Office
www.rasteredge.com
Chapter 3 ! Improving the Crab – more sophisticated programming |  53 
Once done, we can click Ok. The class is now added to our scenario, and we 
can compile and then add worms to our world. 
Exercise 3.7 
Add some worms to your world. Also add some crabs. Run 
the scenario. What do you observe? What do the worms do? What hap-
pens when a crab meets a worm? 
We now know how to add new classes to our scenario. The next task is to 
make these classes interact: when a crab finds a worm, it should eat it. 
3.3 
Eating worms 
We now want to add new behavior to the crab: when we run into a worm, we 
want to eat it. Again, we first check what methods we have already inher-
ited from the 
Animal
class. When we open the editor for class 
Animal
again, 
and switch to the 
Documentation
view, we can see the following two methods: 
boolean canSee (java.lang.Class clss) 
Return true if we can see an object of class 'clss' right where we are. 
void eat (java.lang.Class clss) 
Try to eat an object of class 'clss'. 
Using these methods, we can implement this behavior. The first method 
checks whether the crab can see a worm. (It can see it only when it runs 
right into it—our animals are very short-sighted.) This method returns a 
boolean—true or false –, so we can use it in an if-statement. 
The second method eats a worm. Both methods expect a parameter of type 
java.lang.Class.  This  means that  we  are  expected  to  specify  one  of  our 
classes from our scenario. Here is some sample code: 
if ( canSee(Worm.class) )  
eat(Worm.class); 
In this case, we specify 
Worm.class
as the parameter to both method calls 
(the 
canSee
method and the 
eat
method). This declares which kind of object 
54 
Introduction to Programming with Greenfoot 
we are looking for, and which kind of object we want to eat. Our complete 
act method at this stage is shown in Code 3-2.  
public void act() 
if ( atWorldEdge() )  
turn(17); 
if ( Greenfoot.getRandomNumber(100) < 10 )  
turn(Greenfoot.getRandomNumber(90)-45); 
move(); 
if ( canSee(Worm.class) )  
eat(Worm.class); 
Code 3-2: First version of eating a worm 
Try this out. Place a number of worms into the world (remember: shift-
clicking into the world is a shortcut for quickly placing several actors), place 
a few crabs, run the scenario and see what happens. 
Advanced note: Packages 
(The notes labeled “Advanced note” are inserted for deeper information for 
those readers really interested in the details. They are not crucial to un-
derstand at this stage, and could safely be skipped.) 
In the definition of the 
canSee
and 
eat
methods, we have seen a parame-
ter type with the name 
java.lang.Class
. What is going on here? 
Many types are defined by classes. Many of those classes are in the stan-
dard Java class library. You can see the documentation of the Java class 
library by  choosing  Java Library Documentation from Greenfoot’s Help 
menu.  
Chapter 3 ! Improving the Crab – more sophisticated programming |  55 
The Java class library contains thousands of classes. To make these a lit-
tle easier to work with, they have been grouped into packages (logically 
related groups of classes). When a class name includes dots, such as 
java.lang.Class
, only the last part is the name of the class itself, and 
the former parts is the name of the package. So here we are looking at 
the class named “Class” from the package “java.lang”.  
Try to find that class in the Java library documentation. 
3.4 
Creating new methods 
In the previous few sections, we have added new behavior to the crab: turn-
ing at the edge of the world, occasional random turns, and eating worms. If 
we continue to do this in the way we have done so far, the act method will 
become longer and longer, and eventually really hard to understand. We can 
improve this by chopping it up into smaller pieces. 
We can create our own additional methods in the 
Crab
class for our own 
purposes. For example, instead of just writing some code that looks for a 
worm and eats it into the act method, we can add a new method for this 
purpose. To do this, we first have to decide on a name for this method. Let 
us say we call it 
lookForWorm
. We can then create a new method by adding 
the following code: 
/** 
* Check whether we have stumbled upon a worm. 
* If we have, eat it. If not, do nothing. 
*/ 
public void lookForWorm() 
if ( canSee(Worm.class) )  
eat(Worm.class); 
The first four lines are a comment. A comment is ignored by the computer—
it is written for human readers. We use a comment to explain to other hu-
man readers what the purpose of this method is. 
When we define this method, the code does not immediately get executed. In 
fact, by just defining this method, it does not get executed at all. We are just 
Concept
: A 
method defini-
tion defines a 
new action for 
objects of this 
class. The action 
is not immedi-
ately executed, 
but the method 
can be called 
with a method 
call later to exe-
cute it.
Concept
Comments are 
written into the 
source code as 
explanations for 
human readers. 
They are ig-
nored by the 
computer.
56 
Introduction to Programming with Greenfoot 
defining a new possible action (“looking for a worm”) that can be carried out 
later. It will only be carried out when this method is called. We can add a 
call to this method inside the act method: 
lookForWorm(); 
Note that the call has the parentheses for the (empty) parameter list. The 
complete source code after this restructuring is shown in Code 3-3.  
public void act() 
if ( atWorldEdge() )  
turn(17); 
if ( Greenfoot.getRandomNumber(100) < 10 )  
turn(5); 
move(); 
lookForWorm(); 
/** 
* Check whether we have stumbled upon a worm. 
* If we have, eat it. If not, do nothing. 
*/ 
public void lookForWorm() 
if ( canSee(Worm.class) )  
eat(Worm.class); 
Code 3-3: Splitting code into separate methods 
Note that this code change does not change the behavior of our crab at all. It 
just makes the code easier to read in the long run. As we add more code to 
the class, methods tend to become longer and longer. Longer methods are 
Documents you may be interested
Documents you may be interested