跳转到内容

计算机围棋/棋盘表示

来自维基教科书,开放的书籍,面向开放的世界

棋盘表示

[编辑 | 编辑源代码]

所有围棋程序必须解决的首要问题之一是如何存储游戏的当前状态。最简单的表示至少需要实现

  • 一种方法来确定给定的 上是否包含黑棋、白棋或为空
  • 一种方法来放置棋子,或从给定点上移除棋子
  • 一种方法来存储哪个点(如果有)由于禁入规则[1]而被禁止

示例代码

[编辑 | 编辑源代码]
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;
	}
}

一些程序,比如 GNU Go,使用一维数组而不是二维数组。这样做有几个优点

  • 棋盘上的一个点可以用单个整数表示
  • 对于一维坐标,通常只需要一次计算,而对于二维坐标则需要两次计算

有关此策略的更多信息,请参见 将棋盘表示为一维数组.

大多数程序还存储其他信息,这使得评估棋盘位置更容易;我们将在下一节介绍这些策略。

下一节:识别非法走法


[1] 为了简单起见,我们的程序将假设 Tromp-Taylor 规则,忽略 超级禁入,并额外规定 自杀 是非法的。

华夏公益教科书