Download presentation
Presentation is loading. Please wait.
1
Chapter 3 – Improving the Crab Game
2
3.1 - Adding Random Behavior: more complicated behaviors
topics: random behavior, keyboard control, sound concepts: dot notation, random numbers, defining methods, comments We’ll use a Greenfoot Utility A Greenfoot utility is a method supplied by the Greenfoot environment, so the method starts with “Greenfoot.” in its name (“Dot-notation”). Greenfoot.getRandomNumber(limit) This will give us a random number between 0 and 20. The limit is --20 This method returns a random number that can be any value from zero up to but not including the given limit (so from zero to limit-1)
3
Comparison Operators An example: if (5 > 1) {move();}
Comparison Operators are used to compare two numerical values. They always produce a definitive result, either true or false (i.e. they produce a single boolean value). Comparison Operators are often used as the condition within an if – else structure. An example: if (5 > 1) {move();}
4
Comparison Operators Note: a and b are numerical values
< less than ex: if (a < b) { … <= less than or equal ex: if (a <= b) { … == equal ex: if (a == b) { … != not equal ex: if (a != b) { … >= greater than or equal ex: if (a >= b) { … > greater than ex: if (a > b) { …
5
Logical Operators An example: if (5 < 1 && 0 > 1) {move();}
Logical Operators are used to logically link two boolean values. They always produce a definitive result, either true or false (i.e. they produce a single boolean value). Comparison Operators are often used as part of the condition in an if – else structure. An example: if (5 < 1 && 0 > 1) {move();}
6
Logical Operators Note: a and b are numerical values
&& Logical AND Ex: if (a < b && b < c) { … Note: both a < b and b < c must be true, or the entire condition evaluates to false || Logical OR Ex: if (a < b || b < c) { … Note: either a < b or b < c must be true, or the entire condition evaluates to false
7
Logical Operators (Truth Table)
One way to visualize all possible sets of inputs -> outputs of a logical operation are Truth Tables. Inputs Results AND OR a b a && b a || b true false
8
What does it do. // This class define a crab. Code 3
What does it do? // This class define a crab. Code 3.1 from your textbook public void act( ) { if ( atWorldEdge( ) ) turn( 17 ); } if ( Greenfoot.getRandomNumber( 100 ) < 10 ) turn( 15 ); move( ); Gives you random numbers from 0 to 99 Note: The random number will be always <100 and <10 approx. 10% of the time
9
What does it do? Crabs tend to walk erratically, so this makes the behavior more realistic. But the crab always turns to the right. How can we make the crab turn either left or right randomly? 10% of the time the crab turns 15 degrees Clockwise (to the right)
10
What does it do? public void act( ) { if ( atWorldEdge( ) )
turn( 17 ); } if ( Greenfoot.getRandomNumber( 100 ) < 10 ) turn( Greenfoot.getRandomNumber( 46 ) ); move( ); Now it turns from 0 to 45 Degrees to the right
11
What does it do? public void act( ) { if ( atWorldEdge( ) )
turn( 17 ); } if ( Greenfoot.getRandomNumber( 100 ) < 10 ) turn( Greenfoot.getRandomNumber( 91 ) - 45 ); move( ); Now it turns from 0 to 90 minus 45 That equals to That equal -45 to 45
12
What does it do? All Crab Behavior is
Independently Random Because Greenfoot.getRandomNumber () Returns a Different Random Number on Each Call
13
Adding Worms Right Click on the Animal Class
and then Click on New subclass
14
3.2 - Adding worms Crabs like to eat worms We can add new actor classes to a Greenfoot Scenario New subclass from one of the exsiting actor classes. Add new class Worm (Subclass of class Animal)
15
Adding Worms Choose the worm image
16
Adding Lobsters Right Click on the Animal Class
and then Click on New subclass
17
Animating Actors Worm facing right Worm facing left (Worm.png) (Worm2.png) Animation is Achieved by Switching Between the two or more Images
18
The Worm act() method (if-else)
Keeps count of calls to Act() method private int counter = 0; private int imageNumber = 1; public void act() { counter = counter + 1; if (counter == 4) { if (imageNumber == 1) { // image 1 so switch to image setImage("worm2.png"); imageNumber = 2; } else { // image 2 so switch to image setImage("worm.png"); imageNumber = 1; } counter = 0; } } Keeps track of which image is showing
19
The Worm act() method (&&)
Keeps count of calls to Act() method private int counter = 0; private int imageNumber = 1; public void act() { counter = counter + 1; if (counter == 4 && imageNumber == 1) { counter = 0; setImage("worm2.png"); imageNumber = 2; } if (counter == 4 && imageNumber == 2) { counter = 0; setImage("worm.png"); imageNumber = 1; } } Keeps track of which image is showing
20
The Worm act() method (comb.)
Keeps count of calls to Act() method private int counter = 0; private int imageNumber = 1; public void act() { counter = counter + 1; if (counter == 4 && imageNumber == 1) { counter = 0; setImage("worm2.png"); imageNumber = 2; } else if (counter == 4 && imageNumber == 2) { counter = 0; setImage("worm.png"); imageNumber = 1; } } Keeps track of which image is showing
21
Eating worms Now we can add new behavior to the crab:
When the crab runs into a worm, it eats it.
22
Crabs Ignore Worms
23
Crabs Eat Worms
24
3.4 - Creating new methods Adding new behavior to the crab – turning at the edge of the world, occasional random turn, and eating worms. Add new method called “lookForWorm”. The first four lines are a comment, which is ignored by computer. We have to call the method “ lookForWorm(); form act() method
25
Complete the source code after this restricting show below
26
3.5 - Adding a Lobsters Choose the lobster image
27
The Lobster methods – 3.5 – Adding a Lobster
Copy the complete act method from the Crab class into the Lobster class. Also copy the complete lookForWorm, turnAtEdge and randomTurn methods. 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 mentioned, change it to Crab.class. Also change the name lookForWorm to lookForCrab. Make sure to update your comments.
28
New Lobster act() method
public void act() { turnAtEdge(); randomTurn(); move(); lookForCrab(); }
29
Did Crabs Eat all the Worms?
30
Adding more complicated behaviors: Keyboard control
boolean Greenfoot.isKeyDown( String key ) Checks whether a given key is currently pressed down Greenfoot.isKeyDown("left") returns true if the left arrow key is currently pressed down. Greenfoot.isKeyDown("right") returns true if the right arrow key is currently pressed down.
31
Create checkKeypress() method for the Crab class
32
New Crab act() method public void act() {
checkKeypress(); // no more random turns move(); lookForWorm(); }
33
New Lobster lookForCrab() method
/* * Check whether we have stumbled upon a crab. * If we have, eat it. If not, do nothing. */ public void lookForCrab() { if ( canSee(Crab.class) ) eat(Crab.class); Greenfoot.stop(); } Ends the game
34
3.8 - Adding Sound to Crab class
Another improvement to our game is the addition of sounds. Again, a method in the Greenfoot class helps us with this. /* * 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); Greenfoot.playSound(“slurp.wav"); } Plays Sound Effect
35
Adding Sound to Lobster class
/* * Check whether we have stumbled upon a crab. * If we have, eat it. If not, do nothing. */ public void lookForCrab() { if ( canSee(Crab.class) ) eat(Crab.class); Greenfoot.playSound("au.wav"); Greenfoot.stop(); } Plays Sound Effect
36
Playing the Game 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).
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.