Графика и мультимедиа 361

Imagel->Canvas->MoveTo(Xpos,Yhead+4) ;

Imagel->Canvas->LineTo(Xpos+revers*L,Yhead+4) ;

Imagel->Canvas->Ellipse(Xpos+revers*L-Rhead2,Yhead+4-Rhead2,

Xpos+revers*L+Rhead2,Yhead+4+Rhead2)
Imagel->Canvas->Ellipse(Xpos-Rhead,Yhead,Xpos+Rhead,

Yhead-2*Rhead) ;

Imagel->Canvas->Rectangle(Xpos-H / 2,Yhead-2*Rhead-l,

Xpos+H / 2,Yhead-2*Rhead-4);

/————————————————————————-

aid _fastcall TFormI::TimerlTimer(TObject *Sender)

3raw() ;

i-f ( (Xpos >= Imagel-:?Picture->Width-H) | | (Xpos <= H) )
revers = -revers;

<pos = Xpos + revers * H;

ium = 1 — num;

3raw() ;

/————————————————————————-

3id _fastcall TFormI::BRunClick(TObject *Sender)

rimerl->Enabled - ! Timerl->Enabled;

//—————————————————————————-

void _fastcall TFormI::FormCreate(TObject *Sender)
f

Image!->Canvas->MoveTo(0,Ypos+3);

Imagel->Canvas->Pen->Width = 4;

Imagel->Canvas->LineTo(Imagel->ClientWidth,Ypos+3); // земля

Imagel->Canvas->Pen->Width = 1;

Imagel->Canvas->Pen->Mode = pmNotXor;

Draw() ;

}

Начнем анализ этого кода с конца — с последней процедуры FormCreate, яв-
ляющейся обработчиком события OnCreate формы. В этой процедуре рисуется ли-
ния, отображающая «землю», по которой будет ходить наш человечек. Затем уста-
навливается режим пера pmNotXor. И в заключение вызывается процедура Draw,
которая рисует исходное положение человечка.

Процедура BRunClick является обработчиком события OnClick кнопки. Каж-
дый щелчок на кнопке включает или выключает таймер, в результате чего челове-
чек идет или останавливается.

Процедура TimerlTimer является обработчиком события OnTimer таймера.
Это событие означает, что надо стереть прежний кадр и нарисовать новый. Снача-
ла вызывается процедура Draw. Поскольку позиция человечка с момента показа
предыдущего кадра не изменилась, то этот вызов рисует на том же самом месте, на
котором рисовался предыдущий кадр. Следовательно, предыдущий рисунок стира-
ется. Затем анализируется позиция человечка Xpos. Если эта позиция отстоит от
какого-либо конца холста Imagel на величину, меньшую шага H, то изменяется
на обратный знак переменной revers, характеризующей направление движения.
Если revers = 1, человечек шагает вправо; если revers = -1, человечек шагает вле-
во. Затем позиция Xpos изменяется на величину revers * H, т.е. на шаг вправо или
влево. Изменяется переменная num, которая указывает номер высвечиваемого
кадра: 0 или 1. В заключение вызывается процедура Draw, которая рисует указан-
ный кадр в указанной позиции.

Последняя процедура, которую мы рассмотрим — процедура Draw, рисующая
кадр. Она достаточно длинная, но в ней нет ничего сложного. В зависимости от