1 / 52

Chapter 4 - Finishing the Crab Game

Chapter 4 - Finishing the Crab Game. Bruce Chittenden. 4.1 Adding Objects Automatically. Right Click on CrabWorld and Select Open editor. Code 4.1. import greenfoot.*; // (Actor, World, Greenfoot, GreenfootImage) public class CrabWorld extends World { /**

marcel
Download Presentation

Chapter 4 - Finishing the Crab Game

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 4 - Finishing the Crab Game Bruce Chittenden

  2. 4.1 Adding Objects Automatically Right Click on CrabWorld and Select Open editor

  3. Code 4.1 import greenfoot.*; // (Actor, World, Greenfoot, GreenfootImage) public class CrabWorld extends World { /** * Create the crab world (the beach). Our world has a size * of 560x560 cells, where every cell is just 1 pixel. */ public CrabWorld() { super(560, 560, 1); } }

  4. Constructor for CrabWorld public CrabWorld() { super(560, 560, 1); } • A Constructor has no Return Type Specified • A Constructor Always has the Same Name as the Class • Constructor is Automatically Executed whenever and Instance of the Class is Created

  5. Constructor for CrabWorld • Constructor has no Return Type Specified Between Keyword “public” and the Name • Constructor Always has the Same Name as the Class • Constructor is Automatically Executed Whenever and Instance of the Class is Created public CrabWorld() { super(560, 560, 1); }

  6. Add a Crab to the World X (0, 0) public CrabWorld() { super(560, 560, 1); addObject ( new Crab(), 150, 100); } Y Create a New Crab and Add it at Location x=150 and y=100

  7. 4.2 Creating New Objects • Creates a New Instance of the Class Crab • When We Create a New Object , We Must Do Something with It new Crab() addObject ( new Crab(), 150, 100);

  8. Exercise 4.1

  9. Exercise 4.1 The Crab is Automatically Created in CrabWorld

  10. Exercise 4.2

  11. Exercise 4.2

  12. Exercise 4.3

  13. Exercise 4.3

  14. Exercise 4.4 Create a Method called populateWorld ()

  15. Exercise 4.4

  16. Exercise 4.5 Call to getRandomNumber () for each of the coordinates. I used a for loop so I did not have to type this line 10 times.

  17. Exercise 4.5

  18. 4.3 Animating Images Crab with legs out Crab with legs in Animation is Achieved by Switching Between the Two Images

  19. 4.4 Greenfoot Images

  20. Exercise 4.6

  21. 4.5 Instance Variables (Fields) privatevariable-type variable-name An instance variable is a variable that belongs to the object (an instance of a class).

  22. Code 4.2 import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot) // comment omitted public class Crab extends Animal { private GreenfootImage image1; private GreenfootImage image2; // methods omitted }

  23. Exercise 4.7

  24. Exercise 4.8 Variables for the Crabs Location in the World A Variable of the Crabs Image

  25. Exercise 4.9 public class Crab extends Animal { private GreenfootImage image1; private GreenfootImage image2; /* * Act - do whatever the crab wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public void act() { checkKeypress(); move(); lookForWorm(); } }

  26. Exercise 4.10 The Variables Have Not Been Initialized and Contain null

  27. 4.6 Assignment crab2.png crab.png image1 = new GreenfootImage (“crab.png”); image2 = new GreenfootImage (“crab2.png”);

  28. 4.7 Using actor Constructors public Crab() { image1 = new GreenfootImage ("crab.png"); image2 = new GreenfootImage ("crab2.png"); setImage (image1); } The constructor for the Crab class creates two images and assigns them to variables for use later.

  29. Code 4.3 import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot) // comment omitted public class Crab extends Animal { private GreenfootImage image1; private GreenfootImage image2; /* * Create a crab and initialize its two images. */ public Crab() { image1 = new GreenfootImage ("crab.png"); image2 = new GreenfootImage ("crab2.png"); setImage (image1); } // methods omitted } • The signature of a constructor does not include a return type. • The name of the constructor is the same as the name of the class. • The constructor is automatically executed when a crab object is created.

  30. Exercise 4.11 public class Crab extends Animal { private GreenfootImage image1; private GreenfootImage image2; /* * Create a crab and initialize its two images. */ public Crab() { image1 = new GreenfootImage ("crab.png"); image2 = new GreenfootImage ("crab2.png"); setImage (image1); }

  31. Exercise 4.12

  32. 4.8 Alternating The Images Pseudo Code if ( our current image is image1 ) then use image2 now else use image1 now Actual Code if ( getImage() == image1 ) setImage (image2); else setImage (image1);

  33. Code 4.4 if ( getImage() == image1 ) { setImage (image2); } else { setImage (image1); }

  34. if/else When Only One Statement The Method getImage will return the actor’s current image. if ( getImage() == image1 ) setImage (image2); else setImage (image1); The == is a comparison operator, not to be confused with = which is an assignment operator.

  35. Comparison Operators

  36. 4.9 The if/else Statement If ( condition) { statements; } else { statements; } if-clause else-clause If the condition is TRUE the if-clause will be executed, otherwise the else-clause will be executed

  37. Exercise 4.13 /* * Act - do whatever the crab wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public void act() { if (getImage() == image1) { setImage (image2); } else { setImage (image1); } checkKeypress(); move(); lookForWorm(); }

  38. Exercise 4.13

  39. Exercise 4.14 /* * Switch the images of the Crab to make it appear as if the Crab is moving it's legs. * If the current image is image1 switch it to image2 and vice versa. */ public void switchImage() { if (getImage() == image1) { setImage (image2); } else { setImage (image1); } }

  40. act Method /* * Act - do whatever the crab wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public void act() { checkKeypress(); switchImage(); move(); lookForWorm(); }

  41. Exercise 4.14

  42. Exercise 4.15 Right Click on the Crab Click on the switchImage Method The Crab’s Legs will move

  43. 4.10 Counting Worms • An instance variable to store the current count of worms eaten • private int wormsEaten; • An assignment that initializes this variable to 0 at the beginning • wormsEaten = 0; • Code to increment our count each time we eat a worm • wormsEaten = 0; • Code that checks whether we have eaten eight worms and stops the game and plays the sound it we have • wormsEaten = wormsEaten + 1;

  44. Code 4.5 /* * 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"); wormsEaten = wormsEaten + 1; if ( wormsEaten ==8) { Greenfoot.playSound ("fanfare.wav"); Greenfoot.stop(); } } }

  45. Exercise 4.16

  46. Exercise 4.16

  47. Exercise 4.17

  48. 4.11 More Ideas • Using different images for the background and the actors • using more different kinds of actors • not moving forward automatically, but only when the up-arrow key is pressed • building a two-player game by interdicting a second keyboard-controlled class that listens to different keys • making new worms pop up when one is eaten (or at random times) • many more that you can come up with yourselves

  49. Exercise 4.18 /* * Switch the images of the Crab to make it appear as if the Crab is moving it's legs. * If the current image is image1 switch it to image2 and vice versa. */ public void switchImage() { if (timeToSwitchImages >= 3) { if (getImage() == image1) setImage (image2); else setImage (image1); timeToSwitchImages = 0; } else timeToSwitchImages++; }

  50. Exercise 4.18

More Related