Крестики нолики на питон код

Игра «Крестики-нолики» для двух игроков на Python

В данной статье мы разработаем небольшую консольную программу «Крестики-нолики» для закрепления темы «Функции в Python«. Сначала рекомендуем изучить теорию создания функций и потом возвращаться к этой статье.

Используемые функции в программе

draw_board() — рисует игровое поле в привычном для человека формате. take_input() — принимает ввод пользователя. Проверяет корректность ввода. check_win — функция проверки игрового поля, проверяет, выиграл ли игрок. main() — основная функция игры, которая будет запускать все ранее описанные функции. Данная функция запускает и управляет игровым процессом.

Полный листинг программы

print("*" * 10, " Игра Крестики-нолики для двух игроков ", "*" * 10) board = list(range(1,10)) def draw_board(board): print("-" * 13) for i in range(3): print("|", board[0+i*3], "|", board[1+i*3], "|", board[2+i*3], "|") print("-" * 13) def take_input(player_token): valid = False while not valid: player_answer = input("Куда поставим " + player_token+"? ") try: player_answer = int(player_answer) except: print("Некорректный ввод. Вы уверены, что ввели число?") continue if player_answer >= 1 and player_answer 4: tmp = check_win(board) if tmp: print(tmp, "выиграл!") win = True break if counter == 9: print("Ничья!") break draw_board(board) main(board) input("Нажмите Enter для выхода!")

Функция draw_board()

Функция take_input()

Задачи данной функции: 1. Принять ввод пользователя. 2. Обработать некорректный ввод, например, введено не число. Для преобразования строки в число используем функцию int(). 3. Обработать ситуации. когда клетка занята или когда введено число не из диапазона 1..9. Для обработки некорректного ввода мы используем блок try…except. Если пользователь введет строку, то выполнение программы не прервется, а будет выведено сообщение «Некорректный ввод. Вы уверены, что ввели число?», а затем цикл перейдет на следующую итерацию с возможностью по-новому ввести число.

Читайте также:  Xrdebugnew cpp invalid parameter 987

Функция check_win()

Данная функция проверяет игровое поле. Мы создаем кортеж с выигрышными координатами и проходимся циклом for по нему. Если символы во всех трех заданных клетках равны — возвращаем выигрышный символ, иначе — возвращаем значение False. Непустая строка(выигрышный символ) при приведении ее к логическому типу вернет True.

Функция main()

Игра

В данной функции создаем цикл while. Цикл выполняется пока один из игроков не выиграл. В данном цикле мы выводим игровое поле, принимаем ввод пользователя, при этом определяя токен(икс или нолик) игрока. Ждем, когда переменная counter станет больше 4 для того, чтобы избежать заведомо ненужного вызова функции check_win. Переменная tmp была создана для того, чтобы лишний раз не вызывать функцию check_win, мы просто «запоминаем» ее значение и при необходимости используем в строке «print(tmp, «выиграл!»)». Вывод программы:

Наша игра получилась очень простой. Рекомендуется самостоятельно написать данный код для полного его понимания. Ждем ваших предложений по улучшению или модернизации данной игры. Видео по созданию игры:

Источник

Крестики-нолики на Python

Статьи

Введение

В статье напишем игру “Крестики-нолики” на Python.

Крестики-нолики — логическая игра между двумя соперниками на квадратном поле 3×3 клетки, или бо́льшего размера. Один из игроков играет за “крестики”, а второй за “нолики”.

Рисуем игровое поле

Начнём с того, что нарисуем само игровое поле для игры.

Для начала сгенерируем список с числами от одного, до 9:

Создадим функцию draw_board(), аргументом которой будет board:

def draw_board(board): print("-" * 13) for i in range(3): print("|", board[0 + i * 3], "|", board[1 + i * 3], "|", board[2 + i * 3], "|") print("-" * 13)

В функции выводим первую строку состоящую из 13 символов “тире”, после чего, в цикле прорисовываем остальные края поля.

Читайте также:  Java list double sort

При вызове функции будет следующий вывод:

Принимаем ввод пользователя

Теперь нам нужно создать функцию для приёма ввода.

Создадим функцию take_input() с аргументом player_token:

def take_input(player_token): valid = False while not valid: player_answer = input("Куда поставим " + player_token + "? ") try: player_answer = int(player_answer) except ValueError: print("Некорректный ввод. Вы уверены, что ввели число?") continue if 1 

Внутри функции сначала задаётся переменная valid, которая равняется False, после чего идёт цикл while, который не закончится, пока valid не примет значение True. В цикле производится ввод пользователем определённой клетки, в которую будет ставиться крестик, либо нолик. Если же пользователь ввёл, а какой-либо другой символ, выведется ошибка.

Далее в условии проверяется, занята ли введённая клетка. Если клетка занята, то выведется соответствующая ошибка, если же введено число не в диапазоне от 1, до 10 – будет так же выведено соответствующее сообщение.

Проверка, выиграл ли игрок

Создадим функцию check_win(), в которой будем проверять, выиграл ли игрок. Аргументом функции будет board:

def check_win(board): win_coord = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6)) for each in win_coord: if board[each[0]] == board[each[1]] == board[each[2]]: return board[each[0]] return False

Внутри функции создаётся кортеж win_coord, в котором хранятся победные комбинации. В цикле производится проверка на победу игрока, если он побеждает, то выводится сообщение о победе, если же нет – возвращается False, и игра продолжается.

Создание главной функции

Теперь создадим функцию main() с аргументом board:

def main(board): counter = 0 win = False while not win: draw_board(board) if counter % 2 == 0: take_input("X") else: take_input("O") counter += 1 tmp = check_win(board) if tmp: print(tmp, "выиграл!") win = True break if counter == 9: print("Ничья!") break draw_board(board)

Внутри функции, после обозначения переменных, создаётся цикл, который закончится после победы одного из игроков, или ничьей. Внутри цикла проводится проверка, какой игрок сходил, после чего вызывается функция take_input() с соответствующим символом игрока. Далее идёт проверка, какой игрок выиграл, или вышла ничья.

Итоговый код игры “Крестики-нолики” на Python

board = list(range(1, 10)) def draw_board(board): print("-" * 13) for i in range(3): print("|", board[0 + i * 3], "|", board[1 + i * 3], "|", board[2 + i * 3], "|") print("-" * 13) def take_input(player_token): valid = False while not valid: player_answer = input("Куда поставим " + player_token + "? ") try: player_answer = int(player_answer) except ValueError: print("Некорректный ввод. Вы уверены, что ввели число?") continue if 1  

Заключение

В статье мы с Вами написали игру “Крестики-нолики” на Python! Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

Источник

Оцените статью