Паскаль содержит небольшое число встроенных команд, но зато может расширять свои возможности за счёт создания новых команд. Не обязательно описывать новые команды прямо в тексте программы. Можно подключить описания, хранящиеся в отдельных файлах – модулях. Универсальные модули, пригодные для подключения ко многим программам называются библиотеками. Библиотеки группируют команды по темам, например, библиотека, отвечающая за мультипликацию, библиотека, организующая вывод музыки и т.д… Некоторые библиотеки входят в поставку PascalABC. Они называются стандартными библиотеками. К ним относится и библиотека CRT. При её подключении возникает специальное текстовое окно для ввода и вывода. Большинство команд из CRT относятся к управлению выводом текста в это окно. Но в CRT входят также команды управления клавиатурой.
Для подключения к программе библиотеки используется команда USES, после которой указывается одна или (через запятую) несколько библиотек (например, uses crt; ). Эта команда располагается в следующей после заголовка строке, до других описаний.
При включении в программу библиотеки CRT, можно использовать такие новые команды:
1. TextSize(высота); Устанавливает размер символов в пунктах (по умолчанию 10 пунктов). Пункт - отрезок 1/3 мм.
2. CRTWindowSize(ширина,высота); Устанавливает размер текстового окна в символах.
3. Window(x1,y1,x2,y2); Определяет на экране текущее окно (в котором в дальнейшем будет происходить весь ввод-вывод). Устанавливает курсор в левый верхний угол текущего окна. Координаты задаются в символах текущего размера.
4. ClrScr; Очищает цветом фона все текстовое окно (или текущее окно, установленное процедурой window). Устанавливает курсор в левый верхний угол очищенного окна.
5. ClrEol; Очищает все символы с позиции курсора до конца строки без перемещения курсора.
6. DelLine; Удаляет строку, содержащую курсор.
7. InsLine; Вставляет пустую строку в позиции курсора.
8. HideCursor; Скрывает текстовый курсор.
9. ShowCursor; Делает текстовый курсор видимым.
10. TextBold; Устанавливает жирный стиль символов.
11. TextNormal; Устанавливает нормальный стиль символов.
12. TextColor(цвет); Устанавливает цвет текста, печатаемого после этой команды. Цвета, используемые в этой и следующей команде, указываются либо числом, либо английским словом-константой:
0 Black
чёрный
8 DarkGray
тёмно-серый
1 Blue
синий
9 LightBlue
светло-синий
2 Green
зелёный
10 LightGreen
светло-зелёный
3 Cyan
бирюзовый
11 LightCyan
голубой
4 Red
красный
12 LightRed
светло-красный
5 Magenta
малиновый
13 LightMagenta
сиреневый
6 Brown
коричневый
14 Yellow
жёлтый
7 LightGray
серый
15 White
белый
13. TextBackGround(цвет); Устанавливает цвет фона позади печатаемых после этой команды символов. Если после этой команды применить ClrScr, то поменяется цвет всего окна.
14. GotoXY(x,y); Перемещает курсор в позицию (x,y). Ближайший ввод или вывод начнётся с этой позиции.
15. ScrollingOff; / ScrollingOn; Отключает / включает прокрутку при выводе.
Кроме перечисленных команд для управления текстовым выводом, библиотека CRT содержит ещё две функции, помогающие при вводе отдельных символов с клавиатуры.
16. Ожидание нажатия одного символа: readkey; В разделе VAR объявляется переменная типа char для хранения одного символа. Используется она так: kl:=readkey;
17. В некоторых случаях нужно посмотреть нажатую клавишу, не ожидая её нажатия (не нажато, ну что ж, пойдём дальше). В этих случаях удобно использовать функцию keypressed; булевского типа. Она даёт true, если нажата хоть какая-нибудь клавиша и false, если ничего не нажато.
Обычно readkey и keypressed используют совместно: если нажато, посмотрим, что нажато. Например, if keypressed then kl:=readkey;
Рассмотрим пример задачи с использованием библиотеки CRT. Нужно организовать заставку к игре «Смертельная битва». Пусть слово «Смертельная» движется слева направо, а «битва» - немного ниже справа налево. Дойдя до середины, слова должны остановиться.
Движение организуем так: в цикле верхнее слово ставим каждый раз правее, а нижнее – левее. Чтобы за словами не оставался след, мы верхнее слово начинаем с пробела (который затирает предыдущую букву), а нижнее слово оканчиваем пробелом. Начальные и конечные координаты подбираем так, чтобы слова в последний раз стали ровно посередине экрана. Чтобы при движении курсор не моргал около слова, мы отключаем его.
program zastavka;
uses crt;
var
x1,x2:integer;
begin
TextSize(12); //Зададим размер символов
CRTWindowSize(80,25); //Зададим размер экрана
Textbackground(0); clrscr; //Затемним и очистим экран
textcolor(12); //Зададим красный цвет текста
x1:=1; x2:=69; //Задаём начальные координаты слов
HideCursor; //Отключим курсор
repeat
gotoxy(x1,12); write(' СМЕРТЕЛЬНАЯ'); //Верхнее слово
gotoxy(x2,14); write('БИТВА '); //Нижнее слово
sleep(50); //Делаем задержку
x1:=x1+1; x2:=x2-1; //Перемещаем слова
until x1>33;
end.
Команда sleep(50); позволяет замедлить движение.
Второй пример: Пусть слово «МЯЧИК» летает по экрану, отражаясь от его краёв. При каждом отражении слово меняет цвет. Остановка движения – по нажатию любой клавиши. Движение организуем так. Ставим слово в текущих координатах, делаем паузу и стираем слово (написав на его месте пробелы). Затем меняем координаты и ставим его на новом месте.
Следующая задача – более сложная, уже целый проект: Написать программу – клавиатурный тренажёр. В пустом окне сверху вниз движется случайно выбранная русская заглавная буква случайного цвета (след не затирается). Если нажать клавишу с этой буквой, новая буква начнёт падать в новом столбце. Если нажать неправильный символ, увеличивается счётчик ошибок, а буква продолжает падение. Если буква доходит до конца столбца, новая буква появляется в соседнем столбце. Когда заканчивается последний столбец, окно очищается, и выводятся результаты. Чем раньше мы нажимаем правильную букву, тем больше пустой остаток в данном столбце. Сумма таких остатков и будет нашим результатом – очками.
Для выбора случайной буквы мы придумаем случайный номер буквы (в пределах от 1 до 33) и возьмём её под этим номером из алфавита, который хранится в строковой переменной. (Подробности о работе со строками - при изучении этой темы).