Advertisement
Chl_Snt

Tic-Tac-Toe Final

Apr 5th, 2024
793
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.75 KB | None | 0 0
  1. """
  2. Этот код представляет собой игру в крестики-нолики,
  3. написанную на Python с использованием библиотеки Pygame.
  4. """
  5.  
  6. import random
  7. import pygame
  8.  
  9. # В начале кода импортируются необходимые модули: `random` для генерации случайных
  10. # чисел и `pygame` для создания графического интерфейса пользователя.
  11.  
  12. pygame.init()  # Инициализация Pygame
  13.  
  14. field = [
  15.     ["", "", ""],
  16.     ["", "", ""],
  17.     ["", "", ""]
  18. ]
  19.  
  20. # Затем создается двумерный список `field`, который будет использоваться для хранения символов игры.
  21. # Каждая ячейка списка представляет собой строку, которая может содержать символы "x", "o"
  22. # или быть пустой.
  23.  
  24. WIDTH = 600
  25. HEIGHT = 600
  26. pygame.display.set_caption("Крестики-нолики")
  27. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  28. win = False
  29.  
  30.  
  31. # Далее устанавливаются ширина и высота игрового поля, а также создается экран.
  32.  
  33. def draw_grid():
  34.     """
  35.    Функция `draw_grid()` используется для рисования сетки на экране
  36.    """
  37.     for n in range(1, 3):
  38.         pygame.draw.line(screen, "black", (n * 200, 0), (n * 200, 600), 3)
  39.     for n in range(1, 3):
  40.         pygame.draw.line(screen, "black", (0, n * 200), (600, n * 200), 3)
  41.  
  42.  
  43. def draw_tic_tac_toe():
  44.     """
  45.    Функция `draw_tic_tac_toe()` используется для рисования крестиков и ноликов на сетке.
  46.    """
  47.     for i in range(3):
  48.         for j in range(3):
  49.             if field[i][j] == "x":
  50.                 pygame.draw.line(screen, "black", (j * 200 + 5, i * 200 + 5), (j * 200 + 195, i * 200 + 195), 3)
  51.                 pygame.draw.line(screen, "black", (j * 200 + 195, i * 200 + 5), (j * 200 + 5, i * 200 + 195), 3)
  52.             if field[i][j] == "o":
  53.                 pygame.draw.circle(screen, "black", (j * 200 + 100, i * 200 + 100), 90, 4)
  54.  
  55.  
  56. def comp_step():
  57.     """
  58.    Функция `comp_step()` используется для генерации случайного хода компьютера.
  59.    """
  60.     n = 0
  61.     for row in field:
  62.         for column in row:
  63.             if column:
  64.                 n += 1
  65.     if n < 9:
  66.         while True:
  67.             row = random.randint(0, 2)
  68.             column = random.randint(0, 2)
  69.             if field[row][column] == "":
  70.                 field[row][column] = "o"
  71.                 break
  72.             else:
  73.                 continue
  74.     else:
  75.         pygame.display.set_caption("Ничья")
  76.  
  77.  
  78. def draw_win(win):
  79.     # Функция `draw_win(win)` используется для рисования рамки вокруг выигрышных позиций.
  80.     for x, y in win:
  81.         pygame.draw.rect(screen, "green",
  82.                          (x * 200, y * 200, 200, 200))
  83.  
  84.  
  85. def win_check():
  86.     # Функция `win_check()` используется для проверки, выиграл ли игрок или компьютер.
  87.     win = []
  88.     for side in "xo":
  89.         for row in field:
  90.             if row.count(side) == 3:
  91.                 row = field.index(row)
  92.                 win = ((0, row), (1, row), (2, row))
  93.                 if side == "x":
  94.                     pygame.display.set_caption("Победил игрок")
  95.                 else:
  96.                     pygame.display.set_caption("Победил компьютер")
  97.         for column in range(3):
  98.             if field[0][column] == field[1][column] == field[2][column] == side:
  99.                 win = ((column, 0), (column, 1), (column, 2))
  100.                 if side == "x":
  101.                     pygame.display.set_caption("Победил игрок")
  102.                 else:
  103.                     pygame.display.set_caption("Победил компьютер")
  104.         if field[0][0] == field[1][1] == field[2][2] == side:
  105.             win = ((0, 0), (1, 1), (2, 2))
  106.             if side == "x":
  107.                 pygame.display.set_caption("Победил игрок")
  108.             else:
  109.                 pygame.display.set_caption("Победил компьютер")
  110.         if field[2][0] == field[1][1] == field[0][2] == side:
  111.             win = ((2, 0), (1, 1), (0, 2))
  112.             if side == "x":
  113.                 pygame.display.set_caption("Победил игрок")
  114.             else:
  115.                 pygame.display.set_caption("Победил компьютер")
  116.     return win
  117.  
  118.  
  119. """
  120. В основном цикле игры пользователь делает ход, затем компьютер делает ход.
  121. Если ход пользователя приводит к выигрышу, игра заканчивается.
  122. Если ни одна из сторон не выиграла, игра продолжается.
  123. """
  124. run = True
  125. while run:
  126.     for event in pygame.event.get():
  127.         if event.type == pygame.QUIT:
  128.             run = False
  129.         elif event.type == pygame.MOUSEBUTTONDOWN:
  130.             if not win:
  131.                 pos = pygame.mouse.get_pos()
  132.                 if field[pos[1] // 200][pos[0] // 200] == "":
  133.                     field[pos[1] // 200][pos[0] // 200] = "x"
  134.                     comp_step()
  135.  
  136.     screen.fill("white")
  137.     win = win_check()
  138.     draw_win(win)
  139.     draw_tic_tac_toe()
  140.     draw_grid()
  141.     pygame.display.flip()  # В конце каждого цикла игры экран обновляется с помощью функции `pygame.display.flip()`.
  142.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement