Давайте створимо просту гру Tic Tac Toe на Python. Це допоможе вам вибудувати логіку гри та зрозуміти, як структурувати код.
Ігри – одна з розваг, які є у людей. Ми можемо знайти різні типи ігор в Інтернеті, на мобільних пристроях, комп’ютерах тощо. Зараз ми тут не для того, щоб створити одну з таких важких ігор. Ми збираємося створити гру CLI хрестики-нулики за допомогою Python.
Якщо ви не знайомі з Tic Tac Toe, пограйте в нього візуально тут зрозуміти. Не хвилюйтеся, навіть якщо ви цього не розумієте, ми це побачимо.
Хрестики-нулики
Підручник поділений на три різні розділи. У першому розділі ви дізнаєтеся, як грати в гру «хрестики-нулики». Після цього ми побачимо алгоритм, який допоможе нам придумати логіку гри. Нарешті ми побачимо структурований код і його пояснення.
Ви можете пропустити перший розділ, якщо ви вже знаєте, як грати в Tic Tac Toe.
Отже, без зайвих слів, давайте зануримося в наш перший розділ.
Гра в Tic Tac Toe
У грі буде двоє гравців. Два знаки представляють кожного гравця. У грі використовуються загальні знаки X і O. Нарешті, буде дошка з 9 коробками.
Подивіться візуально на дошку для хрестиків-нуликів.
Дошка Tic Tac Toe
Геймплей буде наступним.
- Спочатку один користувач розмістить свій знак в одному з доступних порожніх полів.
- Далі другий користувач розмістить свій знак в одному з доступних порожніх полів.
- Мета гравців — розмістити свої відповідні знаки повністю по рядках, по стовпцях або по діагоналі.
- Гра триває до тих пір, поки гравець не виграє гру або поки вона не завершиться внічию, заповнивши всі поля без виграшного матчу.
Давайте подивимося на деякі ігрові процеси.
Tic Tac Toe Win Геймплей
Гравець X виграє гру у наведеному вище ігровому процесі. Усі поля по діагоналі заповніть знаками X. Отже, відповідний гравець виграє гру.
Всього є 8 способів розставити один і той же знак і виграти гру. Давайте подивимося всі 8 схем, які можуть виграти гру.
Хрестики-нулики Переможні композиції
І, нарешті, нічия заповнює дошку без жодного виграшного розташування. Сподіваюся, ви тепер розумієте, як грати в хрестики-нулики.
Тепер для вас час гри. Ви можете йти тут і грайте в неї, щоб повністю зрозуміти ігровий процес. Залиште це, якщо ви його вже отримали.
Тепер настав час перемістити розділ алгоритму.
Алгоритм
Зараз ми обговоримо алгоритм написання коду. Цей алгоритм допоможе вам написати код будь-якою мовою програмування на ваш вибір. Давайте подивимося, як це робиться.
- Створіть дошку за допомогою 2-вимірного масиву та ініціалізуйте кожен елемент як порожній.
- Ви можете зобразити порожнє за допомогою будь-якого символу. Тут ми будемо використовувати дефіс. “-“.
- Напишіть функцію, щоб перевірити, заповнена дошка чи ні.
- Ітерація по дошці та повернення false, якщо дошка містить порожній знак, або повернення true.
- Напишіть функцію, щоб перевірити, виграв гравець чи ні.
- Ми повинні перевірити всі можливості, які ми обговорювали в попередньому розділі.
- Перевірте всі рядки, стовпці та дві діагоналі.
- Напишіть функцію для показу дошки, оскільки ми будемо показувати дошку кілька разів користувачам під час гри.
- Напишіть функцію для запуску гри.
- Виберіть перший хід гравця випадковим чином.
- Напишіть нескінченний цикл, який переривається, коли гра закінчується (або перемога, або нічия).
- Покажіть дошку користувачеві, щоб вибрати місце для наступного ходу.
- Попросіть користувача ввести номер рядка та стовпця.
- Оновіть місце відповідним знаком гравця.
- Перевірте, чи виграв гру поточний гравець чи ні.
- Якщо поточний гравець виграв гру, надрукуйте повідомлення про виграш і розірвіть нескінченний цикл.
- Далі перевірте, заповнена дошка чи ні.
- Якщо поле заповнене, роздрукуйте повідомлення про розіграш і розірвіть нескінченний цикл.
- Нарешті, покажіть користувачеві остаточний вигляд дошки.
Можливо, ви зможете візуалізувати те, що відбувається. Не хвилюйтеся, навіть якщо ви не до кінця це зрозуміли. Ви отримаєте більше ясності, коли побачите код.
Отже, перейдемо до розділу коду. Я припускаю, що на вашому ПК встановлено Python, щоб спробувати код.
Код
Перегляньте наведений нижче код.
import random class TicTacToe: def __init__(self): self.board = [] def create_board(self): for i in range(3): row = [] for j in range(3): row.append('-') self.board.append(row) def get_random_first_player(self): return random.randint(0, 1) def fix_spot(self, row, col, player): self.board[row][col] = player def is_player_win(self, player): win = None n = len(self.board) # checking rows for i in range(n): win = True for j in range(n): if self.board[i][j] != player: win = False break if win: return win # checking columns for i in range(n): win = True for j in range(n): if self.board[j][i] != player: win = False break if win: return win # checking diagonals win = True for i in range(n): if self.board[i][i] != player: win = False break if win: return win win = True for i in range(n): if self.board[i][n - 1 - i] != player: win = False break if win: return win return False for row in self.board: for item in row: if item == '-': return False return True def is_board_filled(self): for row in self.board: for item in row: if item == '-': return False return True def swap_player_turn(self, player): return 'X' if player == 'O' else 'O' def show_board(self): for row in self.board: for item in row: print(item, end=" ") print() def start(self): self.create_board() player="X" if self.get_random_first_player() == 1 else 'O' while True: print(f"Player {player} turn") self.show_board() # taking user input row, col = list( map(int, input("Enter row and column numbers to fix spot: ").split())) print() # fixing the spot self.fix_spot(row - 1, col - 1, player) # checking whether current player is won or not if self.is_player_win(player): print(f"Player {player} wins the game!") break # checking whether the game is draw or not if self.is_board_filled(): print("Match Draw!") break # swapping the turn player = self.swap_player_turn(player) # showing the final view of board print() self.show_board() # starting the game tic_tac_toe = TicTacToe() tic_tac_toe.start()
Перегляньте зразок виведення коду.
$ python tic_tac_toe.py Player X turn - - - - - - - - - Enter row and column numbers to fix spot: 1 1 Player O turn X - - - - - - - - Enter row and column numbers to fix spot: 2 1 Player X turn X - - O - - - - - Enter row and column numbers to fix spot: 1 2 Player O turn X X - O - - - - - Enter row and column numbers to fix spot: 1 3 Player X turn X X O O - - - - - Enter row and column numbers to fix spot: 2 2 Player O turn X X O O X - - - - Enter row and column numbers to fix spot: 3 3 Player X turn X X O O X - - - O Enter row and column numbers to fix spot: 3 2 Player X wins the game! X X O O X - - X O
Деякі основні моменти, які допоможуть вам зрозуміти структуру коду.
- Ми використали клас, щоб мати всі методи в одному місці. Це також може бути пакетом для багаторазового використання в іншому коді.
- Далі ми визначили різні функції для кожного обов’язку, навіть якщо це невелике завдання. Це допомагає з легкістю підтримувати код.
- Наведені вище два підходи допомагають нам легко оновити програму, якщо ми хочемо оновити гру.
Не соромтеся адаптувати структуру та покращувати її на основі вашого проекту. Структурування коду не обмежено.
Заключні слова
Ура! 😎 Ви створили гру повністю з нуля. Це не одна з візуальних ігор, у які ми граємо щодня. Але це допомагає вам писати логіку та підтримувати чисту структуру коду. Дотримуйтесь подібних вказівок, щоб створити такі цікаві ігри. Подібні ігри можна знайти, якщо повернутися на кілька років у дитинство.
Щасливого кодування! 👩💻
Далі дізнайтеся, як створити гру вгадування чисел і модульне тестування за допомогою модуля Python unittest.
Вам сподобалось читати статтю? Як щодо того, щоб поділитися зі світом?