From 140ba5a3fda6a3b302233ba9cfe8b7efc29a1b0a Mon Sep 17 00:00:00 2001 From: Rh17S15 Date: Mon, 22 Sep 2025 19:43:52 +0200 Subject: [PATCH] fixed minor bugs --- MVC/minimax.py | 14 +++++++------- MVC/printer.py | 10 ++++------ MVC/tictactoe.py | 21 +++++++++++++-------- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/MVC/minimax.py b/MVC/minimax.py index ec7893c..a5b3ae2 100644 --- a/MVC/minimax.py +++ b/MVC/minimax.py @@ -30,18 +30,18 @@ class Minimax: best_score = score 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 current_field[j][k] == " "] random.seed() 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: - if best_move is None: - return 0, -1, -1 # No available moves - else: - # print('The next best move is:', best_move, "score: ", best_score) - return best_score, best_move[1], best_move[0] + # 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): # nothing 0, 0; draw 1, 1; win player1 1, 0; win player2 0, 1 diff --git a/MVC/printer.py b/MVC/printer.py index 54e1c33..5e04d73 100644 --- a/MVC/printer.py +++ b/MVC/printer.py @@ -21,11 +21,7 @@ class Printer: def playermove(self, player1, player1_char, player2_char): 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 (" - f"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 (horizontal) coordinates of your next move: ")) if next_move_x in list(range(3)): break else: @@ -66,7 +62,9 @@ class Printer: return 3 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): print(f"Player {1 if player1 else 2} ({player1_char if player1 else player2_char}) will start playing.") diff --git a/MVC/tictactoe.py b/MVC/tictactoe.py index 541d365..99b3a30 100644 --- a/MVC/tictactoe.py +++ b/MVC/tictactoe.py @@ -11,6 +11,7 @@ class Tictactoe: playerhandler = None minimax = None model = None + def __init__(self): self.printer = printer.Printer() self.playerhandler = playerhandler.Playerhandler() @@ -21,13 +22,14 @@ class Tictactoe: self.printer.printfield(self.model.field) if self.playerhandler.ai and not self.playerhandler.player1: 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.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.printer.printfield(self.model.field) - else: while True: 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) 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 # self.playerhandler.player1 = not self.playerhandler.player1 else: @@ -54,9 +57,10 @@ class Tictactoe: self.model.deletesavestate() elif win == (0, 1): self.model.deletesavestate() + self.printer.printfield(self.model.field) self.printer.endmessage(win[0], win[1], self.playerhandler.ai) - self.turn() - + exit() + # self.turn() def check_win(self, ifield, player1_char, player2_char): # nothing 0, 0; draw 1, 1; win player1 1, 0; win player2 0, 1 @@ -95,7 +99,7 @@ class Tictactoe: break if inp == "y": - self.model.loadsavestate()# self.tictactoe.checksavestateplayer() + self.model.loadsavestate() # self.tictactoe.checksavestateplayer() spacecount = 0 for j in range(0, len(self.model.field)): for k in range(0, len(self.model.field)): @@ -106,7 +110,6 @@ class Tictactoe: break # self.printer.checkai() - # inp = self.printer.invalidsavestate() # inp = self.printer.checkai() @@ -120,6 +123,8 @@ class Tictactoe: elif checkai == 3: self.printer.invalidai() + # checkai = self.printer.invalidai() + # printer.printfield(self.model.field) self.printer.startsplaying(self.playerhandler.player1, self.playerhandler.player1_char, self.playerhandler.player2_char)