Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет курс ООП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
131 Кб
Скачать
☆
      1. Общий алгоритм работы

При запуске формируется двумерный массив чисел от 0 до 15, после этого числа перемешиваются с учетом разрешимости комбинаций. Открывается консольное окно, которое отображает этот массив, выводя вместо 0 пустую клетку. Под таблицей находится поле для подсчета ходов. Перед таблицей – подсказки, следуя которым можно выйти из игры или перемешать числа в таблице и начать новую игру.

Управление игрой происходит с помощью клавиатуры: при нажатии на стрелку влево местами меняются пустая клетка и клетка, находящаяся справа от пустой, если таковая есть, на стрелку вправо – находящаяся слева от пустой и пустая клетка, на стрелку вверх – пустая клетка и клетка, снизу от пустой, на стрелку вниз – пустая клетка и клетка, сверху от пустой. При нажатии на сочетание клавиш Alt+X производится выход из программы, Alt+R – перемешивание таблицы. При нажатии на другие символьные клавиши ничего не происходит.

После каждого хода игрока увеличивается на один значение счетчика ходов и производится проверка на достижение победного положения.

Игра продолжается до тех пор, пока числа в массиве не будут располагаться в правильном порядке. При достижении этого положения под счетчиком ходов выводится надпись «Победа!» и программа переходит в режим ожидания – возможны только перемешивание таблицы и выход из игры.

      1. Алгоритм работы программы

  1. Описание классов

Для решения задачи создано два класса. Один класс – базовый – описывает игровое поле, в нем содержатся методы, связанные с отображением таблицы на экране. Второй – производный с обобществленным типом наследования – содержит поля и методы, связанные с ходом игры. Именно в нем содержатся методы, двигающие пустую клетку; ожидание нажатия клавиши, проверка на завершение игры.

    1. Диаграмма классов

    1. Структура классов

Класс GameField отвечает за формирование таблицы и за вывод информации на экран.

Поля класса GameField:

  • int Field[4][4] – игровое поле

  • int izero – номер строки, в которой находится пустая ячейка

  • int jzero – номер столбца, в котором находится пустая ячейка

  • int RightField[4][4] – эталон победного положения чисел для победы

  • int Step – число сделанных игроком ходов

Методы класса GameField:

  • GameField() – конструктор, заполняет таблицу в правильную последовательность

  • void MoveElements (int i1, int j1, int i2, int j2) – меняет местами значения ячеек таблицы, находящиеся в [i1][j1] и [i2][j2].

  • bool CheckForSolution() – проверяет, решаема ли данная конфигурация чисел в таблице. Если решаема, возвращает 1, иначе 0.

  • void Mix() – случайным образом перемешивает значения клеток поля так, чтобы в итоге получилась решаемая комбинация.

  • void Draw() – выводит на экран картинку игры.

Класс Game отвечает за ход игры, за передвижение клеток при нажатии клавиш, за контроль за завершением текущей игры.

Поля класса Game:

  • bool EndGame – признак завершения игры

Методы класса Game:

  • Game() – конструктор, инициализирует таблицу и задает EndGame = FALSE

  • void Mix() – перемешивает таблицу при запросе на новую игру

  • void CheckEndGame() – устанавливает флаг признака завершения игры

  • void MoveDown() – перемещает в пустую клетку ячейку сверху

  • void MoveUp() – перемещает пустую ячейку вниз

  • void MoveLeft() – перемещает пустую ячейку вправо

  • void MoveRight() – перемещает пустую ячейку влево

  • bool EndGameIs() - проверяет таблицу на правильность

  • void TheEnd() – выводит на экран сообщение о победе

  • void GetInstruction() – ожидает нажатия клавиши и реагирует на нажатие