Перемещение объектов стрелками - PascalABC.NET
Формулировка задачи:
Круг- управляемый объект, прямоугольник-свободный (движется сам по заданной траектории). Заранее спасибо!
Решение задачи: «Перемещение объектов стрелками»
textual
Листинг программы
uses ABCObjects, GraphABC, Timers;
const h=500; //ВЫСОТА ОКНА
w=800; //ШИРИНА ОКНА
var x_c:integer :=100; //Х КРУГА
y_c:integer :=h div 2; //У КРУГА
r_c:integer :=30; //РАДИУС КРУГА
cir_sh:=5; //ШАГ ПЕРЕМЕЩЕНИЯ КРУГА
h_r:integer :=50; //ВЫСОТА ПРЯМОУГОЛЬНИКА
w_r:integer :=80; //ШИРИНА ПРЯМОУГОЛЬНИКА
x_r:integer :=w-w_r-10; //Х ПРЯМОУГОЛЬНИКА
y_r:integer :=10; //У ПРЯМОУГОЛЬНИКА
v_r:integer :=1; //СКОРОСТЬ ПРЯМОУГОЛЬНИКА (ЧЕМ НИЖЕ ЗНАЧЕНИЕ, ТЕМ ВЫШЕ СКОРОСТЬ)
l_r1:boolean :=true; //НАПРАВЛЕНИЕ ПРЯМОУГОЛЬНИКА ПО ВЕРТИКАЛИ
l_r2:boolean :=true; //ПОЛОЖЕНИЕ ПРЯМОУГОЛЬНИКА НА ГОРИЗОНТАЛИ
rec_sh:=2; //ШАГ ПЕРЕМЕЩЕНИЯ ПРЯМОУГОЛЬНИКА
cir:=new CircleABC(x_c+r_c,y_c+r_c,r_c,clred); //КРУГ
rec:=new RectangleABC(x_r,y_r,w_r,h_r,clblue); //ПРЯМОУГОЛЬНИК
procedure Moving_cir(a:integer);
begin
case a of
87:dec(y_c,cir_sh);
65:dec(x_c,cir_sh);
83:inc(y_c,cir_sh);
68:inc(x_c,cir_sh);
end;
cir.MoveTo(x_c,y_c);
end;
procedure Moving_rec;
begin
//ЗДЕСЬ ЗАДАЁТСЯ ШАГ ТРАЕКТОРИИ ПРЯМОУГОЛЬНИКА
if l_r1 then inc(y_r,rec_sh) else dec(y_r,rec_sh);
if (y_r<=10) or (y_r>=h-h_r-10) then if l_r1 then l_r1:=false else l_r1:=true;
{if (rec.PtInside(x_c+r_c,y_c)) or (rec.PtInside(x_c+r_c+r_c,y_c+r_c)) or (rec.PtInside(x_c+r_c,y_c+r_c+r_c)) or (rec.PtInside(x_c,y_c+r_c))
then if l_r2 then
begin
x_r:=10;
l_r2:=false;
end else
begin
x_r:=w-w_r-10;
l_r2:=true;
end;} {ЕСЛИ КРУГ СОПРИКОСНУЛСЯ С ПРЯМОУГОЛЬНИКОМ, ОН ПЕРЕМЕСТИТСЯ НА ДРУГОЙ КОНЕЦ ОКНА}
rec.MoveTo(x_r,y_r);
end;
procedure Settings;
begin
SetWindowSize(w,h);
window.Title:='Перемещение объектов';
window.IsFixedSize:=true;
end;
var t:=new Timer(v_r,Moving_rec); //ТАЙМЕР
begin
Settings;
t.Start;
OnKeyDown+=Moving_cir;
end.