Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Lesson 2: Reading a program
Remember: from yesterday We learned about…
• Precise language is needed to program • Actors and Classes • Methods – step by step instruc@ons • 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
No@ce the semi-‐colon! Almost all commands end in a semi-‐colon A few do not. This can be one of the 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 un@l 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 class public 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 this private – means no one can see or use this
• World – is a class defined elsewhere in greenfoot. We imported it with import greenfoot.*;
Understanding WombatWorld
• PreYy 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
• PreYy 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 un@l the end of the line /* more comments */ – Comments for the programmer not the computer
Objects
• Objects are par@cular 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 method public void populate( )
Who can see this method
What this type Method returns
Name of method
arguments
Understanding WombatWorld.populate()
• Different example: (not from Wombat World)
• Find the defini@on of a word public Definition lookupDefinition( String Word )
Who can see this method
What this type Method returns
Name of method
Arguments: What word to look up
Crea@ng 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: – hYp://www.greenfoot.org/scenarios/5806
Let’s move forward
• With this we can make… – Overhead bomber games – Debugging – finding and fixing mistakes – Star@ng from one else’s project – Prac@cing what we know – Reading documenta@on
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
ScrollWorld � Open ScrollWorld
� Notice DemoWorld is a subtype of ScrollWorld
� Open the code for DemoWorld
� Let’s look and see
DemoWorld
DemoWorld Name of our World Parent (or super type)
DemoWorld Screen Size in cells Width , Height
Map Size in cells Width , Height
DemoWorld How many pixels in a cell
Big moving world Let’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 world Let’s move the Actors around
We don’t need to move the bug because he follows the camera try setting the Apple to 700, 9700 move the other Actors
Let’s set the camera position and direction
Let’s put the camera at the bottom (600, 9800) type “this” then hit CTRL+SPACE for a list of methods use setCameraLocation
use setCameraDirection and set the direction to -90 (UP) NOTE: 0 is right, 180 is left, 90 is down
Big moving world Now let’s make the world move. Create a new method call act()
It should look like this public void act() { }
Inside it call moveCamera( 5 );
Big moving world Your 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 method public void act() { }
� Let’s add some simple movement
Steering
� Make and if statement and test � Greenfoot.isKeyDown(“left”)
� We don’t want “move” the bug, we want to slide it left or right � For right setLocation( getX()+ 3, getY() );
� For left setLocation( getX()- 3, getY() );
� Try it out you should be able to move left and right
If, Condi@ons, 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, Condi@ons, and Comparisons
• How do we say is X greater than 5 X > 5 OR 5 < X
• How about is X equal to 7 X == 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 10 X > 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 10 X > 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 mar@n = new Person( “Mar@n” ); Person other = new Person( “Mar@n” ); What will martin == other return true or false
FALSE – because they are different referenced (made by different new opera@ons)
Making hitting rocks bad � After moving left or right, we will add a test to see if
we hit a rock
� Make an if statement � the test will use the method
getOneIntersectingObject( Rock.class ) � It returns a rock if the bug is intersecting one
� Otherwise it returns Nothing (null)
� Compare the returns object with null
Making hitting rocks bad � It should look like this
OR
OR
Making hitting rocks bad � End the game by calling
Greenfoot.stop();
� Add a sound if you would like
� Let’s add some text!
Saying Game Over � Go back to the project
� Right click on Actor and select New subclass…
� Call it Text
Saying Game Over � Let me explain this, then type it out
Saying Game Over � Go back to Bug, just before calling
Greenfoot.stop();
� Create a new Text object � Text text = new Text( “Game Over”, 200, 50, 36 );
� Add the object to the center of the screen � addObject( 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 method public void act() { }
� Let’s add some simple movement
Making other thing move
� Open the Apple or the Mushroom
� Add an act method public 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 bullets � When 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 bullets � When 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 bullet � Now open actor
� When the player presses space � Create a new bullet � Add it to the world
� At the same location in the world as the Bug
Firing a bullet � Now run it
� Wait why are the bullet behind me? � They aren’t going anywhere
Firing a bullet � Open Bullet
� Create the act method public void act() { }
� Call move(10);
Firing a bullet � Try it again!
� Wait now the bullets go left � Oh, we never set a direction!
Firing a bullet � Open Bug again
� Set the direction to up setRotation( -90 );
� Try it!
Firing a bullet � Bullets are too close together.
� Let’s slow them down
� We could limit the number of bullets
� Or we could limit the rate of fire � We will only allow bullet to be fired if a certain
amount of time has passed
Firing a bullet � Bullets are too close together.
� Let’s slow how fast we shoot
� We 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 class � One for how often we are allowed to fire � Another for how long has passed since the last bullet
was shot
Firing a bullet � Both 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 bullet � Your code should look something like this
� Notice I am using a if statement to stop subtracting when myLastShot gets to zero
Making bullets destroy things
� We need a way to test if an Actor can be destroyed � Remember how we detected if the bug hit a rock?
� We need to remove the objects � Remember how World and ScrollWorld have an
AddObject method? � Maybe they have a removeObject method
� Let’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 bullets destroy 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 bullets destroy things
� Let’s make rocks destroyable – they need to be subtypes � We just need to say the a rock implements
Destroyable
� Now a rock is Destroyable and a type of ScrollActor � It is two things
Making bullets destroy 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 go � Give them a time limit then remove them
� Like counting with shots
� Or 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 go � Give them a time limit then remove them
� Like counting with shots
� Or once they are off screen remove them � Since they only go up right now,
� If y < 0
Final touches
OR
Extend the game with your ideas
� Add more rocks or objects
� Add more destroyable
� Add enemies that shoot bullets at you � Need enemies, new bullets – fancy stuff
� If you get a mushroom you can shoot faster � For a limited amount of time?
� For more help see the documentation or ask me!
Documenta@on
• hYp://www.greenfoot.org/files/Greenfoot-‐API.pdf
• hYp://www.greenfoot.org/files/javadoc/