issack_desnuts

Tictactoe python replit

Sep 9th, 2023
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.53 KB | None | 0 0
  1. import tkinter as tk
  2. import random
  3.  
  4. def check_win(board, player):
  5. for row in board:
  6. if all(cell == player for cell in row):
  7. return True
  8.  
  9. for col in range(3):
  10. if all(board[row][col] == player for row in range(3)):
  11. return True
  12.  
  13. if all(board[i][i] == player for i in range(3)) or all(board[i][2 - i] == player for i in range(3)):
  14. return True
  15.  
  16. return False
  17.  
  18. def is_full(board):
  19. return all(cell != "" for row in board for cell in row)
  20.  
  21. def minimax(board, depth, is_maximizing):
  22. if check_win(board, "X"):
  23. return -1
  24. if check_win(board, "O"):
  25. return 1
  26. if is_full(board):
  27. return 0
  28.  
  29. if is_maximizing:
  30. best_score = -float("inf")
  31. for row in range(3):
  32. for col in range(3):
  33. if board[row][col] == "":
  34. board[row][col] = "O"
  35. score = minimax(board, depth + 1, False)
  36. board[row][col] = ""
  37. best_score = max(score, best_score)
  38. return best_score
  39. else:
  40. best_score = float("inf")
  41. for row in range(3):
  42. for col in range(3):
  43. if board[row][col] == "":
  44. board[row][col] = "X"
  45. score = minimax(board, depth + 1, True)
  46. board[row][col] = ""
  47. best_score = min(score, best_score)
  48. return best_score
  49.  
  50. def find_best_move(board):
  51. best_move = None
  52. best_score = -float("inf")
  53. for row in range(3):
  54. for col in range(3):
  55. if board[row][col] == "":
  56. board[row][col] = "O"
  57. score = minimax(board, 0, False)
  58. board[row][col] = ""
  59. if score > best_score:
  60. best_score = score
  61. best_move = (row, col)
  62. return best_move
  63.  
  64. def on_click(event):
  65. global current_player, game_over, board
  66.  
  67. if not game_over and current_player == "X":
  68. row = event.y // cell_size
  69. col = event.x // cell_size
  70.  
  71. if board[row][col] == "":
  72. board[row][col] = "X"
  73. board_canvas.create_text(col * cell_size + cell_size // 2, row * cell_size + cell_size // 2, text="X", font=("Helvetica", 40))
  74. if check_win(board, "X"):
  75. label.config(text="You win!")
  76. game_over = True
  77. elif is_full(board):
  78. label.config(text="It's a tie!")
  79. game_over = True
  80. else:
  81. current_player = "O"
  82. ai_move()
  83.  
  84.  
  85. def ai_move():
  86. global current_player, game_over, board
  87.  
  88. if not game_over and current_player == "O":
  89. best_move = find_best_move(board)
  90. if best_move is not None:
  91. row, col = best_move
  92. board[row][col] = "O"
  93. board_canvas.create_text(col * cell_size + cell_size // 2, row * cell_size + cell_size // 2, text="O", font=("Helvetica", 40))
  94. if check_win(board, "O"):
  95. label.config(text="AI wins!")
  96. game_over = True
  97. elif is_full(board):
  98. label.config(text="It's a tie!")
  99. game_over = True
  100. else:
  101. current_player = "X"
  102.  
  103.  
  104. def start_game():
  105. global current_player, game_over, board
  106. board_canvas.delete("all")
  107. board_canvas.create_line(cell_size, 0, cell_size, canvas_height, fill="black", width=2)
  108. board_canvas.create_line(2 * cell_size, 0, 2 * cell_size, canvas_height, fill="black", width=2)
  109. board_canvas.create_line(0, cell_size, canvas_width, cell_size, fill="black", width=2)
  110. board_canvas.create_line(0, 2 * cell_size, canvas_width, 2 * cell_size, fill="black", width=2)
  111. board = [["" for _ in range(3)] for _ in range(3)]
  112. current_player = random.choice(["X", "O"])
  113. game_over = False
  114. if current_player == "O":
  115. ai_move()
  116. label.config(text=f"Player {current_player}'s turn")
  117.  
  118. root = tk.Tk()
  119. root.title("Tic-Tac-Toe")
  120.  
  121. canvas_width = 300
  122. canvas_height = 300
  123. cell_size = canvas_width // 3
  124.  
  125. board_canvas = tk.Canvas(root, width=canvas_width, height=canvas_height)
  126. board_canvas.pack()
  127.  
  128. start_button = tk.Button(root, text="Start New Game", command=start_game)
  129. start_button.pack()
  130.  
  131. board = [["" for _ in range(3)] for _ in range(3)]
  132. current_player = "X"
  133. game_over = False
  134.  
  135. board_canvas.bind("<Button-1>", on_click)
  136.  
  137. label = tk.Label(root, text="", font=("Helvetica", 16))
  138. label.pack()
  139.  
  140. start_game()
  141. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment