Chapter 10 - Additional Scenario Ideas Bruce Chittenden 10.1 Marbles Marbles (continued) Marbles (continued) Collision Detection The Marbles scenario does not use any of the built-in Greenfoot collision detection methods, since these all work on the rectangular actor images. The Marbles Scenario on the other hand are round and we need precise collision for this image. haveHit(Marble marble ) /* * Check whether we have hit the given marble. We have hit it if its distance from us * (measured at the centre points) is less then our diameter. */ private boolean haveHit(Marble marble) { int dx = Math.abs (this.getX() - marble.getX()); int dy = Math.abs (this.getY() - marble.getY()); double distance = Math.sqrt(dx*dx+dy*dy); return distance < DIAMETER; } Collision Detection distance = √ (dx2 + dy2) marble.getY() dy dx this.getX() this.getY() marble.getX() 10.2 Lifts Lifts (continued) Lifts (continued) The Lifts scenario is a simple elevator simulation. It shows several floors of a multistory building and three elevators moving up and down. People appear on the floors and press the call buttons and enter the elevators when they come. To finish this scenario the movement of people would have to be properly modeled in and out of the elevators. 10.3 Boids Boids (continued) Boids (continued) Boids Algorithm The term “Boids” comes from a program developed in 1986 by Craig Reynolds that first implemented this flocking algorithm. In it each bird flies according to three rules: Separation: Steer away from other birds if getting too close Alignment: Steer toward the average heading of other birds in the vicinity Cohesion: Steer to move toward the average position of other birds in the vicinity 10.4 Circles Click the Mouse to Create a Circle at That Location Circles (continued) Circles Nice to Look At The Circles scenario is a scenario that does not seem to have much of a purpose but is interesting to play with and nice to look at. 10.5 Explosion Explosion (continued) Explosion (continued) Explosion (continued) Explosion (continued) Explosion (continued) Explosion (continued) Explosion (continued) Explosion (continued) Explosion (continued) Explosion (continued) Explosion (continued) More Spectacular Explosion The Explosion scenario demonstrates how we can implement a more spectacular looking explosion effect. To achieve this effect, we have a Debris class that represents a part of the rock. When the rock explodes, we remove it from the world and place 40 pieces of debris in its place. See the tutorial video at http://www.greenfoot.org/doc/videos.html 10.6 Breakout Breakout (continued) act Method Paddle /* * Act - do whatever the Paddle wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public void act() { if (Greenfoot.isKeyDown ("left")) { move(-9); } if (Greenfoot.isKeyDown ("right")) { move(9); } if (haveBall() && Greenfoot.isKeyDown ("space")) { releaseBall(); } } 10.7 Platform Jumper Platform Jumper (continued) Platform Jumper (continued) act Method Pengu private void checkKeys() { if (Greenfoot.isKeyDown("left") ) { setImage("pengu-left.png"); moveLeft(); } if (Greenfoot.isKeyDown("right") ) { setImage("pengu-right.png"); moveRight(); } if (Greenfoot.isKeyDown("space") ) { if (onGround()) jump(); } } Platform Jumper A very common style game is a “platform” game. The player typically controls a game character that has to move from one are on the screen to another, while over coming various obstacles. This scenario demonstrates how an actor can move along the top of another actor (the penguin on top of the ground), and how jumping and falling might be implemented. See the tutorial video at http://www.greenfoot.org/doc/videos.html 10.8 Wave Wave (continued) Wave (continued) Wave One of the fascinating aspects of this scenario is how a fairly simple implementation achieves a quite sophisticated simulation of various aspects of wave propagation. In each act round, each bead simply moves toward the middle of its two neighbors. 10.9 Summary When you program in other environments, outside of Greenfoot, you will have to learn new skills and techniques, but everything you have learned using Greenfoot will be useful and applicable.