天天看点

计算机博弈程序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