在之前的课程中,我一直提到棋类游戏的棋盘模型用一维数组最好,井字棋游戏里用了一次,这一课再用一次。这一次要说的可是大名鼎鼎的“Warren Smith 棋盘模型”,很多棋类游戏都使用的是这个棋盘模型,或者是其衍生出来的改进模型。奥赛罗棋的估值算法有很多种,这一课我们也介绍一种简单的估值算法,为了提高搜索算法的效率,需多棋类游戏都使用空位链表技术,避免在整个棋盘上盲目地搜索,这一课将介绍如何组织空位链表的相关算法。
奥赛罗棋(Othello)
奥赛罗棋(Othello)又称黑白棋、翻转棋(Reversi),在西方和日本非常流行。游戏双方分别执黑白两种颜色的棋子,在 8 × 8 的棋盘上轮流落子,相互翻转对方的棋子,只要落子和棋盘上任一枚己方的棋子在横、竖和斜方向上能夹住对方棋子,就能将对方的这些棋子转变为己方棋子。如果一方在任一位置落子都不能夹住对手棋子,就要让一手,也就是让对手继续落子。如果双方皆不能落子,则游戏结束,游戏结束时棋盘上棋子多的一方取胜。
黑白棋的棋盘是一个 8 × 8 的格子,为了便于识别棋子的位置,用数字 1 ~ 8 标识棋盘的行,用字母 A ~ H 标识棋盘的列,如图(1)所示。为了抵消先手优势,通