Разработка Gui на Qt (PySide) - Быки и коровы

Установка, ссылки и документация

Python – модуль PySide

Необходимо установить модуль PySide6 при помощи pip install. В системе Linux попробуйте установить пакет из системного репозитория.


Сайт
Документация (Modules API)

C++

Конспекты уроков по работе с Qt
Документация на Qt-6
Установщик Qt для Windows. При установке выберите "Qt 6.6 for desktop development", и вы получите минимально работающий комплект Qt 6.6. Подробнее смотрите в инструкции по установке. Также для скачивания необходимо использовать VPN или настроить прокси в установщике по этой инструкции.


Для установки в Linux нужно пользоваться пакетами из дистрибутива вашей системы (VPN и прокси не нужны), можно использовать версию 5 Qt.

Как сдавать задачи

В задаче 0 надо сдать скриншот в формате PNG. Остальные задачи существуют в двух вариантах. Вариант 1 – на Python PySide6. Вариант 2 – на С++ и Qt.
Вариант сдачи заданий установлен для каждого учащегося. По умолчанию всем проставлен вариант 1, но может быть заменён по просьбе (или если вы сдадите в задании 0 скриншот QtCreator).

Python

Всё решение, вместе со всеми классами, должно быть в одном файле.

С++

Необходимо создать проект в QtCreator. Используйте систему сборки qmake (а не cmake по умолчанию).
Удалите из проекта весь мусор (результат сборки, компиляции).
Создайте zip-архив с проектом. Необходимо архивировать именно каталог с проектом, а не только файлы внутри него. Внутри каталога должны быть файлы *.pro, *.cpp, *.h.
Для создания архива нельзя использовать встроенный архиватор Windows, т.к. он не создает в оглавлении архива запись для каталога с проектом, а создаёт только записи для файлов.

Задание 0

Установите дома PySide6 (для С++ — Qt и Qt Creator), сделайте скриншот запущенной среды разработки и запущенного приложения, использующего библиотеку PySide6 (Qt). Скриншот сохранить в формате PNG и сдайте в тестирующую систему.

Задание A

Видео
Пример на Python
Пример на C++
Добавьте в приложение три кнопки: увеличение значения на 1, уменьшение на 1 и сброса значения. Нажатие на эти кнопки должно приводить к изменению значения в классе MyCounter и всех элементах управления на экране (LineEdit, SpinBox, Slider).

Задание B

Видео с урока
Реализация игры Быки и коровы.
Функциональность приложения. После запуска программы компьютер генерирует случайное 4-значное число (все цифры различны, начинается не с нуля). Число выводится на стандартный вывод (функция print в python, cout в С++), в отладочных целях. Главное окно приложения содержит поле ввода (QLineEdit) для ввода задуманного числа, кнопку "Проверить" (QPushButton) и строчку для вывода сообщения (QLabel). При нажатии на кнопку производится проверка введенного числа, и либо выводится сообщение о том, что число некорректно, либо выводится количество быков и коров для введенного числа. Сообщения выводятся путем изменения текста у объекта QLabel.


Все надписи должны быть на русском языке. Файл должен быть сохранён в кодировке UTF-8.


В pythоn поставьте в начало файла строчку

# -*- coding: utf-8 -*-


В C++ используйте среду QtCreator, она будет сохранять файлы в кодировке UTF-8.

Задание C

Функциональность приложения – полноценный игровой режим с началом новой игры и подсчётом числа ходов.


В окне две кнопки "Угадать" и "Сдаться". Также ведется подсчет числа попыток, за которое было угадано число. Не учитывается в качестве попытки: ввод некорректного числа, ввод числа, совпадающего с тем числом, которое было введено последним перед этим.


При нажатии на кнопку "Угадать" идет проверка числа и выводится сообщение о результате проверки. Если в результате проверки было угадано задуманное число, то выводится сообщение об этом, выводится число ходов и на кнопке "Сдаться" текст меняется на "Новая игра", а нажатия на кнопку "Угадать" игнорируются (можно сделать кнопку неактивной). После нажатия на кнопку "Новая игра" задумывается новое число, текст кнопки меняется на "Сдаться" и все начинается заново.


При нажатии на кнопку "Сдаться" выводится задуманное число, после чего пользователю предлагается начать новую игру нажатием на кнопку "Новая игра".


Слова "быки" и "коровы" должны склоняться по правилам русского языка, например, "1 бык, 2 коровы"


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

Задание D

Добавьте в приложение виджет, в котором будут храниться ходы, сделанные игроком, и ответ приложения. Для этого используйте виджет QTableWidget (документация Python, С++).


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

Задание E

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


При удачном окончании игры (если игрок будет добавлен в таблицу результатов), приложение запрашивает имя игрока (это удобно делать при помощи QInputDialog (документация Python, С++), сохраняет его в файле с лучшими результатами. Должна быть возможность просмотра лучших результатов, можно при помощи QMessageBox (документация Python, С++). Выдача лучших результатов – в порядке неубывания числа ходов, использованных при отгадывании.


Программа должна корректно работать как при наличии, так и при отсутствии таблицы результатов. Если файла с результатами не существует, то его нужно создать. Чтобы проверить корректность открытия файла можно использовать метод is_open у файлового потока в C++ или обработку исключений.


Хорошая идея хранить таблицу результатов в JSON.

Задание F

Функциональность приложения – есть два режима игры: человек отгадывает число и компьютер отгадывает число, задуманное человеком. Алгоритм отгадывания должен быть достаточно эффективным.


После старта программы игрок может выбрать режим игры. В режиме, когда программа угадывает число, программа задаёт вопросы относительно задуманного число и просит человек ввести ответ.


Программа также должна производить контроль корректности всех ответов пользователя, если пользователь дал противоречивые ответы, компьютер должен сообщить об этом (сразу же после того, как набор ответов стал противоречивым) и отказаться угадывать дальше.


Таблица всех сделанных ходов должна отображаться в каждом режиме игры.


Это задание можно реализовать и сдать без выполнения задания с сохранением таблицы лучших результатов.