Gameplay Balance in Breakout

Mon, Jun 13, 2011

Breakout is a simple game, but you still need to spend some time fine tuning the gameplay
balance. Levels need to be created, level difficulty should be identified so that easier
levels come early on, the ball speed and accelleration has to be fine tuned, along with the number
of lives and scoring strategy.

Creating Levels

In a more complex game, an editor would be built for designing the levels, but for this
demonstration I defined the levels in a simple ASCII format in levels.js.

Each level can define its own set of colors, each represented by a single letter, and the bricks
are built up of repeating sequences of those letters. 2 bricks of the same color can be placed
next to each other by toggling between upper and lower case, e.g:

Balancing Levels

It is important to play test the levels to identify which are easy and which are hard, so that new
users get a gentle introduction and enjoy playing the first level but are also presented with
harder challenges as they progress.

For this game, we start off with a slow easy level (see left), where each brick is wide and there
are not many total bricks, so most players should be able to finish this level and get a sense
of achievement.

After that it becomes a matter of tuning the levels to be progressively harder. This can only
be done by play testing. It can be hard to predict which levels are going to be challenging.

For example, the following level looks fairly straight forward but turns out to be one of the
hardest. We increase the speed of the ball on each brick hit, and in this level the ball can
go off on a crazy ping-ping-ping brick hitting spree and suddenly come back towards the paddle
much much faster than it left.

Balancing Ball Speed

Beyond making harder levels, the primary way to increase the challenge is to increase the ball speed. For
this game I decided that the ball would not constantly accelerate (as I did in pong),
but instead would increase in speed whenever a brick was hit.

So the more bricks you hit, the higher your score, but the faster the ball.

The challenge became making the ball speed up enough so that the earlier levels, with less bricks, did
not feel boring, but the later levels, with more bricks, did not speed up the ball to unplayable speeds.

I did this by ensuring that (a) the ball has a maximum speed and (b) the speed increase is inversely
proportional to its current speed. E.g if the ball is going slowly when it hits a brick it gets a large
speed increase, but if it is already going fast then it only gets a small speed increase.

Once the basic equation is in place, it becomes a question of play testing to find the right constants to
plug in to make the game ‘feel’ right.

Continuous Testing

There is certainly more work that can be done to make the current 10 levels more balanced. The current ball
speed is probably a little too fast on the later levels where there are lots of bricks, and there probably
needs to be a few more ‘easy’ levels early on.

If it were a real game, I would want to spend much more time balancing the game play. Including getting
feedback from test users…