Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 18.22 KB | None | 0 0
  1. import random
  2.  
  3. import pygame
  4.  
  5. SCREEN_WIDTH, SCEEN_HEIGHT = 500, 600
  6. screen = pygame.display.set_mode((SCREEN_WIDTH, SCEEN_HEIGHT))
  7. pygame.display.set_caption("Tic Tac Toe")
  8. clock = pygame.time.Clock()
  9. pygame.init()
  10. pygame.font.init()
  11. my_font = pygame.font.SysFont('impact', 35)
  12. win = my_font.render("YOU WIN ", True, (150, 150, 150))
  13. lose = my_font.render("YOU LOSE", True, (150, 150, 150))
  14. introimage = pygame.image.load('veryintroimage.png')
  15. tietext = my_font.render("Tie Game! Press space to return", True, (150, 150, 150)) #Tie message
  16. wintext = my_font.render("You win! Press space to return", True, (150, 150, 150)) #win message
  17. losetext = my_font.render("You Lose!! Press space to return", True, (150, 150, 150)) #Lose text
  18. XWin = my_font.render("X Has won the game!", True, (150, 150, 150)) #Lose text
  19. OWin = my_font.render("O Has won the game!", True, (150, 150, 150)) #Lose text
  20. choose = pygame.image.load('choose.png') #IMAGE
  21. friend = pygame.image.load('friend.png')
  22. hard = pygame.image.load('hard.png')
  23. normal = pygame.image.load('normal.png')
  24. X = pygame.image.load('x.png')
  25. O = pygame.image.load('o.png')
  26. grid = pygame.image.load('grid.png')
  27. play = pygame.image.load('play.png')#IMAGE
  28.  
  29. class Click: #Changes screens/ detects clicks
  30.     def __init__(self, Type):
  31.         self.type = Type
  32.  
  33.     def image(self, surface, name, x, y):
  34.         surface.blit(name, (x, y))
  35.  
  36.     def detectclick(self, surface, name, x, y):  # homescreen with norma
  37.         global gamestate
  38.         self.mousepos = pygame.mouse.get_pos()
  39.         self.click = pygame.mouse.get_pressed()
  40.         self.b = surface.blit(name, (x, y))
  41.         for i in range(0, 6):
  42.             if self.type == i:
  43.                 if self.b.collidepoint(self.mousepos) and self.click[0] == 1:
  44.                     gamestate = i + 1
  45.  
  46.  
  47. Turns = False
  48. class GridScreenNormal: #CREATES GRID
  49.     def __init__(self, x, y):
  50.         self.x = x
  51.         self.y = y
  52.         self.contains = ""
  53.     def draw(self, surface):
  54.         global Turns
  55.         global X
  56.         global O
  57.         pygame.draw.rect(surface, (0, 0, 0), (self.x, self.y, 133, 133), 1)
  58.         if self.contains == "O":
  59.             surface.blit(O, (self.x, self.y))
  60.         elif self.contains == "X":
  61.             surface.blit(X, (self.x, self.y))
  62.  
  63.     def check_clicked(self, mousepos):
  64.         rect = pygame.Rect(self.x, self.y, 133, 133)
  65.         if rect.collidepoint(mousepos[0], mousepos[1]):
  66.             return True
  67.         return False
  68.  
  69.     def set_contains(self, new_value):
  70.         self.contains = new_value
  71.  
  72.     def ai(self):
  73.         global Turns
  74. grid_array = [] #CREATES EACH GRID SQUARE USING THE CLASS AS A TEMPLATE
  75. for i in [0, 1, 2]:
  76.     grid_line = []
  77.     for j in [0, 1, 2]:
  78.         x = [50, 183, 316][i]
  79.         y = [166, 299, 432][j]
  80.         grid_square = GridScreenNormal(x, y)
  81.         grid_line.append(grid_square)
  82.     grid_array.append(grid_line)
  83. tie = [] #TIE LIST
  84. a = grid_array
  85. Button1 = Click(1) #BUTTON FOR CHANGING GAMESTATES
  86. Button2 = Click(2)
  87. Button3 = Click(3)
  88. Button4 = Click(4)
  89. Button5 = Click(5)
  90. gameend = True #CHECKS IF GAME ENDED
  91. gamestate = 1
  92. notie = True #If game was tie
  93. playerturn = 1
  94. running = True
  95. while running:
  96.     for event in pygame.event.get():
  97.         if event.type == pygame.QUIT:
  98.             running = False
  99.         if event.type == pygame.MOUSEBUTTONDOWN:
  100.             if gamestate == 3: #detects clicks
  101.                 mousepos = pygame.mouse.get_pos()
  102.                 if gameend == True:
  103.                     for i in range(0, 3, 1):
  104.                         for j in range(0, 3, 1):
  105.                             if grid_array[i][j].check_clicked(mousepos) == True:
  106.                                 if grid_array[i][j].contains == (""):
  107.                                     grid_array[i][j].set_contains("X")
  108.                                     tie.append(1)
  109.                                     Turns = True
  110.             if gamestate == 4 :
  111.                 mousepos = pygame.mouse.get_pos()
  112.                 if gameend == True :
  113.                     for i in range(0, 3, 1) :
  114.                         for j in range(0, 3, 1) :
  115.                             if grid_array[i][j].check_clicked(mousepos) == True :
  116.                                 if grid_array[i][j].contains == ("") :
  117.                                     grid_array[i][j].set_contains("X")
  118.                                     tie.append(1)
  119.                                     Turns = True
  120.             if gamestate == 5 :
  121.                 mousepos = pygame.mouse.get_pos()
  122.                 if gameend == True :
  123.                     if playerturn == 1:
  124.                         for i in range(0, 3, 1) :
  125.                             for j in range(0, 3, 1) :
  126.                                 if grid_array[i][j].check_clicked(mousepos) == True :
  127.                                     if grid_array[i][j].contains == ("") :
  128.                                         grid_array[i][j].set_contains("X")
  129.                                         playerturn = 2
  130.                                         tie.append(1)
  131.                     if playerturn == 2:
  132.                         for i in range(0, 3, 1) :
  133.                             for j in range(0, 3, 1) :
  134.                                 if grid_array[i][j].check_clicked(mousepos) == True :
  135.                                     if grid_array[i][j].contains == ("") :
  136.                                         playerturn = 1
  137.                                         grid_array[i][j].set_contains("O")
  138.                                         tie.append(1)
  139.     k = pygame.key.get_pressed()
  140.     if gamestate == 1: #Intro Screen/ play
  141.         Button1.image(screen, introimage, 0, 0)
  142.         Button1.image(screen, play, 170, 300)
  143.         Button1.detectclick(screen, play, 170, 300)
  144.         pygame.display.update()
  145.         clock.tick(60)
  146.     if gamestate == 2: #Menu screen with normal hard and friend
  147.         Button1.image(screen, choose, 0, 0)
  148.         Button2.image(screen, normal, 170, 250)
  149.         Button2.detectclick(screen, normal, 170, 250)
  150.         Button3.image(screen, hard, 170, 350)
  151.         Button3.detectclick(screen, hard, 170, 350)
  152.         Button4.image(screen, friend, 170, 450)
  153.         Button4.detectclick(screen, friend, 170, 450)
  154.         pygame.display.update()
  155.         clock.tick(60)
  156.     if gamestate == 3:  # NORMAL TIC TAC TOE GAME (NORMAL AI)
  157.         screen.fill((10, 10, 10))
  158.         pygame.draw.rect(screen, (0, 204, 204), (50, 166, 400, 400))
  159.         if Turns == True:  # AI plays randomly
  160.             i = random.randint(0, 2)
  161.             j = random.randint(0, 2)
  162.             if grid_array[i][j].contains == (""):
  163.                 grid_array[i][j].set_contains("O")
  164.                 tie.append(1)
  165.                 Turns = False
  166.  
  167.         x_wins = False
  168.         o_wins = False
  169.         for i in [0, 1, 2]: #CHECK IF O OR X WINS
  170.             row_is_x = True
  171.             row_is_o = True
  172.             for j in [0, 1, 2]:
  173.                 if grid_array[i][j].contains != "X":
  174.                     row_is_x = False
  175.                 if grid_array[i][j].contains != "O":
  176.                     row_is_o = False
  177.             if row_is_x:
  178.                 x_wins = True
  179.             if row_is_o:
  180.                 o_wins = True
  181.         for j in [2, 1, 0]:
  182.             row_is_y = True
  183.             row_is_oy = True
  184.             for i in [0, 1, 2]:
  185.                 if grid_array[i][j].contains != "X":
  186.                     row_is_y = False
  187.                 if grid_array[i][j].contains != "O":
  188.                     row_is_oy = False
  189.             if row_is_y:
  190.                 x_wins = True
  191.             if row_is_oy:
  192.                 o_wins = True
  193.         row_is_d = True
  194.         row_is_do = True
  195.         for i in range(0, 3):
  196.             if grid_array[i][i].contains != "X":
  197.                 row_is_d = False
  198.             if grid_array[i][i].contains != "O":
  199.                 row_is_do = False
  200.         if row_is_d:
  201.             x_wins = True
  202.         if row_is_do:
  203.             o_wins = True
  204.         row_is_dd = False
  205.         row_is_ddo = False
  206.         for i in range(0, 3):
  207.             if grid_array[i][2 - i].contains != "X":
  208.                 row_is_dd = False
  209.             if grid_array[i][2 - i].contains != "O":
  210.                 row_is_ddo = False
  211.         if row_is_dd:
  212.             x_wins = True
  213.         if row_is_ddo:
  214.             o_wins = True
  215.         if x_wins: #IF X WON CHANGE GAMESTATE AND RESET GAME
  216.             o_wins = False
  217.             Turns = False
  218.             gameend = False
  219.             screen.blit(wintext, (10, 0))
  220.             notie = False
  221.             gameend = False
  222.             if k[pygame.K_SPACE]:
  223.                 gamestate = 2
  224.                 gameend = True
  225.                 notie = True
  226.                 for i in range(0, 3):
  227.                     for j in range(0, 3):
  228.                         grid_array[i][j].contains = ""
  229.                         tie = []
  230.                         x_wins = False
  231.         if o_wins:#IF O WON CHANGE GAMESTATE AND RESET GAME
  232.             x_wins = False
  233.             Turns = False
  234.             screen.blit(losetext, (10, 0))
  235.             notie = False
  236.             gameend = False
  237.             if k[pygame.K_SPACE]:
  238.                 gamestate = 2
  239.                 gameend = True
  240.                 tie = []
  241.                 notie = True
  242.                 o_wins = False
  243.                 for i in range(0, 3):
  244.                     for j in range(0, 3):
  245.                         grid_array[i][j].contains = ""
  246.         if notie == True: #IF GAME TIED THAN RESET GAME AND TELL PLAYERS MESSAGE THAT NO  PLAYER WON
  247.             if len(tie) >= 9:
  248.                 screen.blit(tietext, (10, 0))
  249.                 if k[pygame.K_SPACE]:
  250.                     gameend = True
  251.                     notie = True
  252.                     gamestate = 2
  253.                     tie = []
  254.                     o_wins = False
  255.                     for i in range(0, 3):
  256.                         for j in range(0, 3):
  257.                             grid_array[i][j].contains = ""
  258.  
  259.         screen.blit(grid, (50, 166))
  260.         for grid_line in grid_array: #Draws
  261.             for grid_square in grid_line:
  262.                 grid_square.draw(screen)
  263.         pygame.display.update()
  264.         clock.tick(60)
  265.     if gamestate == 4: #HARD AI SCREEN
  266.         screen.fill((10, 10, 10))
  267.         pygame.draw.rect(screen, (204, 0, 0), (50, 166, 400, 400))
  268.         '''Seperation line'''
  269.  
  270.         if Turns == True:
  271.             play_i = 0
  272.             play_j = 0
  273.             for i in [0, 1, 2] :
  274.                 x_count = 0
  275.                 for j in [0, 1, 2] :
  276.                     if grid_array[i][j].contains != "X" :
  277.                         x_count = x_count + 1
  278.  
  279.                 if x_count == 2:
  280.                     play_i = i
  281.                     for j in [0, 1, 2]:
  282.                         if grid_array[i][j].contains == "":
  283.                             play_j = j
  284.                             grid_array[i][j].set_contains("O")
  285.                             Turns = False
  286.         '''
  287.        if Turns == True :  # AI plays randomly
  288.            lp = random.randint(0, 2)
  289.            lo = random.randint(0, 2)
  290.            if grid_array[i][j].contains == ("") :
  291.                grid_array[lp][lo].set_contains("O")
  292.                tie.append(1)
  293.                Turns = False
  294.        '''
  295.         '''SeperationLine'''
  296.         x_wins = False
  297.         o_wins = False
  298.         for i in [0, 1, 2] : #CHECK IF X OR O WON
  299.             row_is_x = True
  300.             row_is_o = True
  301.             for j in [0, 1, 2] :
  302.                 if grid_array[i][j].contains != "X" :
  303.                     row_is_x = False
  304.                 if grid_array[i][j].contains != "O" :
  305.                     row_is_o = False
  306.             if row_is_x :
  307.                 x_wins = True
  308.             if row_is_o :
  309.                 o_wins = True
  310.         for j in [2, 1, 0] :
  311.             row_is_y = True
  312.             row_is_oy = True
  313.             for i in [0, 1, 2] :
  314.                 if grid_array[i][j].contains != "X" :
  315.                     row_is_y = False
  316.                 if grid_array[i][j].contains != "O" :
  317.                     row_is_oy = False
  318.             if row_is_y :
  319.                 x_wins = True
  320.             if row_is_oy :
  321.                 o_wins = True
  322.         row_is_d = True
  323.         row_is_do = True
  324.         for i in range(0, 3) :
  325.             if grid_array[i][i].contains != "X" :
  326.                 row_is_d = False
  327.             if grid_array[i][i].contains != "O" :
  328.                 row_is_do = False
  329.         if row_is_d :
  330.             x_wins = True
  331.         if row_is_do :
  332.             o_wins = True
  333.         row_is_dd = False
  334.         row_is_ddo = False
  335.         for i in range(0, 3) :
  336.             if grid_array[i][2 - i].contains != "X" :
  337.                 row_is_dd = False
  338.             if grid_array[i][2 - i].contains != "O" :
  339.                 row_is_ddo = False
  340.         if row_is_dd :
  341.             x_wins = True
  342.         if row_is_ddo :
  343.             o_wins = True
  344.         if x_wins : #If X won then reset game and tell player X won
  345.             o_wins = False
  346.             Turns = False
  347.             gameend = False
  348.             screen.blit(wintext, (10, 0))
  349.             notie = False
  350.             gameend = False
  351.             if k[pygame.K_SPACE] :
  352.                 gamestate = 2
  353.                 gameend = True
  354.                 notie = True
  355.                 for i in range(0, 3) :
  356.                     for j in range(0, 3) :
  357.                         grid_array[i][j].contains = ""
  358.                         tie = []
  359.                         x_wins = False
  360.         if o_wins :#If O won then reset game and tell player X won
  361.             x_wins = False
  362.             Turns = False
  363.             screen.blit(losetext, (10, 0))
  364.             notie = False
  365.             gameend = False
  366.             if k[pygame.K_SPACE] :
  367.                 gamestate = 2
  368.                 gameend = True
  369.                 tie = []
  370.                 notie = True
  371.                 o_wins = False
  372.                 for i in range(0, 3) :
  373.                     for j in range(0, 3) :
  374.                         grid_array[i][j].contains = ""
  375.         if notie == True : #IF GAME TIE THAN RESET GAME AND TELL PLAYERS NO WINNERS
  376.             if len(tie) >= 9 :
  377.                 screen.blit(tietext, (10, 0))
  378.                 if k[pygame.K_SPACE] :
  379.                     gameend = True
  380.                     notie = True
  381.                     gamestate = 2
  382.                     tie = []
  383.                     o_wins = False
  384.                     for i in range(0, 3) :
  385.                         for j in range(0, 3) :
  386.                             grid_array[i][j].contains = ""
  387.  
  388.         screen.blit(grid, (50, 166))
  389.         for grid_line in grid_array :
  390.             for grid_square in grid_line :
  391.                 grid_square.draw(screen)
  392.         pygame.display.update()
  393.         clock.tick(60)
  394.     if gamestate == 5: #NORMAL GRID SCREEN/ PLAYER VS PLAYER
  395.         screen.fill((10, 10, 10))
  396.         pygame.draw.rect(screen, (0, 204, 0), (50, 166, 400, 400))
  397.         x_wins = False
  398.         o_wins = False
  399.         for i in [0, 1, 2] : #CHECKS WHO WON
  400.             row_is_x = True
  401.             row_is_o = True
  402.             for j in [0, 1, 2] :
  403.                 if grid_array[i][j].contains != "X" :
  404.                     row_is_x = False
  405.                 if grid_array[i][j].contains != "O" :
  406.                     row_is_o = False
  407.             if row_is_x :
  408.                 x_wins = True
  409.             if row_is_o :
  410.                 o_wins = True
  411.         for j in [2, 1, 0] :
  412.             row_is_y = True
  413.             row_is_oy = True
  414.             for i in [0, 1, 2] :
  415.                 if grid_array[i][j].contains != "X" :
  416.                     row_is_y = False
  417.                 if grid_array[i][j].contains != "O" :
  418.                     row_is_oy = False
  419.             if row_is_y :
  420.                 x_wins = True
  421.             if row_is_oy :
  422.                 o_wins = True
  423.         row_is_d = True
  424.         row_is_do = True
  425.         for i in range(0, 3) :
  426.             if grid_array[i][i].contains != "X" :
  427.                 row_is_d = False
  428.             if grid_array[i][i].contains != "O" :
  429.                 row_is_do = False
  430.         if row_is_d :
  431.             x_wins = True
  432.         if row_is_do :
  433.             o_wins = True
  434.         row_is_dd = False
  435.         row_is_ddo = False
  436.         for i in range(0, 3) :
  437.             if grid_array[i][2 - i].contains != "X" :
  438.                 row_is_dd = False
  439.             if grid_array[i][2 - i].contains != "O" :
  440.                 row_is_ddo = False
  441.         if row_is_dd :
  442.             x_wins = True
  443.         if row_is_ddo :
  444.             o_wins = True
  445.         if x_wins : #IF X WON THEN RESET
  446.             o_wins = False
  447.             Turns = False
  448.             gameend = False
  449.             screen.blit(XWin, (10, 0))
  450.             notie = False
  451.             gameend = False
  452.             if k[pygame.K_SPACE] :
  453.                 gamestate = 2
  454.                 gameend = True
  455.                 notie = True
  456.                 for i in range(0, 3) :
  457.                     for j in range(0, 3) :
  458.                         grid_array[i][j].contains = ""
  459.                         tie = []
  460.                         x_wins = False
  461.         if o_wins : #if O won then reset
  462.             x_wins = False
  463.             Turns = False
  464.             screen.blit(OWin, (10, 0))
  465.             notie = False
  466.             gameend = False
  467.             if k[pygame.K_SPACE] :
  468.                 gamestate = 2
  469.                 gameend = True
  470.                 tie = []
  471.                 notie = True
  472.                 o_wins = False
  473.                 for i in range(0, 3) :
  474.                     for j in range(0, 3) :
  475.                         grid_array[i][j].contains = ""
  476.         if notie == True : #if tie than reset
  477.             if len(tie) >= 9 :
  478.                 screen.blit(tietext, (10, 0))
  479.                 if k[pygame.K_SPACE] :
  480.                     gameend = True
  481.                     notie = True
  482.                     gamestate = 2
  483.                     tie = []
  484.                     o_wins = False
  485.                     for i in range(0, 3) :
  486.                         for j in range(0, 3) :
  487.                             grid_array[i][j].contains = ""
  488.  
  489.         screen.blit(grid, (50, 166))
  490.         for grid_line in grid_array :
  491.             for grid_square in grid_line :
  492.                 grid_square.draw(screen)
  493.         pygame.display.update()
  494.         clock.tick(60)
  495. pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement