Перемещение объектов стрелками - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д