Skip to content

zxc-vitaliy/zxc-study-project-majong

Repository files navigation

majong

Моделирование игры "Китайские карточки". Составить программу на языке программирования с++, реализующую игру "Китайские карточки". Использовать графический режим работы монитора. На поле 10*20 позиций карточки с картинками. Карточки удаляются с поля парами только из внешних рядов с одинаковыми картинками. Картинки при удалении соединяются ломаной линией, имеющей не более трех колен. Играющий стремится удалить как можно больше карточек. Карточки должны быть размещены так, чтобы был вариант полного удаления карточек. При каждом запуске игры должно быть новое расположение карточек. Предусмотреть ведение статистики.

Подробное описание алгоритма

Для решения поставленной задачи был составлен собственный алгоритм.

1 Формирование поля:

Поле изначально представляет собой матрицу чисел, где 0 – отсутствие карточки, а числа от 1 до 46 – вид карточки. Формируется матрица с центра. Сначала создается поле нулей 2 на 12. В две ячейки матрицы со значениями равными нулю ставятся два случайных одинаковых числа и проверяется можно ли удалить их согласно установленным правилам, если можно то продолжаем, если нет, то снова приравниваем их к нулю и повторяем алгоритм сначала. Так продолжается пока поле не заполнится числами или алгоритм не повторится 100 раз (Такая проверка нужна, чтобы алгоритм не зациклился, так как могут быть ситуации, когда возможности поставить карточки так, чтобы они удалялись просто нет). Затем поле расширяется до 4 на 14 и снова заполняется числами. Так происходит пока поле не станет 10 на 20. Поле нужно заполнить именно так, чтобы игра всегда имела возможность прохождения. После формирования матрицы будет создан матрица обьектов класса Img, в котором будет хранится вид карточки в соответствии с первоначальной матрицей и информация – нажата эта карточка или нет.

2 Проверка правильности выбора карточек:

При нажатии на графической сцене на карточку будет вызываться слот, который выставит поле объекта карточки в значение true. Каждые полторы секунды вызывается слот, который пробегает по всем объектам массива карточек и проверяет есть ли пара карточек со значением true и можно ли их удалить. Сначала проверяем одинаковые ли значения у этих карточек, если нет, то сбрасываем нажатие этих карточек. Если значения равны, то проверяем к какому внешнему ряду относится эта карточка, если к одному, то проверка пройдена, можем удалить. Если карточки относятся к разным рядам могут быть случаи, что мы можем их соединить, тогда мы двигаемся по ячейкам матрицы от первой ко второй, если встречаем не ноль, то двигаемся в другую сторону, так пока количество поворотов не станет больше двух. Если дошли, то проверка пройдена и карточки можно удалить, если поворотов больше двух, то сбрасываем нажатие карточек.

3 Поиск подсказки для пользователя:

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

4 Сохранение / загрузка игры:

При сохранении игры в файл записывается массив чисел со значениями, где 0 – это отсутствие карточки, а остальные числа от 1 до 46 вид карточки. При загрузке эти данные будут считаны в двумерный массив и поле сформируется, основываясь на этом массиве.

Скриншот игры

alt-текст

Запуск

Для того, чтобы запустить требуется Qt. В qt открываете .pro файл и компилируете, выйдет окно авторизации.

Login : admin

Password : admin

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published