Sie sind auf Seite 1von 16

Breakout in Greenfoot

Barb Ericson ericson@cc.gatech.edu


Georgia Institute of Technology
September 2010

Breakout

What are the objects?


Open Breakout.html
in Breakout-export
And play the game
(use the arrow keys to
move the paddle and
hit the ball into the
bricks)
How do you lose?
How do you win?
What are the objects
in the game?
Breakout

The Breakout Game


Open BreakoutStart
There are Bricks,
a Message that
says we are
starting with Ball
1, a Ball, and a
Paddle

But if you click on


act or run nothing
happens
Breakout

Game Rules
Use the left and right arrow keys to move
the paddle
Use the paddle to hit the ball into the bricks to
get rid of them
Get rid of all the bricks to win the g
game
The ball will bounce off most of the walls, paddle,
and bricks

You get up to three balls to use


If you still have bricks after using 3 balls you lose
If a ball hits the bottom wall it is removed and a
new ball is added
Breakout

The Paddle Class


Paddle is a subclass of Actor
public class Paddle extends Actor

A paddle object has the following fields:


width of the paddle
height of the paddle
moveAmount amount to move the paddle
color of the paddle

Breakout

What can actors do?


Double click on the Actor class
This shows the documentation (API) for the
Actor class in Greenfoot
How does an actor check if it is hitting
(intersection with another actor)?
How do you get the current location of the
actor (x and y values)?
How do you set the current location?
How do you change the image of the actor?
Breakout

Moving the Paddle (add to act method)


Check if the left key is down and if so
move the paddle left by the moveAmount
if (Greenfoot.isKeyDown("left"))
{
setLocation(getX()-moveAmount,
setLocation(getX()
moveAmount, getY());
}

Check if the right key is down and if it is


move the paddle to the right

Breakout

The Ball Class


Ball is a subclass of Actor
public class Ball extends Actor

Each ball object has the following fields:


radius
width
color
velX (amount to move in X)
Set in the constructor

velY (amount to move in Y)


Breakout

The Ball's Act Method


Move the ball
Set the location using the current x and y and velX
and velY (amount to move in X and Y)

Check if hit any actors


If hit an actor and that actor isn't the message
g
Bounce off the object
Check if the object was a brick
if it was a brick remove the brick from the world and have the
world check if the player won (no more bricks)

Check if at any walls


Bounce off top or side walls
If at bottom wall remove ball and create a new one
Breakout

Move the Ball


The ball's y velocity is 2, but it is a field
velY

The ball's x velocity should be a random


value between 1 and 2 or -1 to -2
set in the constructor
velX

To move the ball


setLocation(getX() + velX,
getY() + velY);
Breakout

10

Checking if hit any Actors

Get an actor (an object of the class


Actor) that intersects with this one
Actor actor =
this.getOneIntersectingObject(Actor.class);

If the ball did hit an actor and the actor


isn't the message (object of the Message
class)
if (actor != null && !(actor instanceof Message))
{

Breakout

11

Bounce the Ball off an Actor


The actor must be a
paddle or a brick (if it
isn't a message)
So negate velY to
make it switch
di
direction
i iin Y
velY = -velY;

Breakout

12

If the Ball hit a Brick


Check using
if (actor instanceof Brick)
{

If the ball did hit a brick


remove the brick from the world
world.removeObject(actor);

check if won (last brick was removed)


world.checkIfWon();

}
}
Breakout

13

Checking Walls
If the ball hit the left wall bounce in x
if (getX() - radius <= 0)
velX = -velX; // negate velocity in X

if the ball hit the right wall bounce in x


else if (getX() + radius >
>=
BreakoutWorld.WIDTH)
velX = -velX; // negate velocity in X

if the ball hit the top wall bounce in y


else if (getY() - radius <= 0)
velY = -velY; // negate velocity in Y
Breakout

14

Checking Bottom Wall


else if (getY() + radius >=
BreakoutWorld.HEIGHT)
{

remove the current ball from the world


world.removeObject(this);

add a new ball to the world


world.newBall();
this also checks for the end of the game
}

Breakout

15

Additional Ideas
Add sounds
bounce sound and win or lose sounds

If the ball hits at the edge of paddle then bounce in x as


well as y
if the distance from the center of the ball to the left or right edge
of the paddle is less than or equal the radius of the ball

Speed up the velocityy


after each 7th hit with the paddle
double the x velocity

Make the paddle smaller over time


Change the ball color to match the last hit brick's color
Add a getColor() method to Brick

See the documentation for the Greenfoot classes


http://www.greenfoot.org/doc/javadoc/
Breakout

16

Das könnte Ihnen auch gefallen