fixed minor bugs
This commit is contained in:
@@ -30,18 +30,18 @@ class Minimax:
|
|||||||
best_score = score
|
best_score = score
|
||||||
best_move = j, k
|
best_move = j, k
|
||||||
|
|
||||||
if best_score == 0 and best_move == (0, 0): # is None:
|
'''if best_score == 0 and best_move == (0, 0): # is None:
|
||||||
empty_cells = [(j, k) for j in range(0, len(current_field), 2) for k in range(0, len(current_field), 2) if
|
empty_cells = [(j, k) for j in range(0, len(current_field), 2) for k in range(0, len(current_field), 2) if
|
||||||
current_field[j][k] == " "]
|
current_field[j][k] == " "]
|
||||||
random.seed()
|
random.seed()
|
||||||
random_move = random.choice(empty_cells)
|
random_move = random.choice(empty_cells)
|
||||||
return 0, random_move[0], random_move[1]
|
return 0, random_move[0], random_move[1]'''
|
||||||
|
# else:
|
||||||
|
if best_move is None:
|
||||||
|
return 0, -1, -1 # No available moves
|
||||||
else:
|
else:
|
||||||
if best_move is None:
|
# print('The next best move is:', best_move, "score: ", best_score)
|
||||||
return 0, -1, -1 # No available moves
|
return best_score, best_move[1], best_move[0]
|
||||||
else:
|
|
||||||
# print('The next best move is:', best_move, "score: ", best_score)
|
|
||||||
return best_score, best_move[1], best_move[0]
|
|
||||||
|
|
||||||
def check_win(self, ifield, player1_char, player2_char):
|
def check_win(self, ifield, player1_char, player2_char):
|
||||||
# nothing 0, 0; draw 1, 1; win player1 1, 0; win player2 0, 1
|
# nothing 0, 0; draw 1, 1; win player1 1, 0; win player2 0, 1
|
||||||
|
|||||||
@@ -21,11 +21,7 @@ class Printer:
|
|||||||
|
|
||||||
def playermove(self, player1, player1_char, player2_char):
|
def playermove(self, player1, player1_char, player2_char):
|
||||||
while True:
|
while True:
|
||||||
|
next_move_x = int(input(f"Player {1 if player1 else 2} ({player1_char if player1 else player2_char}), please choose the x (horizontal) coordinates of your next move: "))
|
||||||
|
|
||||||
next_move_x = int(input(
|
|
||||||
f"Player {1 if player1 else 2} ({player1_char if player1 else player2_char}), please choose the x ("
|
|
||||||
f"horizontal) coordinates of your next move: "))
|
|
||||||
if next_move_x in list(range(3)):
|
if next_move_x in list(range(3)):
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
@@ -66,7 +62,9 @@ class Printer:
|
|||||||
return 3
|
return 3
|
||||||
|
|
||||||
def invalidai(self):
|
def invalidai(self):
|
||||||
return input("That was not a valid input. Type 1/2 if you want to play against AI or local multiplayer: ")
|
print("That was not a valid input. Please try again. ")
|
||||||
|
# return 0
|
||||||
|
# return input("That was not a valid input. Type 1/2 if you want to play against AI or local multiplayer: ")
|
||||||
|
|
||||||
def startsplaying(self, player1, player1_char, player2_char):
|
def startsplaying(self, player1, player1_char, player2_char):
|
||||||
print(f"Player {1 if player1 else 2} ({player1_char if player1 else player2_char}) will start playing.")
|
print(f"Player {1 if player1 else 2} ({player1_char if player1 else player2_char}) will start playing.")
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ class Tictactoe:
|
|||||||
playerhandler = None
|
playerhandler = None
|
||||||
minimax = None
|
minimax = None
|
||||||
model = None
|
model = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.printer = printer.Printer()
|
self.printer = printer.Printer()
|
||||||
self.playerhandler = playerhandler.Playerhandler()
|
self.playerhandler = playerhandler.Playerhandler()
|
||||||
@@ -21,13 +22,14 @@ class Tictactoe:
|
|||||||
self.printer.printfield(self.model.field)
|
self.printer.printfield(self.model.field)
|
||||||
if self.playerhandler.ai and not self.playerhandler.player1:
|
if self.playerhandler.ai and not self.playerhandler.player1:
|
||||||
self.printer.aicalc()
|
self.printer.aicalc()
|
||||||
best_move = self.minimax.minimax(self.model.field, not self.playerhandler.player1, self.playerhandler.player1_char, self.playerhandler.player2_char)
|
best_move = self.minimax.minimax(self.model.field, not self.playerhandler.player1,
|
||||||
|
self.playerhandler.player1_char, self.playerhandler.player2_char)
|
||||||
self.printer.aimoved(best_move)
|
self.printer.aimoved(best_move)
|
||||||
self.model.do_move(best_move[1]//2, best_move[2]//2, self.playerhandler.player1, self.playerhandler.player1_char,
|
self.model.do_move(best_move[1] // 2, best_move[2] // 2, self.playerhandler.player1,
|
||||||
|
self.playerhandler.player1_char,
|
||||||
self.playerhandler.player2_char)
|
self.playerhandler.player2_char)
|
||||||
# self.printer.printfield(self.model.field)
|
# self.printer.printfield(self.model.field)
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
while True:
|
while True:
|
||||||
nextmove = self.printer.playermove(self.playerhandler.player1, self.playerhandler.player1_char,
|
nextmove = self.printer.playermove(self.playerhandler.player1, self.playerhandler.player1_char,
|
||||||
@@ -36,7 +38,8 @@ class Tictactoe:
|
|||||||
# return self.model.check_move(next_move_x, next_move_y, True)
|
# return self.model.check_move(next_move_x, next_move_y, True)
|
||||||
|
|
||||||
if self.model.check_move(next_move_x, next_move_y, True):
|
if self.model.check_move(next_move_x, next_move_y, True):
|
||||||
self.model.do_move(next_move_x, next_move_y, self.playerhandler.player1, self.playerhandler.player1_char, self.playerhandler.player2_char)
|
self.model.do_move(next_move_x, next_move_y, self.playerhandler.player1,
|
||||||
|
self.playerhandler.player1_char, self.playerhandler.player2_char)
|
||||||
break
|
break
|
||||||
# self.playerhandler.player1 = not self.playerhandler.player1
|
# self.playerhandler.player1 = not self.playerhandler.player1
|
||||||
else:
|
else:
|
||||||
@@ -54,9 +57,10 @@ class Tictactoe:
|
|||||||
self.model.deletesavestate()
|
self.model.deletesavestate()
|
||||||
elif win == (0, 1):
|
elif win == (0, 1):
|
||||||
self.model.deletesavestate()
|
self.model.deletesavestate()
|
||||||
|
self.printer.printfield(self.model.field)
|
||||||
self.printer.endmessage(win[0], win[1], self.playerhandler.ai)
|
self.printer.endmessage(win[0], win[1], self.playerhandler.ai)
|
||||||
self.turn()
|
exit()
|
||||||
|
# self.turn()
|
||||||
|
|
||||||
def check_win(self, ifield, player1_char, player2_char):
|
def check_win(self, ifield, player1_char, player2_char):
|
||||||
# nothing 0, 0; draw 1, 1; win player1 1, 0; win player2 0, 1
|
# nothing 0, 0; draw 1, 1; win player1 1, 0; win player2 0, 1
|
||||||
@@ -95,7 +99,7 @@ class Tictactoe:
|
|||||||
break
|
break
|
||||||
|
|
||||||
if inp == "y":
|
if inp == "y":
|
||||||
self.model.loadsavestate()# self.tictactoe.checksavestateplayer()
|
self.model.loadsavestate() # self.tictactoe.checksavestateplayer()
|
||||||
spacecount = 0
|
spacecount = 0
|
||||||
for j in range(0, len(self.model.field)):
|
for j in range(0, len(self.model.field)):
|
||||||
for k in range(0, len(self.model.field)):
|
for k in range(0, len(self.model.field)):
|
||||||
@@ -106,7 +110,6 @@ class Tictactoe:
|
|||||||
break
|
break
|
||||||
# self.printer.checkai()
|
# self.printer.checkai()
|
||||||
|
|
||||||
|
|
||||||
# inp = self.printer.invalidsavestate()
|
# inp = self.printer.invalidsavestate()
|
||||||
|
|
||||||
# inp = self.printer.checkai()
|
# inp = self.printer.checkai()
|
||||||
@@ -120,6 +123,8 @@ class Tictactoe:
|
|||||||
elif checkai == 3:
|
elif checkai == 3:
|
||||||
self.printer.invalidai()
|
self.printer.invalidai()
|
||||||
|
|
||||||
|
# checkai = self.printer.invalidai()
|
||||||
|
|
||||||
# printer.printfield(self.model.field)
|
# printer.printfield(self.model.field)
|
||||||
self.printer.startsplaying(self.playerhandler.player1, self.playerhandler.player1_char,
|
self.printer.startsplaying(self.playerhandler.player1, self.playerhandler.player1_char,
|
||||||
self.playerhandler.player2_char)
|
self.playerhandler.player2_char)
|
||||||
|
|||||||
Reference in New Issue
Block a user