Computer Go/Representing the Board

From Wikibooks, open books for an open world
Jump to: navigation, search

Representing the Board[edit]

One of the first problems that all Go programs must solve is how to store the current state of the game. The simplest representation needs to at least implement:

  • a way to determine whether a given point contains a black piece, a white piece, or is empty
  • a way to place a piece, or remove a piece from a given point
  • a way to store which point (if any) is illegal due to the Ko rule[1]

Sample Code[edit]

public class Board {
        public Point koPoint;

        private int boardSize;
        private Color[][] board;

        public Color getColor(Point p) {
                board[p.x][p.y];
        }

        public void setColor(Point p, Color color) {
                board[p.x][p.y] = color;
        }
}

Some programs, like GNU Go, use a one-dimensional array instead of a two-dimensional array. This has several advantages:

  • a point on the board can be represented by a single integer
  • one computation is often sufficient for a 1D-coordinate where two would be required for 2D-coordinates

For more information on this strategy, see Representing the board as a one-dimensional array.

Most programs also store additional information that makes it easier to evaluate board positions; we will cover these strategies in a later section.

Next Section: Recognizing Illegal Moves


Footnotes[edit]

[1] For simplicity's sake, our program will assume the Tromp-Taylor Rules, ignoring superko, with the additional stipulation that suicide is illegal.