uses crt,graph;
Type arr=array [0..4] of integer;
{ А эта процедура рисует 1(один) шарик }
procedure ball(x0,y0,r,color:integer;s:string);
begin
setcolor(1); { Установка цвета }
setfillstyle(1,color);
circle(x0,y0,r); { рисуем кружок }
floodfill(x0,y0,1); { а теперь закрашиваем его }
setcolor(15);
outtextxy(x0-r div 2,y0-5,s); { печатаем символ ~ в центре}
end;
Procedure ZabivKoord(r:integer; Var massX:arr; var massY:arr);
Var
i:integer;
begin
massY[0]:=0;
for i:=1 to 4 do
begin
massX:=20;
massY:=massY[i-1]+{*}r*5; { Координаты по У, здесь (*)делаем шаг, }
{что бы шары не наезжали друг на друга }
end;
end;
{ В этой процедуре мы будем вырезать, а потом -вставлять вырезанное изображение}
procedure sdvig(x,y,r,d:integer);
Var size:longint;
p:pointer;
i:integer;
begin
Size := ImageSize(x-r-5, y-r-2, x+r+200, y+r+2);
GetMem(P, Size);
GetImage(x-r-2, y-r-2, x+r+200, y+r+2, P^); { копируем изображение}
begin
PutImage(x-13,y-13, P^,NormalPut); { вставляем изображение}
end;
end;
var
grDriver: Integer;
grMode: Integer;
x,y,r,fon,i,j:integer;
XO:arr; {в этом массиве хранятся координаты по х }
YO:arr; { соответсвенно в этом - по У}
s:string;
begin {MAIN}
grDriver := VGA;
grMode:=VGAHi;
InitGraph(grDriver, grMode,'d:\prog\tp7\bgi');
fon:=3;
r:=12;
setbkcolor(fon); {Цвет фона}
{ В массив ХО пишем координаты по Х, а в массив УО координаты по У }
ZabivKoord(r,XO,YO);
{ Рисуем 4 круга }
for i:=1 to 4 do
begin
str(i,s);
ball(XO,YO,r,i+i,s);
end;
readln;
for j:=1 to 256 do
begin
for i:=1 to 4 do
begin
sdvig(XO+j,YO,r,j);
readln; {Задержка до нажатия, причина - контроль на каждом шаге }
{ delay(5000);}
end;
end;
cleardevice;
readln;
End.
Pascal. Перемещение изображений. Без эфекта "мерцания"
Гонки шаров. Нарисовать 4 шара. Перемещать их практически до конца экрана. Скорость перемещения - случайное число.
Проблема:
Изображение на 2-3 шаге начинает криво вырезаться вставка тоже прохродит криво.
Код:
Код:
Мерцания вполне естественны. Предлагаю тебе переписать процедуры работы с графикой самому на асме и использовать двойную буферизацию (в данном случае переключение страниц видеопамяти). Тогда мерцаний не будет...