AI Lab Assigngment1
AI Lab Assigngment1
Q1) Develop the Tic-Tac-Toe game (with two players and GUI based) using MinMax algorithm.
Source Code
# Import necessary libraries
import tkinter as tk
from tkinter import messagebox
def create_board(self):
for i in range(3):
for j in range(3):
self.buttons[i][j] = tk.Button(self.master, text="", font=("Helvetica",
20), width=5, height=2,
command=lambda row=i, col=j:
self.on_click(row, col))
self.buttons[i][j].grid(row=i, column=j)
def create_mode_selection(self):
player_vs_player_radio = tk.Radiobutton(self.master, text="Player vs Player",
variable=self.mode,
value="player_vs_player",
command=self.reset_board)
player_vs_player_radio.grid(row=3, column=0, padx=5, pady=5)
player_vs_computer_radio = tk.Radiobutton(self.master, text="Player vs Computer",
variable=self.mode,
value="player_vs_computer",
command=self.reset_board)
player_vs_computer_radio.grid(row=3, column=1, padx=5, pady=5)
def toggle_player(self):
self.current_player = "O" if self.current_player == "X" else "X"
def check_tie(self):
return all(self.board[i][j] != "" for i in range(3) for j in range(3))
def check_game_over(self):
return self.check_winner("X") or self.check_winner("O") or self.check_tie()
def reset_board(self):
for i in range(3):
for j in range(3):
self.buttons[i][j]["text"] = ""
self.board[i][j] = ""
self.current_player = "X"
if self.mode.get() == "player_vs_computer" and self.current_player == "O":
self.computer_move()
def computer_move(self):
best_score = float("-inf")
best_move = None
for i in range(3):
for j in range(3):
if self.board[i][j] == "":
self.board[i][j] = "O"
score = self.minimax(self.board, False)
self.board[i][j] = ""
if score > best_score:
best_score = score
best_move = (i, j)
row, col = best_move
self.buttons[row][col]["text"] = "O"
self.board[row][col] = "O"
if self.check_winner("O"):
messagebox.showinfo("Winner!", "Computer wins!")
self.reset_board()
elif self.check_tie():
messagebox.showinfo("Tie!", "It's a tie!")
self.reset_board()
else:
self.toggle_player()
if is_maximizing:
best_score = float("-inf")
for i in range(3):
for j in range(3):
if board[i][j] == "":
board[i][j] = "O"
score = self.minimax(board, False)
board[i][j] = ""
best_score = max(score, best_score)
return best_score
else:
best_score = float("inf")
for i in range(3):
for j in range(3):
if board[i][j] == "":
board[i][j] = "X"
score = self.minimax(board, True)
board[i][j] = ""
best_score = min(score, best_score)
return best_score
def main():
root = tk.Tk()
game = TicTacToe(root)
root.mainloop()
if __name__ == "__main__":
main()
Output: