Computer Chess Club Archives


Search

Terms

Messages

Subject: Thoughts about board representations...

Author: Tom Kerrigan

Date: 14:34:52 02/10/00


There seems to be a huge pro-bitboard movement underway... But for those of us
not jumping on the bandwagon, I have some thoughts.

Let's say you have an array to represent the board:
int board[64];

If you make white pieces positive (i.e., pawn = 1, knight = 2) and black pieces
negative, you can use the following macros:

#define COLOR(x)  (x < 0)
#define TYPE(x)   (x < 0 ? -x: x)

I don't like the TYPE macro because it has a branch. So let's say you set bit #4
if the piece is black. Then you can use these macros:

#define COLOR(x)  (x >> 3)
#define TYPE(x)   (x & 7)

This seems pretty good, but I still have a minor complaint: a pawn = 1, so all
the arrays that are indexed by piece type have to have an unused element at the
beginning.

You can set the pawn = 0, but then the empty square value has to be non-zero. On
some proessors, this increases the time it takes to see if a square is empty.

If you're using the 0x88 trick, you get two boards to play with, so the color of
the piece on square x can be board[x] and the piece type can be board[x+8]. I
think this is a pretty good solution, but it involves some extra memory
accesses, not only when you're examining the board, but also when you're moving
pieces around.

If you have a piece struct, your board can be pointers to the structs:
piece_struct *board[64];

Then the color of the piece on square x is board[x]->color and the piece type is
board[x]->type. I think this solution is pretty cool, but it involves some extra
memory accesses. Plus, every time you want to check the piece type of square x,
you have to make sure that board[x] isn't NULL. That's not cool.

So... each method has its minor advantages and disadvantages. I can't really
decide which I like more. What do other programmers do? Is there some really
elegant solution that I'm missing? I hope so. :)

-Tom



This page took 0.03 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.