Использование двумерного массива для реализации алгоритма анимации движения на экране консоли

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное агентство по образованию 

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ

 ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Учебный Центр Информационных Технологий «Информатика»

Контрольная работа

по дисциплине «Информатика и программирование ч.1»

Направление подготовки: 230105 - «Программное обеспечение вычислительной техники и автоматизированных систем»

Выполнил слушатель:

Вариант: 6

Дата сдачи: __/__/____

Преподаватель:

Новосибирск, 2016


1.  Цель

Использовать функции getch для ввода без "эха", gotoxy для позиционирования курсора, sleep - для задержки, kbhit - для проверки наличия нажатой клавиши на клавиатуре.

2.  Вариант задания №6.

"Червяк". По экрану движется червяк, направление движения головы которого можно менять (стрелками). Червяк ест призы и растет. Задача - при движении головы не наткнуться на хвост и границы экрана.

3.  Теория.

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

4.  Анализ задачи и алгоритм

1)  Анализ задачи

Входные данные: целочисленный двумерный массив, содержащий координаты элементов червя.

Результат: движение червя.

Метод решения: сдвиг элементов массива, проверка на совпадение координат головы червя с координатами приза, тела червя или на выход за пределы игрового поля.

2)  Алгоритм решения задачи

·  создаём массив для тела червя;

·  задаём стартовую длину червя;

·  создаем структуру со случайными координатами приза;

·  организуем циклическую проверку нажатия клавиш;

·  изменяем переменные сдвига по осям в соответствии с нажатыми клавишами;

·  при отсутствии нажатия выводим элементы червя с учётом текущего сдвига;

·  проверяем координаты головы червя на совпадение с координатами приза, на выход за пределы игрового поля и на совпадение с одним из элементов хвоста;

·  при выполнении одного из условий вызываем соответствующие функции и операции.

5.  Описание программной реализации

1) Используемые переменные

enumColor– перечисляемый тип, удобное представление значений цвета;

structprizeструктура пользовательского типа PRIZE, полям которой присваиваются значения свойств очередного приза: координаты x и y, faceсимвол которым обозначен на поле приз, colorцвет приза, wormColorцвет червя;

intquiteCode –  переменная-признак, которой присваивается значение кода выхода функцией crawling();

intlenght – размер тела червя;

intwormArray [][] – массив, содержащий координаты элементов тела червя;

dX, dY – сдвиги по осям Х и Y;

2) Используемые функции

—  voidnewGame() – функция запуска новой игры.

Принцип работы:         с помощью функции gotoXY(0,0,White) устанавливается белый цвет фона, а system(“cls”)  очищает окно консоли. Определяется стартовая длина червя lenght и двумерный массив wormArray. Происходит вызов функции crawling(), в которой находится основной рабочий цикл, содержащий функции формирования массива с координатами элементов червя wormBuilt() и вывода этих элементов в окно консоли worm(). Здесь же находится библиотечная функция Sleep(), приостанавливающая выполнение  программы на указанное время.

—  voidnewPrize() – функция генерирует случайные координаты очередного приза и код его символа, а также выводит его в консоль.

Принцип работы:         функция rand() генерирует случайные значения, которые присваиваются переменным координат и цвета приза, а затем и полям структуры prize.

—  intcrawling() – функция предназначена для осуществления проверки нажатых клавиш, а также в ней находится основной рабочий цикл движения червя.

Принцип работы:         в процессе работы основного цикла функция kbhit() следит за нажатиями клавиш. Она прерывает цикл и код нажатой клавиши обрабатывается конструкцией switch/case. Функция Sleep() позволяет регулировать скорость движения.

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

Принцип работы:         вычисленные с учётом переданного в функцию сдвига  dX и dY координаты головного элемента червя присваиваются временным переменным tmpX и tmpY и проверяются на совпадение с координатами приза, других элементов тела червя, а также на пересечение границ игрового пространства. При совпадении координат происходят соответствующие изменения длины тела червя (увеличение или уменьшение), а также вывод червя с изменёнными координатами, создаётся новый приз (вызовом функции newPrize()), либо происходит перезапуск игры.

Похожие материалы

Информация о работе