diff --git a/funcs/games/fourInARow.py b/funcs/games/fourInARow.py index 2d933c6..db2f24a 100644 --- a/funcs/games/fourInARow.py +++ b/funcs/games/fourInARow.py @@ -13,7 +13,8 @@ AIScores = { "enemy two in a row": -35, "enemy three in a row": -200, "enemy win": -10000, - "win": 420, + "win": 1000, + "avoid losing": 100 } rowCount = 6 @@ -156,54 +157,54 @@ def isWon(board): winDirection = "" winCoordinates = [0,0] - for line in range(len(board)): - for place in range(len(board[line])): + for row in range(len(board)): + for place in range(len(board[row])): if won == 0: - piecePlayer = board[line][place] + piecePlayer = board[row][place] if piecePlayer != 0: # Checks horizontal if place <= columnCount-4: - pieces = [board[line][place+1],board[line][place+2],board[line][place+3]] + pieces = [board[row][place+1],board[row][place+2],board[row][place+3]] else: pieces = [0] if all(x == piecePlayer for x in pieces): won = piecePlayer winDirection = "h" - winCoordinates = [line,place] + winCoordinates = [row,place] # Checks vertical - if line <= rowCount-4: - pieces = [board[line+1][place],board[line+2][place],board[line+3][place]] + if row <= rowCount-4: + pieces = [board[row+1][place],board[row+2][place],board[row+3][place]] else: pieces = [0] if all(x == piecePlayer for x in pieces): won = piecePlayer winDirection = "v" - winCoordinates = [line,place] + winCoordinates = [row,place] # Checks right diagonal - if line <= rowCount-4 and place <= columnCount-4: - pieces = [board[line+1][place+1],board[line+2][place+2],board[line+3][place+3]] + if row <= rowCount-4 and place <= columnCount-4: + pieces = [board[row+1][place+1],board[row+2][place+2],board[row+3][place+3]] else: pieces = [0] if all(x == piecePlayer for x in pieces): won = piecePlayer winDirection = "r" - winCoordinates = [line,place] + winCoordinates = [row,place] # Checks left diagonal - if line <= rowCount-4 and place >= 3: - pieces = [board[line+1][place-1],board[line+2][place-2],board[line+3][place-3]] + if row <= rowCount-4 and place >= 3: + pieces = [board[row+1][place-1],board[row+2][place-2],board[row+3][place-3]] else: pieces = [0] if all(x == piecePlayer for x in pieces): won = piecePlayer winDirection = "l" - winCoordinates = [line,place] + winCoordinates = [row,place] return won, winDirection, winCoordinates @@ -242,13 +243,13 @@ def AICalcPoints(board,player): otherPlayer = player%2+1 # Adds points for middle placement - for line in range(len(board)): - if board[line][3] == player: + for row in range(len(board)): + if board[row][3] == player: score += AIScores["middle"] # Checks horizontal - for line in range(rowCount): - rowArray = [int(i) for i in list(board[line])] + for row in range(rowCount): + rowArray = [int(i) for i in list(board[row])] for place in range(columnCount-3): window = rowArray[place:place+4] score += evaluateWindow(window,player,otherPlayer) @@ -261,15 +262,15 @@ def AICalcPoints(board,player): score += evaluateWindow(window,player,otherPlayer) # Checks right diagonal - for line in range(rowCount-3): + for row in range(rowCount-3): for place in range(columnCount-3): - window = [board[line][place],board[line+1][place+1],board[line+2][place+2],board[line+3][place+3]] + window = [board[row][place],board[row+1][place+1],board[row+2][place+2],board[row+3][place+3]] score += evaluateWindow(window,player,otherPlayer) # Checks left diagonal - for line in range(rowCount-3): + for row in range(rowCount-3): for place in range(3,columnCount): - window = [board[line][place],board[line+1][place-1],board[line+2][place-2],board[line+3][place-3]] + window = [board[row][place],board[row+1][place-1],board[row+2][place-2],board[row+3][place-3]] score += evaluateWindow(window,player,otherPlayer) @@ -307,6 +308,7 @@ def minimax(board, depth, player , originalPlayer, alpha, beta, maximizingPlayer testBoard = placeOnBoard(testBoard,player,column) if testBoard != None: evaluation = minimax(testBoard,depth-1,player%2+1,originalPlayer,alpha,beta,False) + if evaluation < -9000: evaluation += AIScores["avoid losing"] value = max(value,evaluation) alpha = max(alpha,evaluation) if beta <= alpha: @@ -319,6 +321,7 @@ def minimax(board, depth, player , originalPlayer, alpha, beta, maximizingPlayer testBoard = placeOnBoard(testBoard,player,column) if testBoard != None: evaluation = minimax(testBoard,depth-1,player%2+1,originalPlayer,alpha,beta,True) + if evaluation < -9000: evaluation += AIScores["avoid losing"] value = min(value,evaluation) beta = min(beta,evaluation) if beta <= alpha: