天天看點

計算機博弈程式python_2020計算機博弈大賽第三天 程式資料結構

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