# 基础棋盘 9*9 初始值为EMPTY
class Board(object):
"""
baseBoard为静态变量,最好用下面的静态方法获取
size为棋盘大小
neighbors存的是对应点的周围点(上下左右)
diagonals存的是对应点的对角点
"""
global BOARD_SIZE
baseBoardSize = BOARD_SIZE
valueBoardSize = BOARD_SIZE
emptyBoard = np.array([[Chess.EMPTY for i in range(BOARD_SIZE)] for i in range(BOARD_SIZE)])
baseBoard = np.array([[Chess.EMPTY for i in range(BOARD_SIZE)] for i in range(BOARD_SIZE)])
#没有用到
valueBoard = np.array([[0 for i in range(BOARD_SIZE)] for i in range(BOARD_SIZE)])
neighbors = {}
diagonals = {}
def __repr__(self):
return repr((Board.baseBoardSize, Board.valueBoardSize, Board.emptyBoard, Board.baseBoard, Board.valueBoard, Board.neighbors, Board.diagonals))
@staticmethod
def printValueBoard():
"""
在命令行里打印价值棋盘
:return:
"""
show = ""
for x in range(Board.valueBoardSize):
show += "\n"
for y in range(Board.valueBoardSize):
show += str(Board.valueBoard[x][y]) + " "
print(show)
@staticmethod
def getCopyOfEmptyBoard():
return np.copy(Board.emptyBoard)
@staticmethod
def placeStone(point, color):
"""
在基础棋盘指定位置设置对应颜色
:param point: 位置, 可以为元组或者Point对象
:param color: 颜色(枚举)
:return: None
"""
if isinstance(point, Point):
point = point.toTuple()
Board.baseBoard[point] = color
@staticmethod
def placeStones(points, color):
"""
在基础棋盘指定的位置列表设置对应颜色
:param points: 位置列表, 可以为元组或者Point
:param color: 颜色(枚举)
:return: None
"""
for point in points:
if isinstance(point, Point):
point = point.toTuple()
Board.baseBoard[point] = color
@staticmethod
def baseBoardToString():
"""
在命令行里打印出基础棋盘
:return:
"""
printMap = {
Chess.WHITE: 'O',
Chess.EMPTY: '.',
Chess.BLACK: 'X',
Chess.FILL: '#',
Chess.KO: '*',
}
show = "" + str(printMap) + "\n" + " 0 1 2 3 4 5 6 7 8"
for x in range(Board.baseBoardSize):
show += '\n' + str(x) + " "
for y in range(Board.baseBoardSize):
show += printMap[Board.baseBoard[x][y]] + " "
return show
@staticmethod
def getCopyOfStaticBaseBoard():
"""
返回基础棋盘的拷贝
:return:基础棋盘的拷贝
"""
return np.copy(Board.baseBoard)
@staticmethod
def getStaticBaseBoard():
"""
:return 静态的基础棋盘
"""
return Board.baseBoard
@staticmethod
def clearBaseBoard():
"""
重新设置基础棋盘的所有点为0
"""
for i in range(Board.baseBoardSize):
for j in range(Board.baseBoardSize):
Board.baseBoard[i][j] = Chess.EMPTY
@staticmethod
def getStaticValueBoard():
"""
:return: 静态的价值棋盘
"""
return Board.valueBoard
@staticmethod
def clearValueBoard():
"""
初始化价值棋盘
:return:
"""
for i in range(Board.valueBoardSize):
for j in range(Board.valueBoardSize):
Board.valueBoard[i][j] = 0
@staticmethod
def setPiecesByPoint(point, playerColor):
"""
下棋
:param point:下棋的位置
:param playerColor:下棋的角色值为Chess.WHITE或者Chess.BLACK
:return:
"""
if isinstance(point, Point):
point = point.toTuple()
Board.baseBoard[point[0]][point[1]] = playerColor
def setPiecesByTuple(point, playColor):
Board.baseBoard[point] = playColor
@staticmethod
def setPiecesByXY(x, y, playerColor):
"""
下棋
:param x:下棋的行值
:param y: 下棋的列值
:param playerColor:下棋的角色值为Chess.WHITE或者Chess.BLACK
:return:
"""
Board.baseBoard[x][y] = playerColor