跳轉到內容

計算機圍棋/棋盤表示

來自華夏公益教科書,開放的書籍,面向開放的世界

棋盤表示

[編輯 | 編輯原始碼]

所有圍棋程式必須解決的首要問題之一是如何儲存遊戲的當前狀態。最簡單的表示至少需要實現

  • 一種方法來確定給定的 上是否包含黑棋、白棋或為空
  • 一種方法來放置棋子,或從給定點上移除棋子
  • 一種方法來儲存哪個點(如果有)由於禁入規則[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 規則,忽略 超級禁入,並額外規定 自殺 是非法的。

華夏公益教科書