SHARE
    TWEET
    Hasli4

    Untitled

    Apr 18th, 2025
    472
    0
    Never
    Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
    Python 4.69 KB | None | 0 0
    1. class Cell:
    2. # Клетка, у которой есть:
    3. # - номер (1–9)
    4. # - статус (либо сам номер, либо 'X' / 'O')
    5. def __init__(self, number, status):
    6. self.number = number
    7. self.status = status
    8. class Board:
    9. # Поле из 9 клеток
    10. def __init__(self):
    11. self.cells = []
    12. for i_cell in range(1, 10):
    13. # Стартово в каждой клетке хранится её номер
    14. cell = Cell(i_cell, i_cell)
    15. self.cells.append(cell)
    16. def print_board(self):
    17. # Печатаем ×ばつ3 доску
    18. for cell in self.cells:
    19. # Если клетка не крайняя в строке, выводим с " |"
    20. if cell.number % 3 != 0:
    21. print(f' {cell.status} |', end='')
    22. else:
    23. # Крайний столбец, печатаем и перехід на новую строку
    24. print(f' {cell.status} ')
    25. print('------------')
    26. def end_of_game(self, view):
    27. # Собираем все 8 возможных линий-побед
    28. lines = [
    29. [self.cells[0].status, self.cells[1].status, self.cells[2].status],
    30. [self.cells[3].status, self.cells[4].status, self.cells[5].status],
    31. [self.cells[6].status, self.cells[7].status, self.cells[8].status],
    32. [self.cells[0].status, self.cells[3].status, self.cells[6].status],
    33. [self.cells[1].status, self.cells[4].status, self.cells[7].status],
    34. [self.cells[2].status, self.cells[5].status, self.cells[8].status],
    35. [self.cells[0].status, self.cells[4].status, self.cells[8].status],
    36. [self.cells[2].status, self.cells[4].status, self.cells[6].status],
    37. ]
    38. # 1 — победа текущего игрока
    39. if [view] * 3 in lines:
    40. return 1
    41. # 2 — ничья, если ни одной клетке не осталось числа
    42. elif all(isinstance(cell.status, str) for cell in self.cells):
    43. return 2
    44. # 0 — игра продолжается
    45. else:
    46. return 0
    47. class Player:
    48. # У игрока есть имя и знак ('X' или 'O')
    49. def __init__(self, name, view):
    50. self.name = name
    51. self.view = view
    52. def go(self, board, number):
    53. """
    54. Попытаться походить в клетку с заданным number (1–9).
    55. Вернёт True, если поход успешен, или False, если клетка уже занята / неверный номер.
    56. """
    57. # Проверяем номер на диапазон
    58. if not (1 <= number <= 9):
    59. return False
    60. # Ищем клетку с этим номером
    61. cell = board.cells[number - 1]
    62. # Если статус — число, клетка свободна
    63. if isinstance(cell.status, int):
    64. cell.status = self.view # ставим 'X' или 'O'
    65. return True
    66. else:
    67. return False # уже было 'X' или 'O'
    68. print("Добро пожаловать в игру «Крестики-нолики»!\n")
    69. # Создаём двух игроков
    70. name1 = input("Имя первого игрока (X): ")
    71. player1 = Player(name1, 'X')
    72. name2 = input("Имя второго игрока (O): ")
    73. player2 = Player(name2, 'O')
    74. # Создаём поле
    75. board = Board()
    76. current = player1 # первый ходит X
    77. result = 0
    78. # Игровой цикл
    79. while True:
    80. board.print_board()
    81. # Спрашиваем у текущего игрока номер клетки
    82. try:
    83. choice = int(input(f"{current.name} ({current.view}), выберите клетку (1–9): "))
    84. except ValueError:
    85. print("Пожалуйста, введите число от 1 до 9.")
    86. continue
    87. # Совершаем ход
    88. if not current.go(board, choice):
    89. print("Неверный ход — клетка занята или номер вне диапазона.")
    90. continue
    91. # Проверяем, не закончилась ли игра
    92. result = board.end_of_game(current.view)
    93. if result == 1:
    94. board.print_board()
    95. print(f"Победа! {current.name} ({current.view}) выиграл!")
    96. break
    97. elif result == 2:
    98. board.print_board()
    99. print("Ничья!")
    100. break
    101. # Меняем игрока
    102. current = player2 if current is player1 else player1
    103. print("Спасибо за игру!")
    Advertisement
    Add Comment
    Please, Sign In to add comment
    Public Pastes
    We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
    Not a member of Pastebin yet?
    Sign Up, it unlocks many cool features!

    AltStyle によって変換されたページ (->オリジナル) /