Tic tac toe - крестики-нолики по шагам (статическая реализация интерфейса)

1. Создание интерфейса

В данном примере проекта приводится игра крестики-нолики с четырьмя кнопками. Пример использует упрощенную модель 2х2, которая помогает понять какие шаги необходимо пройти для реализации полной версии программы.

tic_tac_toe_v01.png

Задание:

  1. Названия переменных должны быть корректными:

    • существующие английские слова;
    • имя переменной всегда начинается с имени существительного отражающее суть/смысл переменной;
    • соединение двух и/или более слов через нижнее подчеркивание.
  2. Создать окно с названием версии и виджеты Button().

    • реализовать отображение четырех кнопок.

Рекомендации:

  1. В названиях кнопок можно использовать цифры обозначающие место положение соответствующей кнопки: "button_11", где первая единица означает столбик, а вторая - строка.

  2. Для задания размеров кнопки лучше использовать параметры grid(): ipadx= и ipady=, т.к. данный способ не вызывает ошибки при подключенной библиотеки ttk.

2. Реализация нажатия кнопок

Добавляем функции нажатия кнопок и отображение "Х".

tic_tac_toe_v02.png

Задание:

  1. Изменить версию в заголовке окна.

  2. Названия функций должны быть корректными:

    • существующие английские слова;
    • название начинается всегда с глагола отражающие суть/смысл функции;
    • соединение двух и/или более слов через нижнее подчеркивание: "кнопка_нажата".
  3. Создать четыре функции нажатия кнопок для отображения значка "Х".

Рекомендации:

  1. Тело созданных функций желательно делать максимально похожими, это необходимо для понимания универсальности функций.

3. Смена ввода "Х" на "О"

tic_tac_toe_v03.png

Задание:

  1. Изменить версию в заголовке окна.
  2. Добавить глобальную переменную для отслеживания очереди хода игрока.
  3. Изменить тело функций, учитывая очередность:
    • при последующем нажатии кнопки происходило чередование выводимых символов "Х" и "О".
    • на этом шаге символы в кнопках могут заменять друг друга.

Рекомендации:

  1. Тело созданных функций желательно делать максимально похожими.
  2. Для отслеживания состояния переключения можно воспользоваться функцией print().

4. Проверка ввода

tic_tac_toe_v04.png

Задание:

  1. Изменить версию в заголовке окна.
  2. Изменить тело функций, добавив проверку на пустоту:
    • при последующем нажатии кнопки, если в кнопке ещё не задан символ, то происходило вывод символа "Х" или "О", в зависимости от очередности.
    • на этом шаге символы, выведенные в кнопках, не могут заменять друг друга.

Рекомендации:

  1. Тело созданных функций желательно делать максимально похожими.
  2. Для отслеживания состояния переключения можно воспользоваться функцией print().
  3. Создать дополнительные функции и переменные не требуется.

5. Кнопка "новая игра"

Для дальнейшего удобства проверки работы программы добавим кнопку "новая игра".

tic_tac_toe_v05.png

Задание:

  1. Изменить версию в заголовке окна.
  2. Добавим кнопку "NEW GAME".
  3. Напишите функцию создания новой игры, которая убирает все символы с кнопок.

6. Составление условий победы

Для начала реализации проверки победителя составим логические выражения для проверки победы игрока символом "Х".

tic_tac_toe_v06.png

Задание:

  1. Изменить версию в заголовке окна.
  2. Напишите функцию проверки победителя:
    • вызов функции происходит после хода каждого игрока;
    • используя функцию print() выводите все состояния победных комбинаций: горизонтали, вертикали и диагонали;
    • проверьте правильность работы всех условий.

Пример вывода:

Row 1: False
Row 2: False
Column 1: True
Column 2: False
Diagonal 11-22: False
Diagonal 12-21: False
1
2
3
4
5
6

Рекомендации:

  1. Для удобства в консоли выводите текст вида: "Row 1: True" или "Diagonal 12-21: True" и т.п.

  2. Не забывайте использовать f""-строку. 😉

7. Проверка победы "Х"

В этом шаге добавляем проверку условия и если выпала выигрышная комбинация, то в консоль выводиться: "X - won!"

tic_tac_toe_v07.png

Задание:

  1. Изменить версию в заголовке окна.
  2. Измените функцию проверки победителя:
    • создайте одну "условную" конструкцию if;
    • добавьте логические выражения проверки "Х" в условие, соединив логические выражения;
    • при появлении выигрышной комбинации в консоль выводиться "X - won!"
  3. Проверьте правильность работы нескольких комбинаций.

Рекомендации:

  1. Лучше проверить все возможные выигрышные комбинации для исключения ошибки.

8. Проверка победы "ХО"

В этом шаге добавляем проверку условия и если выпала выигрышная комбинация, то в консоль выводиться: "X - won!" или "О - won!"

tic_tac_toe_v08.png

Задание:

  1. Изменить версию в заголовке окна.
  2. Измените функцию проверки победителя:
    • изменить условие при котором будет проверяться соответствие выигрышных комбинаций "Х" или "О";
    • при появлении выигрышной комбинации в консоль выводится "X - won!" или "О - won!" в соответствии с игровым полем.
  3. Проверьте правильность работы нескольких комбинаций.

Рекомендации:

  1. Лучше проверить все возможные выигрышные комбинации для исключения ошибки для "Х" и "О".

9. Конец игры

При выигрыше одним из игроков реализуем блокировку кнопок. При создании новой игры блокировка должна отключаться.

tic_tac_toe_v09.png

Задание:

  1. Изменить версию в заголовке окна.
  2. Добавьте функции переключения состояния кнопок:
    • написать функции отключения (блокировки) и включения всех кнопок;
    • в теле функций всем кнопкам игрового поля присваивается определенное состояние;
    • когда выигрывает один из игроков, в функции проверки победителя вызывается функция отключение_кнопок: button['state']='disable';
    • при создании новой игры, в функции создания игры вызывается функция активация_кнопок: button['state']="normal".
  3. Проверьте правильность работы.

Рекомендации:

  1. Добавьте диалоговое окно вывода победителя.

10. Полная реализация статической модели интерфейса

Для лучшей проработки понимания:

  • расширьте функциональные возможности игры до полной версии поля размером 3х3.
  • добавьте соответствующие функции к кнопкам.
  • измените функцию проверки выигрыша, добавив необходимые проверки;
  • измените функцию новой игры, добавив изменения добавленных кнопок;
  • измените функцию состояния кнопок (блокировки и активации), добавив изменение добавленных кнопок;
  • добавьте проверку и вывод сообщения: "Ничья".
  • измените вывод результата игры: в виде диалогового окна.
  • добавьте табло вывода количества побед каждого игрока, и количества ничьих.