lesson 2: reading a program. remember: from yesterday we learned about… precise language is needed...
TRANSCRIPT
Lesson 2: Reading a program
Remember: from yesterdayWe learned about…
• Precise language is needed to program• Actors and Classes• Methods – step by step instructions• If statements• Adding sounds• Variables
Let’s learn to read the program
• Open WombatWorld
• Open the code for WombatWorld
Understanding WombatWorld
• Import ??? – means I am going to use these classes
Import command
Class to import
* Means important all classes found here!
Understanding WombatWorld
• Import ??? – means I am going to use these classes
Notice the semi-colon!Almost all commands end in a semi-colonA few do not. This can be one ofthe most difficult things for new programmers.
Understanding WombatWorld
• Comments– do not affect the program or running of a program– They are for the programmer, not the computer
• Comments are either start with// and got until the end of the line
• Comments are everything between /* comment goes here **** cow goes moo */
Understanding WombatWorld
• Comments– do not affect the program or running of a program– They are for the programmer, not the computer
• Comments are either start with
• Comments are everything between
Understanding WombatWorld
• Defining a classpublic class WombatWorld extends World
• This says I am defining a public class called “WombatWord”. It is a sub-type of World, just like a human is a sub-type of animal.
• public – means anyone/class can see and use thisprivate – means no one can see or use this
• World – is a class defined elsewhere in greenfoot. We imported it with
import greenfoot.*;
Understanding WombatWorld
• Pretty colors in greenfoot mean something
• Words in red and colored are special words in Java.– Eg. import, public, class, extends, void– They cannot be used as names
Understanding WombatWorld
• Pretty colors in greenfoot mean something• { and } (braces) are used to group
code together in blocks.• The colors match with braces
Understanding WombatWorld
Everything in green is inside the class
Understanding WombatWorld
Everything in yellow is inside the method or command
Random leaves command
Review
• import – a class you want to use
• public class WombatWorld extends World– Defining a new public class that is a type of world
• { and } (braces)- blocks of code (colored)
• // and got until the end of the line/* more comments */– Comments for the programmer not the computer
Objects
• Objects are particular instances of a class– Your pet dog, my pet cat, me, you
• Objects represent “real” concrete things.
• Because an object is “real” thing, you can actually change it and command it to things.
• New Objects must be created using new
Objects
• The “actors” or things in a Greenfoot game are objects, but each must be of a previously defined class.
• Let’s take a look.
Understanding WombatWorld.populate()
• Open WombatWorld
• Find the populate methodpublic void populate( )
Who can seethis method
What this type Method returns
Name of method
arguments
Understanding WombatWorld.populate()
• Different example: (not from Wombat World)
• Find the definition of a wordpublic Definition lookupDefinition( String Word )
Who can seethis method
What this typeMethod returns
Name of method
Arguments:What word to look up
Creating new objects
• To create a new object first create a variable to store the object in
• Then we request a new object or actor be created
• Set things about the object• Then do something with the object
In populate()
• We create the Wombat
• We create the leaves
• We add them to the game
Let’s move forward
• How about we create a really big world?
• The world will be bigger than what we can see on screen– We will only see a small part of the map
• We will use code from ScrollWorld:– http://www.greenfoot.org/scenarios/5806
Let’s move forward
• With this we can make…– Overhead bomber games– Debugging – finding and fixing mistakes– Starting from one else’s project– Practicing what we know– Reading documentation
Let’s start by creating a world
Open ScrollWorld Project
We will create a big map
We will then populate the world with different objects and tasks
ScrollWorldOpen ScrollWorld
Notice DemoWorld is a subtype of ScrollWorld
Open the code for DemoWorld
Let’s look and see
DemoWorld
DemoWorldName of our World Parent (or super type)
DemoWorldScreen Size in cellsWidth , Height
Map Size in cellsWidth , Height
DemoWorldHow many pixels in a cell
Big moving worldLet’s make the world really tall, but just as wide as the screen.Change full width and full height values to 600 and 10000
Big moving worldLet’s move the Actors around
We don’t need to move the bug because he follows the camera
try setting the Apple to 700, 9700move the other Actors
Let’s set the camera position and directionLet’s put the camera at the bottom (600, 9800)type “this” then hit CTRL+SPACE for a list of methodsuse setCameraLocation
use setCameraDirection and set the direction to -90 (UP)NOTE: 0 is right, 180 is left, 90 is down
Big moving worldNow let’s make the world move.
Create a new method call act()
It should look like this
public void act(){}
Inside it callmoveCamera( 5 );
Big moving worldYour program should look like this.Compile and run it.
Let’s make hitting rocks bad
When a bug hits a rock, let’s end the game.
Open Bug
We will first add steering then crashing
Remove the body of the act methodpublic void act() { }
Let’s add some simple movement
Steering
Make and if statement and testGreenfoot.isKeyDown(“left”)
We don’t want “move” the bug, we want to slide it left or rightFor right setLocation( getX()+ 3, getY() );For left setLocation( getX()- 3, getY() );
Try it out you should be able to move left and right
If, Conditions, and Comparisons
• Remember how if statements need true or false (boolean) values
• We can compare values– The result of a comparison is true or false
• Are two values equal ==• Are two values different !=• We also have greater than > and less than <
If, Conditions, and Comparisons
• How do we say is X greater than 5X > 5 OR 5 < X
• How about is X equal to 7X == 7
• How is variable professor equal to nothing?professor == null OR null == professor
• Professor is equal to something (not null)professor != null OR null != professor
We can even combine values
• Is X greater than 5 but less than 10X > 5 && X < 10
Both parts must be true
• Is it true for X = 3• Is it true for X = 7• Is it true for X = 5
We can even combine values
• Is X greater than 5 OR less than 10X > 5 || X < 10 at least one part must be trye
• Is it true for X = 3• Is it true for X = 7• Is it true for X = 5• Is it true for X = 13
We can even combine values
1 2 3 4 5 6 7 8 9 10
X > 5
X < 10
X > 5 && X < 10
We can even combine values
1 2 3 4 5 6 7 8 9 10
X > 5
X < 10
X > 5 || X < 10
Comparing Objects/Reference
• Objects and references are hard to compare and understand
• Comparison between Object checks if they are the same reference, and NOT that they are the same
Comparing Objects/Reference
Person martin = new Person( “Martin” );Person other = new Person( “Martin” );
What will martin == other returntrue or false
FALSE – because they are different referenced (made by different new operations)
Making hitting rocks badAfter moving left or right, we will add a test to
see if we hit a rock
Make an if statementthe test will use the method
getOneIntersectingObject( Rock.class )It returns a rock if the bug is intersecting oneOtherwise it returns Nothing (null)
Compare the returns object with null
Making hitting rocks badIt should look like this
OR
OR
Making hitting rocks badEnd the game by calling
Greenfoot.stop();
Add a sound if you would like
Let’s add some text!
Saying Game OverGo back to the project
Right click on Actor and select New subclass…
Call it Text
Saying Game OverLet me explain this, then type it out
Saying Game OverGo back to Bug, just before calling
Greenfoot.stop();
Create a new Text objectText text = new Text( “Game Over”, 200, 50, 36 );
Add the object to the center of the screenaddObject( text, 300, 200 );
Try it in the game; drive into a rock.
Let’s make hitting rocks bad
When a bug hits a rock, let’s end the game.
Open Bug
We will first add steering then crashing
Remove the body of the act methodpublic void act() { }
Let’s add some simple movement
Making other thing move
Open the Apple or the Mushroom
Add an act methodpublic void act() { }
Let’s try simple back and forth We will use move again How will we detect when we reach an edge?
getX()
Where are the edges? 0 and the width – getWorld().getFullWidth()
Then what? Flip the direction – setRotation( … );
Making other thing move
Your code should look something like this
Firing bulletsWhen the player presses space bar, we will fire
bullets
The bullet will move forward
If the bullet hits something it can destroy, then both should be destroyed.
First create a bullet class a sub type of scroll actor!
Firing bulletsWhen the player presses space bar, we will fire
bullets
The bullet will move forward
If the bullet hits something it can destroy, then both should be destroyed.
First create a bullet class a sub type of scroll actor!Right click on ScrollActor select “new subclass…”
Firing a bulletNow open actor
When the player presses spaceCreate a new bulletAdd it to the world
At the same location in the world as the Bug
Firing a bulletNow run it
Wait why are the bullet behind me?They aren’t going anywhere
Firing a bulletOpen Bullet
Create the act methodpublic void act() { }
Call move(10);
Firing a bulletTry it again!
Wait now the bullets go leftOh, we never set a direction!
Firing a bulletOpen Bug again
Set the direction to upsetRotation( -90 );
Try it!
Firing a bulletBullets are too close together.
Let’s slow them down
We could limit the number of bullets
Or we could limit the rate of fireWe will only allow bullet to be fired if a certain
amount of time has passed
Firing a bulletBullets are too close together.
Let’s slow how fast we shootWe will only allow bullet to be fired if a certain
amount of time has passed
In Bug, we need to create two variables in the classOne for how often we are allowed to fireAnother for how long has passed since the last
bullet was shot
Firing a bulletBoth will be integer values (whole numbers)
Create the values like so
Go to act()
Change the if statement If space is down and myLastShot equal 0 Inside the if set myLastShot = myRateOfFire;At the end of act() subtract 1 from myLastShot
We are counting down until we can fire again
Firing a bulletYour code should look something like this
Notice I am using a if statement to stop subtracting when myLastShot gets to zero
Making bulletsdestroy things
We need a way to test if an Actor can be destroyedRemember how we detected if the bug hit a rock?
We need to remove the objectsRemember how World and ScrollWorld have an
AddObject method?Maybe they have a removeObject methodLet’s double clicking one of them
Last, what type should we test for?Rocks? Actors?Let’s create a special type for detecting what bullets
can destroy
Making bulletsdestroy things
Create a new class Edit > “New subclass…” Call it destroyable
Make sure the class has not methods
Replace the word class with interface An interface is like a class (or type) It only describe what the type can do – it can’t actually do
anything or even exist. You need to create a subtype of the interface
Making bulletsdestroy things
Let’s make rocks destroyable – they need to be subtypesWe just need to say the a rock implements Destroyable
Now a rock is Destroyable and a type of ScrollActor It is two things
Making bulletsdestroy things
Open bullet
Add the detect hitting things code from Bug Change Bug to Destroyable
Inside the if statement
Remove the Actor and bullet
Final touches
Try it out
Destroy some rocks
How far should bullets go? Should they go for ever?
Let’s limit how far bullets goGive them a time limit then remove them
Like counting with shotsOr once they are off screen remove them
Since they only go up right now, If y < 0
Final touches
Try it out
Destroy some rocks
How far should bullets go? Should they go for ever?
Let’s limit how far bullets goGive them a time limit then remove them
Like counting with shotsOr once they are off screen remove them
Since they only go up right now, If y < 0
Final touches
OR
Extend the gamewith your ideas
Add more rocks or objects
Add more destroyable
Add enemies that shoot bullets at youNeed enemies, new bullets – fancy stuff
If you get a mushroom you can shoot fasterFor a limited amount of time?
For more help see the documentation or ask me!
Documentation
• http://www.greenfoot.org/files/Greenfoot-API.pdf
• http://www.greenfoot.org/files/javadoc/