🐛 Lots of small corrections
This commit is contained in:
@ -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:
|
||||||
|
Reference in New Issue
Block a user