8x8 Board

Home * Board Representation * Mailbox * 8x8 Board



The 8x8 Board as basic square-centric board representation is either a two-dimensional array of bytes (or integers), containing piece and empty square codes, indexed by file and rank index, or more commonly a one-dimensional array indexed by a square in a 0..63 range which combines rank or file indices in three consecutive bits each. Such a board representation is often used redundantly in bitboard programs to answer the question which piece (if any) resides on a square efficiently. It has to deal with square mapping accordantly.

=Programming=

TSCP
TSCP uses two 64 element arrays, containing empty square plus pure piece code, and empty square plus piece color code :. int color[64]; /* LIGHT, DARK, or EMPTY */ int piece[64]; /* PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, or EMPTY */

However, when generating moves, TSCP converts the board data into a bigger array 10x12 Board.

FirstChess
FirstChess uses two 64 integer arrays, for all tasks, including move generating.

int piece[64] = { ROOK, KNIGHT,BISHOP,QUEEN, KING,  BISHOP,KNIGHT,ROOK, PAWN, PAWN,  PAWN,  PAWN,  PAWN,  PAWN,  PAWN,  PAWN, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, PAWN, PAWN,  PAWN,  PAWN,  PAWN,  PAWN,  PAWN,  PAWN, ROOK, KNIGHT,BISHOP,QUEEN, KING,  BISHOP,KNIGHT,ROOK };

int color[64] = { BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE };

Banksia
Banksia uses only one vector from C++ standard library : std::vector pieces;

The vector is initialized : Piece empty(PieceType::empty, Side::none); for(int i = 0; i < 64; i++) { pieces.push_back(empty); }

Straightforward
Based on the given cell and the size of the board, programs can calculate if the target cells are out of the board. In below code Banksia generates moves for a Rook at position pos:

case PieceType::rook: // both queen and rook here {   int col = getColumn(pos); for (int y=pos - 1; y >= pos - col; y--) { /* go left */ gen_addMove(moves, pos, y, captureOnly); if (!isEmpty(y)) { break; }   }    for (int y=pos + 1; y < pos - col + 8; y++) { /* go right */ gen_addMove(moves, pos, y, captureOnly); if (!isEmpty(y)) { break; }   }    for (int y=pos - 8; y >= 0; y -= 8) { /* go up */ gen_addMove(moves, pos, y, captureOnly); if (!isEmpty(y)) { break; }   }    for (int y=pos + 8; y < 64; y += 8) { /* go down */ gen_addMove(moves, pos, y, captureOnly); if (!isEmpty(y)) { break; }   }    break; }

Precalculate data
Some programs pre-calculate data for each cell and extract it when generating moves. That method is well-known mentioned by GNU Chess version 4.0 document (not code).

=Alternatives= As a lone board representation, the 8x8 board has some efficiency issues with move generation related to off the board test. Therefore more common are approaches dealing with that, that is 10x12 board with surrounding ranks and files, and Vector Attacks with its cheap test and unique square difference property with respect to distance and direction. In Games Playing with Computers, 1972, Alex Bell introduced an array of 65 squares, where the purpose of square 65 (always empty) is to detect pawns capturing outside the board by a table driven move generator.

=See also=
 * 10x12 Board
 * Array of Nibbles
 * Bitboards
 * Square Mapping Considerations


 * Vector Attacks
 * 0x88

=Publications=
 * Claude Shannon (1949). Programming a Computer for Playing Chess. pdf from The Computer History Museum
 * Alex Bell (1972). Games Playing with Computers. Allen & Unwin, ISBN-13: 978-0080212227

=Forum Posts=
 * Fastest Conversion from 0x88 board to 8x8 board representation by Artem Pyatakov, CCC, July 06, 2001
 * Re: Ferret/Gerbil question by Bruce Moreland, CCC, September 21, 2001 » Ferret, Gerbil, 0x88

=External Links=
 * Board representation (chess) - Array based from Wikipedia
 * Chess board representations by Robert Hyatt
 * Chapter 3: Board Games - 3.1 CHESS from Alex Bell (1972). Games Playing with Computers. Allen & Unwin, ISBN-13: 978-0080212227
 * 8 x 8: A Chess Sonata in 8 Movements (1957) directed by Hans Richter, Marcel Duchamp and Jean Cocteau, YouTube Video
 * Cast : Jean Arp, Paul Bowles, Ceal Bryson, Alexander Calder, Jean Cocteau, Willem de Vogel, Dorothea Tanning
 * Max Ernst, Richard Huelsenbeck, Frederick Kiesler, Julien Lary, Julien Levy, Jaqueline Matisse, Eugene Pellegrini, Man Ray, Yves Tanguy

=References=

Up one Level