Refining the Piece Index Values
I’ve been thinking about the piece index values. The original set had all of the pieces in a random list. I think there is an advantage in having the following piece index values:
#define WHITE 0
#define BLACK 1
#define KNIGHT 1
#define BISHOP 2
#define ROOK 3
#define QUEEN 4
#define PAWN 5
#define KING 6
#define BLANK 0
#define WHITEKNIGHT 1
#define WHITEBISHOP 2
#define WHITEROOK 3
#define WHITEQUEEN 4
#define WHITEPAWN 5
#define WHITEKING 6
#define BLACKKNIGHT 8
#define BLACKBISHOP 9
#define BLACKROOK 10
#define BLACKQUEEN 11
#define BLACKPAWN 12
#define BLACKKING 13
With these values note the following:
You can detect the color easily with a simple (piece >>> 3)
. This isn’t a big deal.
Since the king has the highest index of all piece, I can find any move in the global move table using the following code:
move = global_move_list[from][to][piece] + captured_piece
or for promoting a pawn:
move = global_move_list[from][to][piece] + captured_piece + (4 * promote_to)
That’s neat!
One of the weakness of bitboards is it is sometimes difficult to see which piece is occupying a particular square. In a pure bitboard only structure you’d need to loop through all the piece bitboards until you find the relevant one. This sounds cumbersome. So I think I’ll also need to add a square[64]
array to the board structure. This will simply hold the index of the piece occupying the square.
I think Maverick is going to fly!