🐛 Lots of small corrections

This commit is contained in:
jona605a
2020-08-04 19:48:23 +02:00
parent 5199603417
commit 1b58668f23

View File

@ -43,7 +43,7 @@ def parseHex(command, channel, user):
# Placing a piece # Placing a piece
elif commands[0] == "place": elif commands[0] == "place":
try: try:
return placePiece(channel,int(commands[1]),commands[2]) return placeHex(channel,int(commands[1]),commands[2])
except: except:
return "I didn't get that. To place a piece use \"!hex place [player number] [position]\". A valid position is e.g. \"e2\".", False, False, False, False return "I didn't get that. To place a piece use \"!hex place [player number] [position]\". A valid position is e.g. \"e2\".", False, False, False, False
else: else:
@ -136,7 +136,7 @@ def placeHex(channel : str,player : int,position : str):
message = data["hex games"][channel]["players"][won-1]+" won!" message = data["hex games"][channel]["players"][won-1]+" won!"
if data["hex games"][channel]["players"][won-1] != "Gwendolyn": if data["hex games"][channel]["players"][won-1] != "Gwendolyn":
winAmount = data["hex games"][channel][difficulty]^2+5 winAmount = data["hex games"][channel]["difficulty"]^2+5
message += " Adding "+str(winAmount)+" GwendoBucks to their account." message += " Adding "+str(winAmount)+" GwendoBucks to their account."
else: else:
gameWon = False gameWon = False
@ -196,7 +196,7 @@ def isHexWon(board):
piecePlayer = board[row][place] piecePlayer = board[row][place]
if piecePlayer != 0: if piecePlayer != 0:
# Checks horizontal # Checks horizontal
if place <= columnCount-4: if place <= boardWidth-4:
pieces = [board[row][place+1],board[row][place+2],board[row][place+3]] pieces = [board[row][place+1],board[row][place+2],board[row][place+3]]
else: else:
pieces = [0] pieces = [0]
@ -207,7 +207,7 @@ def isHexWon(board):
winCoordinates = [row,place] winCoordinates = [row,place]
# Checks vertical # Checks vertical
if row <= rowCount-4: if row <= boardWidth-4:
pieces = [board[row+1][place],board[row+2][place],board[row+3][place]] pieces = [board[row+1][place],board[row+2][place],board[row+3][place]]
else: else:
pieces = [0] pieces = [0]
@ -218,7 +218,7 @@ def isHexWon(board):
winCoordinates = [row,place] winCoordinates = [row,place]
# Checks right diagonal # Checks right diagonal
if row <= rowCount-4 and place <= columnCount-4: if row <= boardWidth-4 and place <= boardWidth-4:
pieces = [board[row+1][place+1],board[row+2][place+2],board[row+3][place+3]] pieces = [board[row+1][place+1],board[row+2][place+2],board[row+3][place+3]]
else: else:
pieces = [0] pieces = [0]
@ -229,7 +229,7 @@ def isHexWon(board):
winCoordinates = [row,place] winCoordinates = [row,place]
# Checks left diagonal # Checks left diagonal
if row <= rowCount-4 and place >= 3: if row <= boardWidth-4 and place >= 3:
pieces = [board[row+1][place-1],board[row+2][place-2],board[row+3][place-3]] pieces = [board[row+1][place-1],board[row+2][place-2],board[row+3][place-3]]
else: else:
pieces = [0] pieces = [0]
@ -240,7 +240,7 @@ def isHexWon(board):
winCoordinates = [row,place] winCoordinates = [row,place]
return won, winDirection, winCoordinates return won, winningPieces
# Plays as the AI # Plays as the AI
def hexAI(channel): def hexAI(channel):
@ -253,11 +253,11 @@ def hexAI(channel):
difficulty = data["hex games"][channel]["difficulty"] difficulty = data["hex games"][channel]["difficulty"]
scores = [-math.inf,-math.inf,-math.inf,-math.inf,-math.inf,-math.inf,-math.inf] scores = [-math.inf,-math.inf,-math.inf,-math.inf,-math.inf,-math.inf,-math.inf]
for column in range(0,columnCount): for column in range(0,boardWidth):
testBoard = copy.deepcopy(board) testBoard = copy.deepcopy(board)
testBoard = placeOnBoard(testBoard,player,column) testBoard = placeOnHexBoard(testBoard,player,column)
if testBoard != None: if testBoard != None:
scores[column] = minimax(testBoard,difficulty,player%2+1,player,-math.inf,math.inf,False) scores[column] = minimaxHex(testBoard,difficulty,player%2+1,player,-math.inf,math.inf,False)
logThis("Best score for column "+str(column)+" is "+str(scores[column])) logThis("Best score for column "+str(column)+" is "+str(scores[column]))
possibleScores = scores.copy() possibleScores = scores.copy()
@ -269,7 +269,7 @@ def hexAI(channel):
indices = [i for i, x in enumerate(scores) if x == highest_score] indices = [i for i, x in enumerate(scores) if x == highest_score]
placement = random.choice(indices) placement = random.choice(indices)
return placePiece(channel,player,placement) return placeHex(channel,player,placement)
# Calculates points for a board # Calculates points for a board
def AICalcHexPoints(board,player): def AICalcHexPoints(board,player):
@ -279,31 +279,31 @@ def AICalcHexPoints(board,player):
# Adds points for middle placement # Adds points for middle placement
for row in range(len(board)): for row in range(len(board)):
if board[row][3] == player: if board[row][3] == player:
score += AIScores["middle"] score += AIScoresHex["middle"]
# Checks horizontal # Checks horizontal
for row in range(rowCount): for row in range(boardWidth):
rowArray = [int(i) for i in list(board[row])] rowArray = [int(i) for i in list(board[row])]
for place in range(columnCount-3): for place in range(boardWidth-3):
window = rowArray[place:place+4] window = rowArray[place:place+4]
score += evaluateWindow(window,player,otherPlayer) score += evaluateWindow(window,player,otherPlayer)
# Checks Vertical # Checks Vertical
for column in range(columnCount): for column in range(boardWidth):
columnArray = [int(i[column]) for i in list(board)] columnArray = [int(i[column]) for i in list(board)]
for place in range(rowCount-3): for place in range(boardWidth-3):
window = columnArray[place:place+4] window = columnArray[place:place+4]
score += evaluateWindow(window,player,otherPlayer) score += evaluateWindow(window,player,otherPlayer)
# Checks right diagonal # Checks right diagonal
for row in range(rowCount-3): for row in range(boardWidth-3):
for place in range(columnCount-3): for place in range(boardWidth-3):
window = [board[row][place],board[row+1][place+1],board[row+2][place+2],board[row+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) score += evaluateWindow(window,player,otherPlayer)
# Checks left diagonal # Checks left diagonal
for row in range(rowCount-3): for row in range(boardWidth-3):
for place in range(3,columnCount): for place in range(3,boardWidth):
window = [board[row][place],board[row+1][place-1],board[row+2][place-2],board[row+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) score += evaluateWindow(window,player,otherPlayer)
@ -313,20 +313,20 @@ def AICalcHexPoints(board,player):
## Add points if AI wins ## Add points if AI wins
#if won == player: #if won == player:
# score += AIScores["win"] # score += AIScoresHex["win"]
return score return score
#def evaluateWindow(window,player,otherPlayer): #def evaluateWindow(window,player,otherPlayer):
# if window.count(player) == 4: # if window.count(player) == 4:
# return AIScores["win"] # return AIScoresHex["win"]
# elif window.count(player) == 3 and window.count(0) == 1: # elif window.count(player) == 3 and window.count(0) == 1:
# return AIScores["three in a row"] # return AIScoresHex["three in a row"]
# elif window.count(player) == 2 and window.count(0) == 2: # elif window.count(player) == 2 and window.count(0) == 2:
# return AIScores["two in a row"] # return AIScoresHex["two in a row"]
# elif window.count(otherPlayer) == 4: # elif window.count(otherPlayer) == 4:
# return AIScores["enemy win"] # return AIScoresHex["enemy win"]
# else: # else:
# return 0 # return 0
@ -338,7 +338,7 @@ def minimaxHex(board, depth, player , originalPlayer, alpha, beta, maximizingPla
return points return points
if maximizingPlayer: if maximizingPlayer:
value = -math.inf value = -math.inf
for column in range(0,columnCount): for column in range(0,boardWidth):
testBoard = copy.deepcopy(board) testBoard = copy.deepcopy(board)
testBoard = placeOnHexBoard(testBoard,player,column) testBoard = placeOnHexBoard(testBoard,player,column)
if testBoard != None: if testBoard != None:
@ -351,7 +351,7 @@ def minimaxHex(board, depth, player , originalPlayer, alpha, beta, maximizingPla
return value return value
else: else:
value = math.inf value = math.inf
for column in range(0,columnCount): for column in range(0,boardWidth):
testBoard = copy.deepcopy(board) testBoard = copy.deepcopy(board)
testBoard = placeOnHexBoard(testBoard,player,column) testBoard = placeOnHexBoard(testBoard,player,column)
if testBoard != None: if testBoard != None: