- •Федеральное государственное бюджетное образовательное учреждение высшего образования «Чувашский государственный университет имени и. Н. Ульянова»
- •Введение
- •Цель курсовой работы
- •Основные сведения
- •Развернутое индивидуальное задание
- •Выбор метода решения задачи
- •Выбор метода хранения данных об игровом поле
- •Обоснование метода решения задачи
- •Анализ задачи
- •Общий алгоритм работы
- •Общие сведения о программе
- •Функциональное назначение
- •Используемые технические средства
- •Вызов и загрузка
- •Список литературы
- •Тестовые данные
- •Тексты программ
Общий алгоритм работы
При запуске формируется двумерный массив чисел от 0 до 15, после этого числа перемешиваются с учетом разрешимости комбинаций. Открывается консольное окно, которое отображает этот массив, выводя вместо 0 пустую клетку. Под таблицей находится поле для подсчета ходов. Перед таблицей – подсказки, следуя которым можно выйти из игры или перемешать числа в таблице и начать новую игру.
Управление игрой происходит с помощью клавиатуры: при нажатии на стрелку влево местами меняются пустая клетка и клетка, находящаяся справа от пустой, если таковая есть, на стрелку вправо – находящаяся слева от пустой и пустая клетка, на стрелку вверх – пустая клетка и клетка, снизу от пустой, на стрелку вниз – пустая клетка и клетка, сверху от пустой. При нажатии на сочетание клавиш Alt+X производится выход из программы, Alt+R – перемешивание таблицы. При нажатии на другие символьные клавиши ничего не происходит.
После каждого хода игрока увеличивается на один значение счетчика ходов и производится проверка на достижение победного положения.
Игра продолжается до тех пор, пока числа в массиве не будут располагаться в правильном порядке. При достижении этого положения под счетчиком ходов выводится надпись «Победа!» и программа переходит в режим ожидания – возможны только перемешивание таблицы и выход из игры.
Алгоритм работы программы
Описание классов
Для решения задачи создано два класса. Один класс – базовый – описывает игровое поле, в нем содержатся методы, связанные с отображением таблицы на экране. Второй – производный с обобществленным типом наследования – содержит поля и методы, связанные с ходом игры. Именно в нем содержатся методы, двигающие пустую клетку; ожидание нажатия клавиши, проверка на завершение игры.
Диаграмма классов
Структура классов
Класс 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() – ожидает нажатия клавиши и реагирует на нажатие
