Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Этот код представляет собой игру в крестики-нолики,
- написанную на Python с использованием библиотеки Pygame.
- """
- import random
- import pygame
- # В начале кода импортируются необходимые модули: `random` для генерации случайных
- # чисел и `pygame` для создания графического интерфейса пользователя.
- pygame.init() # Инициализация Pygame
- field = [
- ["", "", ""],
- ["", "", ""],
- ["", "", ""]
- ]
- # Затем создается двумерный список `field`, который будет использоваться для хранения символов игры.
- # Каждая ячейка списка представляет собой строку, которая может содержать символы "x", "o"
- # или быть пустой.
- WIDTH = 600
- HEIGHT = 600
- pygame.display.set_caption("Крестики-нолики")
- screen = pygame.display.set_mode((WIDTH, HEIGHT))
- win = False
- # Далее устанавливаются ширина и высота игрового поля, а также создается экран.
- def draw_grid():
- """
- Функция `draw_grid()` используется для рисования сетки на экране
- """
- for n in range(1, 3):
- pygame.draw.line(screen, "black", (n * 200, 0), (n * 200, 600), 3)
- for n in range(1, 3):
- pygame.draw.line(screen, "black", (0, n * 200), (600, n * 200), 3)
- def draw_tic_tac_toe():
- """
- Функция `draw_tic_tac_toe()` используется для рисования крестиков и ноликов на сетке.
- """
- for i in range(3):
- for j in range(3):
- if field[i][j] == "x":
- pygame.draw.line(screen, "black", (j * 200 + 5, i * 200 + 5), (j * 200 + 195, i * 200 + 195), 3)
- pygame.draw.line(screen, "black", (j * 200 + 195, i * 200 + 5), (j * 200 + 5, i * 200 + 195), 3)
- if field[i][j] == "o":
- pygame.draw.circle(screen, "black", (j * 200 + 100, i * 200 + 100), 90, 4)
- def comp_step():
- """
- Функция `comp_step()` используется для генерации случайного хода компьютера.
- """
- n = 0
- for row in field:
- for column in row:
- if column:
- n += 1
- if n < 9:
- while True:
- row = random.randint(0, 2)
- column = random.randint(0, 2)
- if field[row][column] == "":
- field[row][column] = "o"
- break
- else:
- continue
- else:
- pygame.display.set_caption("Ничья")
- def draw_win(win):
- # Функция `draw_win(win)` используется для рисования рамки вокруг выигрышных позиций.
- for x, y in win:
- pygame.draw.rect(screen, "green",
- (x * 200, y * 200, 200, 200))
- def win_check():
- # Функция `win_check()` используется для проверки, выиграл ли игрок или компьютер.
- win = []
- for side in "xo":
- for row in field:
- if row.count(side) == 3:
- row = field.index(row)
- win = ((0, row), (1, row), (2, row))
- if side == "x":
- pygame.display.set_caption("Победил игрок")
- else:
- pygame.display.set_caption("Победил компьютер")
- for column in range(3):
- if field[0][column] == field[1][column] == field[2][column] == side:
- win = ((column, 0), (column, 1), (column, 2))
- if side == "x":
- pygame.display.set_caption("Победил игрок")
- else:
- pygame.display.set_caption("Победил компьютер")
- if field[0][0] == field[1][1] == field[2][2] == side:
- win = ((0, 0), (1, 1), (2, 2))
- if side == "x":
- pygame.display.set_caption("Победил игрок")
- else:
- pygame.display.set_caption("Победил компьютер")
- if field[2][0] == field[1][1] == field[0][2] == side:
- win = ((2, 0), (1, 1), (0, 2))
- if side == "x":
- pygame.display.set_caption("Победил игрок")
- else:
- pygame.display.set_caption("Победил компьютер")
- return win
- """
- В основном цикле игры пользователь делает ход, затем компьютер делает ход.
- Если ход пользователя приводит к выигрышу, игра заканчивается.
- Если ни одна из сторон не выиграла, игра продолжается.
- """
- run = True
- while run:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- run = False
- elif event.type == pygame.MOUSEBUTTONDOWN:
- if not win:
- pos = pygame.mouse.get_pos()
- if field[pos[1] // 200][pos[0] // 200] == "":
- field[pos[1] // 200][pos[0] // 200] = "x"
- comp_step()
- screen.fill("white")
- win = win_check()
- draw_win(win)
- draw_tic_tac_toe()
- draw_grid()
- pygame.display.flip() # В конце каждого цикла игры экран обновляется с помощью функции `pygame.display.flip()`.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement