Таймеры позволяют выполнять указанное действие периодически через равные промежутки времени. Процедуры и функции для управления таймерами содержатся в модуле Timers.
Функция CreateTimer(ms,TimerProc) создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре без параметров TimerProc, и возвращает его целочисленный описатель. Созданный таймер сразу же запускается.
Процедура StartTimer(n) запускает таймер с описателем n.
Процедура StopTimer(n) останавливает таймер с описателем n.
Процедура SetTimerInterval(n,ms) устанавливает у таймера с описателем n интервал в ms миллисекунд.
Функция TimerInterval(n) возвращает интервал у таймера с описателем n.
Функция TimerEnabled(n) возвращает True, если таймер запущен, и False в противном случае.
Процедура DestroyTimer(n) разрушает таймер с описателем n.
Для периодического вызова процедуры таймера необходимо после его создания продолжить выполнение приложения. Это можно сделать, подключив модуль Events.
uses Timers,Events;
procedure TimerProc1;
begin
write(1);
end;
procedure TimerProc2;
begin
write(2);
end;
var
t1,t2: integer;
begin
t1:=CreateTimer(200,TimerProc1); t2:=CreateTimer(300,TimerProc2);
end.
Пример:
Для плавного управления клавиатурой при создании игры недостаточно средств модуля CRT или использования событий клавиатуры. Можно использовать стороннюю библиотеку UKEYB. Она несовместима с CRT, поэтому при её подключении CRT нужно исключить из списка модулей, и все подпрограммы из CRT заменить аналогами из UKEYB.
UKEYB содержит такие функции для работы с клавиатурой:
Функция ispressed(key:integer):boolean; проверяет, нажата ли клавиша, заданная параметром.
Функция is_any_key:boolean; проверяет, нажата ли хоть какая-нибудь клавиша.
Функция arrow_dir:byte; проверяет, куда нажаты клавиши-стрелки. (0-не нажаты, 1-8 - от вертикали по часовой стрелке)
При вызове ispressed удобно вместо кода клавиши использовать перечисленные ниже константы:
Библиотека UKEYB содержит также средства для работы с мышью:
Функция mousebutton возвращает 0, если кнопки мыши не нажаты, 1 – левая, 2 – правая кнопки мыши и 4 – нажато колёсико.
Функция SetMouseCursorOff убирает курсор мыши из окна, а SetMouseCursorOn восстанавливает его.
Функции MouseX и MouseY дают координаты левой верхней точки курсора.
program krugok;
uses graphabc,ukeyb;
begin
randomize;
setmousecursoroff;
lockdrawing;
setbrushcolor(clred);
repeat
clearwindow(clblack);
circle(mousex,mousey,20);
redraw;
if mousebutton=1 then
begin
setbrushcolor(random(clwhite));
sleep(50);
end;
until is_any_key;
end.
В качестве примера рассмотрим программу, которая перемещает кружок по движению мыши, а нажатие левой кнопки мыши меняет цвет кружка:
[1] Однако, работы в этом направлении (искусственный интеллект) ведутся.