lesson 2: reading a program. remember: from yesterday we learned about… precise language is needed...

70
Lesson 2: Reading a program

Upload: elvin-dale-woods

Post on 19-Jan-2016

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Lesson 2: Reading a program

Page 2: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Remember: from yesterdayWe learned about…

• Precise language is needed to program• Actors and Classes• Methods – step by step instructions• If statements• Adding sounds• Variables

Page 3: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Let’s learn to read the program

• Open WombatWorld

• Open the code for WombatWorld

Page 4: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Understanding WombatWorld

• Import ??? – means I am going to use these classes

Import command

Class to import

* Means important all classes found here!

Page 5: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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.

Page 6: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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 */

Page 7: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 8: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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.*;

Page 9: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 10: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Understanding WombatWorld

• Pretty colors in greenfoot mean something• { and } (braces) are used to group

code together in blocks.• The colors match with braces

Page 11: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Understanding WombatWorld

Everything in green is inside the class

Page 12: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Understanding WombatWorld

Everything in yellow is inside the method or command

Random leaves command

Page 13: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 14: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 15: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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.

Page 16: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Understanding WombatWorld.populate()

• Open WombatWorld

• Find the populate methodpublic void populate( )

Who can seethis method

What this type Method returns

Name of method

arguments

Page 17: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 18: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 19: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

In populate()

• We create the Wombat

• We create the leaves

• We add them to the game

Page 20: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 21: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 22: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 23: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

ScrollWorldOpen ScrollWorld

Notice DemoWorld is a subtype of ScrollWorld

Open the code for DemoWorld

Let’s look and see

Page 24: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

DemoWorld

Page 25: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

DemoWorldName of our World Parent (or super type)

Page 26: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

DemoWorldScreen Size in cellsWidth , Height

Map Size in cellsWidth , Height

Page 27: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

DemoWorldHow many pixels in a cell

Page 28: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 29: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 30: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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 );

Page 31: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Big moving worldYour program should look like this.Compile and run it.

Page 32: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 33: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 34: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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 <

Page 35: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 36: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 37: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 38: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

We can even combine values

1 2 3 4 5 6 7 8 9 10

X > 5

X < 10

X > 5 && X < 10

Page 39: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

We can even combine values

1 2 3 4 5 6 7 8 9 10

X > 5

X < 10

X > 5 || X < 10

Page 40: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 41: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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)

Page 42: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 43: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Making hitting rocks badIt should look like this

OR

OR

Page 44: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Making hitting rocks badEnd the game by calling

Greenfoot.stop();

Add a sound if you would like

Let’s add some text!

Page 45: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Saying Game OverGo back to the project

Right click on Actor and select New subclass…

Call it Text

Page 46: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Saying Game OverLet me explain this, then type it out

Page 47: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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.

Page 48: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 49: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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( … );

Page 50: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Making other thing move

Your code should look something like this

Page 51: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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!

Page 52: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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…”

Page 53: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 54: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Firing a bulletNow run it

Wait why are the bullet behind me?They aren’t going anywhere

Page 55: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Firing a bulletOpen Bullet

Create the act methodpublic void act() { }

Call move(10);

Page 56: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Firing a bulletTry it again!

Wait now the bullets go leftOh, we never set a direction!

Page 57: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Firing a bulletOpen Bug again

Set the direction to upsetRotation( -90 );

Try it!

Page 58: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 59: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 60: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 61: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Firing a bulletYour code should look something like this

Notice I am using a if statement to stop subtracting when myLastShot gets to zero

Page 62: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 63: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 64: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 65: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 66: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 67: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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

Page 68: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Final touches

OR

Page 69: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

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!

Page 70: Lesson 2: Reading a program. Remember: from yesterday We learned about… Precise language is needed to program Actors and Classes Methods – step by step

Documentation

• http://www.greenfoot.org/files/Greenfoot-API.pdf

• http://www.greenfoot.org/files/javadoc/