# 基礎棋盤 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