from gameconstants import Cells _initial_board = [ [9,9,9,9,9,9,9,9,9,9], [9,0,0,0,0,0,0,0,0,9], [9,0,0,0,0,0,0,0,0,9], [9,0,0,0,0,0,0,0,0,9], [9,0,0,0,1,2,0,0,0,9], [9,0,0,0,2,1,0,0,0,9], [9,0,0,0,0,0,0,0,0,9], [9,0,0,0,0,0,0,0,0,9], [9,0,0,0,0,0,0,0,0,9], [9,9,9,9,9,9,9,9,9,9], ] _search_vectors = [ [ 0, -1], ## upper [ 1, -1], ## upper right [ 1, 0], ## right [ 1, 1], ## lower right [ 0, 1], ## lower [-1, 1], ## lower left [-1, 0], ## left [-1, -1] ## upper left ] _board = [] def init_gameboard() : global _board _board = [row[:] for row in _initial_board] return def get_gameboard() : return _board def get_gameboard_cell(posX, posY) : return _board[posX][posY] def _search_and_reverse(chipColor, posX, posY, reverse=False) : counter = 0 if _board[posX][posY] != Cells.BLANK : return counter for sv in _search_vectors: locatorX = posX + sv[0] locatorY = posY + sv[1] opponent = Cells.SECOND_CHIP if chipColor == Cells.FIRST_CHIP else Cells.FIRST_CHIP ## If the opponent's cells continue localCounter = 0 while _board[locatorX][locatorY] == opponent : locatorX += sv[0] locatorY += sv[1] localCounter += 1 ## sandwiched by pieces if (_board[locatorX][locatorY] == chipColor) and (localCounter != 0) : locatorX -= sv[0] locatorY -= sv[1] ## Reverse over your opponent's pieces counter += localCounter while (locatorX != posX) or (locatorY != posY) : if reverse : _board[locatorX][locatorY] = chipColor locatorX -= sv[0] locatorY -= sv[1] if (counter != 0) and reverse : _board[posX][posY] = chipColor return counter def collect_valid_positions(chipColor) : poslist=[] for y in range(1, 8): for x in range(1, 8): count = _search_and_reverse(chipColor, x, y) if count != 0 : poslist.append([x, y, count]) return poslist def put_chip(chipColor, posX, posY) : count = _search_and_reverse(chipColor, posX, posY) if count > 0 : _search_and_reverse(chipColor, posX, posY, reverse=True) return count