Draw Screen
Основной код находится в процедуре DrawScreen. Эта процедура вызывается внутри события OnTimer компонента Timer.
Code: |
procedure DrawScreen; var r1, r2: TRect; Direction: integer; begin r1:=Rect(rW * gx , rH * gy, rW * gx + rW , rH * gy + rH);
Direction := Trunc(Random*4); case Direction of 0: gx := Abs((gx + 1) mod DELTA); //право 1: gx := Abs((gx - 1) mod DELTA); //лево 2: gy := Abs((gy + 1) mod DELTA); //низ 3: gy := Abs((gy - 1) mod DELTA); //верх end; //case
r2 := Rect(rW * gx , rH * gy, rW * gx + rW , rH * gy + rH);
with Shuffler.Image1.Canvas do begin CopyRect(r1, Shuffler.Image1.Canvas, r2); CopyRect(r2, redRect.Canvas, redRect.Canvas.ClipRect); end; end; |
Несмотря на кажущуюся сложность кода, он очень прост в использовании. Менять местами можно только части смежные с redRect, поэтому доступны только 4 возможных направления. Прямоугольник r1 содержит текущию позицию redRect, r2 указывает на прямоугольник с блоком, который был перемещён. CopyRect используется для перемещения выбранного блока на место redRect и рисования redRect его в новом месте - таким образом осуществляется обмен этих двух блоков.
Было бы приятней наблюдать анимированный обмен блоков, но я оставлю эту задачу для самостоятельного решения.
Не забудьте по событию OnTimer для компонента Timer написать: DrawScreen;
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!