```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 - 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.
```