Игра “Крестики-нолики” для двух игроков на 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 <= 9:
         if(str(board[player_answer-1]) not in "XO"):
            board[player_answer-1] = player_token
            valid = True
         else:
            print("Эта клетка уже занята!")
      else:
        print("Некорректный ввод. Введите число от 1 до 9.")

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

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
        if counter > 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()

Внутри программы игровое поле представлено в виде одномерного списка с числами от 1 до 9.

Функция take_input()

Задачи данной функции:

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

2. Обработать некорректный ввод, например, введено не число. Для преобразования строки в число используем функцию int().

3. Обработать ситуации. когда клетка занята или когда введено число не из диапазона 1..9.

Для обработки некорректного ввода мы используем блок try…except. Если пользователь введет строку, то выполнение программы не прервется, а будет выведено сообщение “Некорректный ввод. Вы уверены, что ввели число?”, а затем цикл перейдет на следующую итерацию с возможностью по-новому ввести число.

Функция check_win()

Данная функция проверяет игровое поле. Мы создаем кортеж с выигрышными координатами и проходимся циклом for по нему.

Если символы во всех трех заданных клетках равны – возвращаем выигрышный символ, иначе – возвращаем значение False.

Непустая строка(выигрышный символ) при приведении ее к логическому типу вернет True.

Функция main()

В данной функции создаем цикл while. Цикл выполняется пока один из игроков не выиграл. В данном цикле мы выводим игровое поле, принимаем ввод пользователя, при этом определяя токен(икс или нолик) игрока.

Ждем, когда переменная counter станет больше 4 для того, чтобы избежать заведомо ненужного вызова функции check_win.

Переменная tmp была создана для того, чтобы лишний раз не вызывать функцию check_win, мы просто “запоминаем” ее значение и при необходимости используем в строке “print(tmp, “выиграл!”)”.

Вывод программы:


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

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

 

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Связи между моделями.

Связи между моделями.

В нашем проекте есть одна модель под названием “Объявления”. В этой статье мы создадим новый класс модели “Rubric”, которая будет представлять рубрики объявлений. Допишем в

 
Параметры полей и моделей.

Параметры полей и моделей.

Для того, чтобы наша административная панель Django выглядела более понятна для обычного пользователя необходимо указать правильные названия полей. Наша созданная модель представляется непонятной аббревиатурой “Bbs”,

 
Административный web-сайт Django.

Административный web-сайт Django.

Административный web-сайт предоставляет доступ ко всем моделям, объявленным во всех приложениях, что составляют проект. С помощью данной панели можно просматривать, добавлять, править и удалять записи,

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: