http://mediocrechess.blogspot.com/
http://sourceforget.net/projects/mediocrechess/
Navigation
Guides

Board representation choice

The board representation is the heart of the chess program (the brain being the search algorithm :). It's important to have a board representation which makes for fast move generation, since this is basically what costs when calculating the moves.

There are basically three choices:


Arrays: A chess board consists of 8x8 squares, so why not represent the board with an 8x8 array, containing a number representing a piece on each index.

You can make this work very well, but basically there are problems with speed. One of them being checking if a target-"square" is on the board or not (we don't want the bishops running off into outer space). There are solutions to this particular problem, like making it a 12x12 board instead and letting the extra squares represent "off-the-board"-squares.

But the real problems come when applying certain move generating techniques, which will be discussed at a later date.

So I scratched this approach

0x88: The representation I'm going to use. More about it in the next post.

Bitboards: This method uses a 64-bit sequence of zeros and ones (bits). Every bit states something about the board. Like every zero is an empty square and every one is a white pawn. Then you have a number of sequences to represent all the pieces on the board.

But you can also have the ones represent attacked squares for example, or a countless number of other information you might want to store.

This approach is very fast, especially using the 64-bit processors which calculates this extremely fast.

However it is a tad complicated to implement, so I'll leave it be for my next engine. :)

© Copyright 2007 - Jonatan Pettersson