# TREE BUILDER # This is meant to build the tree for the minimax algorithm to navigate #====================================================================== class Node(object): def __init__(self, depth, player, board, value = 0): self.depth = depth self.player = player self.board = board self.value = value self.children = [] self.makechildren() def makechildren(self): for i in range(0, 7): if self.depth > 0: v, new_board = self.get_value(i) self.children.append(Node(self.depth - 1, self.player*-1, new_board, v)) def get_value(self, column): new_board, valid_pos = placepiece(column, self.board, self.player) if valid_pos == True: if checkwin(new_board): value = player*maxsize else: value = 0 else: value = -player*maxsize return value, new_board #====================================================================== def placepiece(column, new_board, player): valid_pos = False for y in range(0, 5): if new_board[y][column] == 0: new_board[y][column] = player valid_pos = True break return new_board, valid_pos def checkwin(board): win = False #check horizontal for y in range(0,6): for x in range(0, 4): value = board[x][y] if board[x][y] == board[x+1][y] == board[x+2][y] == board[x+3][y] != 0: win = True # check vertical for x in range(0,5): for y in range(0, 5): value = board[x][y] if board[x][y] == board[x][y+1] == board[x][y+2] == board[x][y+3] != 0: win = True # check / diagonal for x in range(0,4): for y in range(0, 5): if board[x][y] == board[x+1][y+1] == board[x+2][y+2] == board[x+3][y+3] != 0: win = True # check \ diagonal for y in range(7,3, -1): for x in range(0,4): if board[x][y] == board[x+1][y-1] == board[x+2][y-2] == board[x+3][y-3] != 0: win = True return win def printboard(board): for j in range(0,6): for i in range(0, 7): print(" ", board[j][i], end = ""); print(""); print(("-")*50) # IMPLEMENTATION #====================================================================== depth = int(input("depth": )) player = 1 board = [[0 for x in range(8)] for y in range(7)] node = Node(depth, player, board)