Tic tac toe - крестики-нолики по шагам (статическая реализация интерфейса)
1. Создание интерфейса
В данном примере проекта приводится игра крестики-нолики с четырьмя кнопками. Пример использует упрощенную модель 2х2, которая помогает понять какие шаги необходимо пройти для реализации полной версии программы.
Задание:
Названия переменных должны быть корректными:
- существующие английские слова;
- имя переменной всегда начинается с имени существительного отражающее суть/смысл переменной;
- соединение двух и/или более слов через нижнее подчеркивание.
Создать окно с названием версии и виджеты
Button()
.- реализовать отображение четырех кнопок.
Рекомендации:
В названиях кнопок можно использовать цифры обозначающие место положение соответствующей кнопки: "button_11", где первая единица означает столбик, а вторая - строка.
Для задания размеров кнопки лучше использовать параметры
grid()
:ipadx=
иipady=
, т.к. данный способ не вызывает ошибки при подключенной библиотеки ttk.
2. Реализация нажатия кнопок
Добавляем функции нажатия кнопок и отображение "Х".
Задание:
Изменить версию в заголовке окна.
Названия функций должны быть корректными:
- существующие английские слова;
- название начинается всегда с глагола отражающие суть/смысл функции;
- соединение двух и/или более слов через нижнее подчеркивание: "кнопка_нажата".
Создать четыре функции нажатия кнопок для отображения значка "Х".
Рекомендации:
- Тело созданных функций желательно делать максимально похожими, это необходимо для понимания универсальности функций.
3. Смена ввода "Х" на "О"
Задание:
- Изменить версию в заголовке окна.
- Добавить глобальную переменную для отслеживания очереди хода игрока.
- Изменить тело функций, учитывая очередность:
- при последующем нажатии кнопки происходило чередование выводимых символов "Х" и "О".
- на этом шаге символы в кнопках могут заменять друг друга.
Рекомендации:
- Тело созданных функций желательно делать максимально похожими.
- Для отслеживания состояния переключения можно воспользоваться функцией
print()
.
4. Проверка ввода
Задание:
- Изменить версию в заголовке окна.
- Изменить тело функций, добавив проверку на пустоту:
- при последующем нажатии кнопки, если в кнопке ещё не задан символ, то происходило вывод символа "Х" или "О", в зависимости от очередности.
- на этом шаге символы, выведенные в кнопках, не могут заменять друг друга.
Рекомендации:
- Тело созданных функций желательно делать максимально похожими.
- Для отслеживания состояния переключения можно воспользоваться функцией
print()
. - Создать дополнительные функции и переменные не требуется.
5. Кнопка "новая игра"
Для дальнейшего удобства проверки работы программы добавим кнопку "новая игра".
Задание:
- Изменить версию в заголовке окна.
- Добавим кнопку "NEW GAME".
- Напишите функцию создания новой игры, которая убирает все символы с кнопок.
6. Составление условий победы
Для начала реализации проверки победителя составим логические выражения для проверки победы игрока символом "Х".
Задание:
- Изменить версию в заголовке окна.
- Напишите функцию проверки победителя:
- вызов функции происходит после хода каждого игрока;
- используя функцию
print()
выводите все состояния победных комбинаций: горизонтали, вертикали и диагонали; - проверьте правильность работы всех условий.
Пример вывода:
Row 1: False
Row 2: False
Column 1: True
Column 2: False
Diagonal 11-22: False
Diagonal 12-21: False
2
3
4
5
6
Рекомендации:
Для удобства в консоли выводите текст вида: "Row 1: True" или "Diagonal 12-21: True" и т.п.
Не забывайте использовать f""-строку. 😉
7. Проверка победы "Х"
В этом шаге добавляем проверку условия и если выпала выигрышная комбинация, то в консоль выводиться: "X - won!"
Задание:
- Изменить версию в заголовке окна.
- Измените функцию проверки победителя:
- создайте одну "условную" конструкцию if;
- добавьте логические выражения проверки "Х" в условие, соединив логические выражения;
- при появлении выигрышной комбинации в консоль выводиться "X - won!"
- Проверьте правильность работы нескольких комбинаций.
Рекомендации:
- Лучше проверить все возможные выигрышные комбинации для исключения ошибки.
8. Проверка победы "ХО"
В этом шаге добавляем проверку условия и если выпала выигрышная комбинация, то в консоль выводиться: "X - won!" или "О - won!"
Задание:
- Изменить версию в заголовке окна.
- Измените функцию проверки победителя:
- изменить условие при котором будет проверяться соответствие выигрышных комбинаций "Х" или "О";
- при появлении выигрышной комбинации в консоль выводится "X - won!" или "О - won!" в соответствии с игровым полем.
- Проверьте правильность работы нескольких комбинаций.
Рекомендации:
- Лучше проверить все возможные выигрышные комбинации для исключения ошибки для "Х" и "О".
9. Конец игры
При выигрыше одним из игроков реализуем блокировку кнопок. При создании новой игры блокировка должна отключаться.
Задание:
- Изменить версию в заголовке окна.
- Добавьте функции переключения состояния кнопок:
- написать функции отключения (блокировки) и включения всех кнопок;
- в теле функций всем кнопкам игрового поля присваивается определенное состояние;
- когда выигрывает один из игроков, в функции проверки победителя вызывается функция
отключение_кнопок
:button['state']='disable'
; - при создании новой игры, в функции создания игры вызывается функция
активация_кнопок
:button['state']="normal"
.
- Проверьте правильность работы.
Рекомендации:
- Добавьте диалоговое окно вывода победителя.
10. Полная реализация статической модели интерфейса
Для лучшей проработки понимания:
- расширьте функциональные возможности игры до полной версии поля размером 3х3.
- добавьте соответствующие функции к кнопкам.
- измените функцию проверки выигрыша, добавив необходимые проверки;
- измените функцию новой игры, добавив изменения добавленных кнопок;
- измените функцию состояния кнопок (блокировки и активации), добавив изменение добавленных кнопок;
- добавьте проверку и вывод сообщения: "Ничья".
- измените вывод результата игры: в виде диалогового окна.
- добавьте табло вывода количества побед каждого игрока, и количества ничьих.