Advertisement
Guest User

Runner Code

a guest
May 13th, 2021
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.73 KB | None | 0 0
  1. import pygame
  2. import sys
  3. import time
  4.  
  5. import tictactoe as ttt
  6.  
  7. pygame.init()
  8. size = width, height = 600, 400
  9.  
  10. # Colors
  11. black = (0, 0, 0)
  12. white = (255, 255, 255)
  13.  
  14. screen = pygame.display.set_mode(size)
  15.  
  16. mediumFont = pygame.font.Font("OpenSans-Regular.ttf", 28)
  17. largeFont = pygame.font.Font("OpenSans-Regular.ttf", 40)
  18. moveFont = pygame.font.Font("OpenSans-Regular.ttf", 60)
  19.  
  20. user = None
  21. board = ttt.initial_state()
  22. ai_turn = False
  23.  
  24. while True:
  25.  
  26.     for event in pygame.event.get():
  27.         if event.type == pygame.QUIT:
  28.             sys.exit()
  29.  
  30.     screen.fill(black)
  31.  
  32.     # Let user choose a player.
  33.     if user is None:
  34.        
  35.         # Draw title
  36.         title = largeFont.render("Play Tic-Tac-Toe", True, white)
  37.         titleRect = title.get_rect()
  38.         titleRect.center = ((width / 2), 50)
  39.         screen.blit(title, titleRect)
  40.  
  41.         # Draw buttons
  42.         playXButton = pygame.Rect((width / 8), (height / 2), width / 4, 50)
  43.         playX = mediumFont.render("Play as X", True, black)
  44.         playXRect = playX.get_rect()
  45.         playXRect.center = playXButton.center
  46.         pygame.draw.rect(screen, white, playXButton)
  47.         screen.blit(playX, playXRect)
  48.  
  49.         playOButton = pygame.Rect(5 * (width / 8), (height / 2), width / 4, 50)
  50.         playO = mediumFont.render("Play as O", True, black)
  51.         playORect = playO.get_rect()
  52.         playORect.center = playOButton.center
  53.         pygame.draw.rect(screen, white, playOButton)
  54.         screen.blit(playO, playORect)
  55.  
  56.         # Check if button is clicked
  57.         click, _, _ = pygame.mouse.get_pressed()
  58.         if click == 1:
  59.             mouse = pygame.mouse.get_pos()
  60.             if playXButton.collidepoint(mouse):
  61.                 time.sleep(0.2)
  62.                 user = ttt.X
  63.             elif playOButton.collidepoint(mouse):
  64.                 time.sleep(0.2)
  65.                 user = ttt.O
  66.  
  67.     else:
  68.  
  69.         # Draw game board
  70.         tile_size = 80
  71.         tile_origin = (width / 2 - (1.5 * tile_size),
  72.                        height / 2 - (1.5 * tile_size))
  73.         tiles = []
  74.         for i in range(3):
  75.             row = []
  76.             for j in range(3):
  77.                 rect = pygame.Rect(
  78.                     tile_origin[0] + j * tile_size,
  79.                     tile_origin[1] + i * tile_size,
  80.                     tile_size, tile_size
  81.                 )
  82.                 pygame.draw.rect(screen, white, rect, 3)
  83.  
  84.                 if board[i][j] != ttt.EMPTY:
  85.                     move = moveFont.render(board[i][j], True, white)
  86.                     moveRect = move.get_rect()
  87.                     moveRect.center = rect.center
  88.                     screen.blit(move, moveRect)
  89.                 row.append(rect)
  90.             tiles.append(row)
  91.  
  92.         game_over = ttt.terminal(board)
  93.         player = ttt.player(board)
  94.  
  95.         # Show title
  96.         if game_over:
  97.             winner = ttt.winner(board)
  98.             if winner is None:
  99.                 title = f"Game Over: Tie."
  100.             else:
  101.                 title = f"Game Over: {winner} wins."
  102.         elif user == player:
  103.             title = f"Play as {user}"
  104.         else:
  105.             title = f"Computer thinking..."
  106.         title = largeFont.render(title, True, white)
  107.         titleRect = title.get_rect()
  108.         titleRect.center = ((width / 2), 30)
  109.         screen.blit(title, titleRect)
  110.  
  111.         # Check for AI move
  112.         if user != player and not game_over:
  113.             if ai_turn:
  114.                 time.sleep(0.5)
  115.                 move = ttt.minimax(board)
  116.                 board = ttt.result(board, move)
  117.                 ai_turn = False
  118.             else:
  119.                 ai_turn = True
  120.  
  121.         # Check for a user move
  122.         click, _, _ = pygame.mouse.get_pressed()
  123.         if click == 1 and user == player and not game_over:
  124.             mouse = pygame.mouse.get_pos()
  125.             for i in range(3):
  126.                 for j in range(3):
  127.                     if (board[i][j] == ttt.EMPTY and tiles[i][j].collidepoint(mouse)):
  128.                         board = ttt.result(board, (i, j))
  129.  
  130.         if game_over:
  131.             againButton = pygame.Rect(width / 3, height - 65, width / 3, 50)
  132.             again = mediumFont.render("Play Again", True, black)
  133.             againRect = again.get_rect()
  134.             againRect.center = againButton.center
  135.             pygame.draw.rect(screen, white, againButton)
  136.             screen.blit(again, againRect)
  137.             click, _, _ = pygame.mouse.get_pressed()
  138.             if click == 1:
  139.                 mouse = pygame.mouse.get_pos()
  140.                 if againButton.collidepoint(mouse):
  141.                     time.sleep(0.2)
  142.                     user = None
  143.                     board = ttt.initial_state()
  144.                     ai_turn = False
  145.  
  146.     pygame.display.flip()
  147.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement