Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Titulnye_listy (Восстановлен) (Восстановлен).docx
Скачиваний:
2
Добавлен:
26.09.2019
Размер:
325.79 Кб
Скачать

4.2 Кнопка «Демонстрация игры»

При нажатии на кнопку меню «Демонстрация игры» вызывается пользовательская функция demo(). В данной функции задается количество дисков для демонтрации, вызываются функции newgame(), hanoy(), с помощью функции getch() из стандартной библиотеки conio.h происходит задержка до нажатия любой клавиши и вызывается функция menu().

Результат работы функции demo представлен на рисунке 4.3.

Рисунок 4.3 – Демонстрация игры

В функции hanoy() реализован рекурсивный алгоритм «Ханойская башня», описанный ранее в пункте 3.1. Функция hanoy() использует функции out_disk(), out_from(), out_to(), out_count() из библиотеки drawing.h для вывода на экран информации о текущем переклыдывании.

4.3 Кнопка «Рекорды»

При нажатии на кнопку меню «Рекорды» вызывается пользовательская функция show_records. Функции show_records(), getrecords(), setrecords(), records(), input_str(), timer() описаны в пользовательской библиотеке records.h.

Функция show_records() при помощи функции outtextxy() из стандартной библиотеки graphics.h выводит на экран рекорды, записанные в глобальном массиве структур rec. Если игрок нажимает клавишу «backspace», то обнуляет содержимое массива rec при помощи функции setmem() из стандартной библиотеки mem.h и вызывает функцию show_records(). Результат работы функции представлен на рисунке 4.4.

Рисунок 4.4 – Рекорды игры

Функция getrecords() использует функции стандартной библиотеки stdio.h. Функция getrecords() открывает файл records.dat в бинарном режиме для чтения при помощи функции fopen(). После чего, вызывая функцию fread(), записывает содержимое файла в глобальный массив структур rec и закрывает файл при помощи функции fclose().

Функция setrecords() использует функции стандартной библиотеки stdio.h. Функция setrecords() открывает файл records.dat в бинарном режиме для записи при помощи функции fopen(). После чего, вызывая функцию fwrite(), записывает содержимое глобального массива структур rec в файл records.dat и закрывает файл при помощи функции fclose().

Функция records() при помощи функции outtextxy() из стандартной библиотеки graphics.h выводит на экран количество перекладываний, совершенных игроком за данную игру, минимально возможное количество перекладываний для m дисков и время игры, предварительно преобразуя значения переменных в строки при помощи функций itoa() и gcvt() из стандартной библиотеки stdlib.h. Если количество перекладываний, совершенных игроком, меньше количества, записанного в рекордах, или они равны, но игрок решил головоломку быстрее, чем записано в рекордах, или рекорд для данного количества дисков отсуствует, то выводит сообщение о новом рекорде и заносит результаты игрока в глобальный массив структур mas.

Функция input_str() записывает строку, вводимую с клавиатуры, пока пользователь не нажмет клавишу «Enter» или длина строки не превысит 19 символов. С помощью функции isprint() из стандартной библиотеки ctype.h в строку записываются только печатные символы. После каждого введенного символа закрашивает ранее выведенную на экран строку и выводит заново. Формальным параметром функции input_str() является указатель на строку.

Функция timer() замеряет время, прошедшее от начала до конца игры. Использует функцию gettime() из стандартной библиотеки time.h. Если в функцию передается значение ноль, то в статическую переменную v0 записывается текущее значение секунд, истекших с 1 января 1970 г, если передается не ноль, то в глобальную переменную tog записывается разница между текущим значением секунд, истекших с 1 января 1970 г, и переменной v0. Функция timer() вызывается пользовательскими функциями game() и win() для определения времени, прошедшего за игру.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]