text: import pygame
  import sys
  import time
  
  import tictactoe as ttt
  
  pygame.init()
  size = width, height = 600, 400
  
  # Colors
  black = (0, 0, 0)
  white = (255, 255, 255)
  
  screen = pygame.display.set_mode(size)
  
  mediumFont = pygame.font.Font("OpenSans-Regular.ttf", 28)
  largeFont = pygame.font.Font("OpenSans-Regular.ttf", 40)
  moveFont = pygame.font.Font("OpenSans-Regular.ttf", 60)
  
  user = None
  board = ttt.initial_state()
  ai_turn = False
  
  while True:
  
      for event in pygame.event.get():
          if event.type == pygame.QUIT:
              sys.exit()
  
      screen.fill(black)
  
      # Let user choose a player.
      if user is None:
  
          # Draw title
          title = largeFont.render("Play Tic-Tac-Toe", True, white)
          titleRect = title.get_rect()
          titleRect.center = ((width / 2), 50)
          screen.blit(title, titleRect)
  
          # Draw buttons
          playXButton = pygame.Rect((width / 8), (height / 2), width / 4, 50)
          playX = mediumFont.render("Play as X", True, black)
          playXRect = playX.get_rect()
          playXRect.center = playXButton.center
          pygame.draw.rect(screen, white, playXButton)
          screen.blit(playX, playXRect)
  
          playOButton = pygame.Rect(5 * (width / 8), (height / 2), width / 4, 50)
          playO = mediumFont.render("Play as O", True, black)
          playORect = playO.get_rect()
          playORect.center = playOButton.center
          pygame.draw.rect(screen, white, playOButton)
          screen.blit(playO, playORect)
  
          # Check if button is clicked
          click, _, _ = pygame.mouse.get_pressed()
          if click == 1:
              mouse = pygame.mouse.get_pos()
              if playXButton.collidepoint(mouse):
                  time.sleep(0.2)
                  user = ttt.X
              elif playOButton.collidepoint(mouse):
                  time.sleep(0.2)
                  user = ttt.O
  
      else:
  
          # Draw game board
          tile_size = 80
          tile_origin = (width / 2 - (1.5 * tile_size), height / 2 - (1.5 * tile_size))
          tiles = []
          for i in range(3):
              row = []
              for j in range(3):
                  rect = pygame.Rect(
                      tile_origin[0] + j * tile_size,
                      tile_origin[1] + i * tile_size,
                      tile_size,
                      tile_size,
                  )
                  pygame.draw.rect(screen, white, rect, 3)
  
                  if board[i][j] != ttt.EMPTY:
                      move = moveFont.render(board[i][j], True, white)
                      moveRect = move.get_rect()
                      moveRect.center = rect.center
                      screen.blit(move, moveRect)
                  row.append(rect)
              tiles.append(row)
  
          game_over = ttt.terminal(board)
          player = ttt.player(board)
          # Show title
          if game_over:
              winner = ttt.winner(board)
              if winner is None:
                  title = f"Game Over: Tie."
              else:
                  title = f"Game Over: {winner} wins."
          elif user == player:
              title = f"Play as {user}"
          else:
              title = f"Computer thinking..."
          title = largeFont.render(title, True, white)
          titleRect = title.get_rect()
          titleRect.center = ((width / 2), 30)
          screen.blit(title, titleRect)
  
          # Check for AI move
          if user != player and not game_over:
              if ai_turn:
                  time.sleep(0.5)
                  move = ttt.minimax(board)
                  board = ttt.result(board, move)
                  ai_turn = False
              else:
                  ai_turn = True
  
          # Check for a user move
          click, _, _ = pygame.mouse.get_pressed()
          if click == 1 and user == player and not game_over:
              mouse = pygame.mouse.get_pos()
              for i in range(3):
                  for j in range(3):
                      if board[i][j] == ttt.EMPTY and tiles[i][j].collidepoint(mouse):
                          board = ttt.result(board, (i, j))
  
          if game_over:
              againButton = pygame.Rect(width / 3, height - 65, width / 3, 50)
              again = mediumFont.render("Play Again", True, black)
              againRect = again.get_rect()
              againRect.center = againButton.center
              pygame.draw.rect(screen, white, againButton)
              screen.blit(again, againRect)
              click, _, _ = pygame.mouse.get_pressed()
              if click == 1:
                  mouse = pygame.mouse.get_pos()
                  if againButton.collidepoint(mouse):
                      time.sleep(0.2)
                      user = None
                      board = ttt.initial_state()
                      ai_turn = False
  
      pygame.display.flip()
  