МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное агентство по образованию
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Учебный Центр Информационных Технологий «Информатика»
Контрольная работа
по дисциплине «Информатика и программирование ч.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()), либо происходит перезапуск игры.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.