Содержание материала

 

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;

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить