Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 17:20   #1
Ильгизуля
Пользователь
 
Регистрация: 11.04.2013
Сообщений: 15
Восклицание делфи,движение

Здравствуйте! необходимо организовать движение окружности по квадрату и треугольнику.
Пыталась, что то сделать, но ничего хорошего не выходит.
Подскажите, пожалуйста, что делать?!
Код:
unit Unit1;

interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Mng(n,x0,y0,r:integer);
  end;
 
var
  Form1: TForm1;
  x,y,n,r,m:integer;
implementation
 
{$R *.dfm}
procedure TForm1.Mng(n,x0,y0,r:integer);

// x0,y0 - координаты центра фигуры
// r - радиус фигуры
     begin
     Canvas.pen.Color:=clRed;
       form1.Canvas.Ellipse(x-r,y-r,x+r,y+r);
     end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=false;
n:=0;
m:=0;
r:=40;
x:=clientwidth div 2;
y:=clientheight div 2;
Form1.Color:=ClWhite;//форма белая
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var dx,i:integer;
begin
Canvas.Brush.Color := ClWhite;//очистка Canvas
Canvas.FillRect(Canvas.ClipRect);
for n:=0  to 10 do begin
x:=x;
y:=y-10;
 Mng(n,x,y,r);
 Canvas.Brush.Color := ClWhite;//очистка Canvas
end;
for n:=10 to 20 do begin
 y:=y;
 x:=x-10;
 Mng(n,x,y,r);
 Canvas.Brush.Color := ClWhite;//очистка Canvas
end;


 for n:=20 to 30 do begin
 x:=x;
y:=y+10;
Mng(n,x,y,r)

end;


for n:=30 to 40 do begin
 y:=y;
 x:=x+10;
 Mng(n,x,y,r);
end;
    end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled:=true;
Timer1.Interval:=1000;
with Canvas do
 begin
  Pen.Color:=clRed;
    Ellipse(x-r,y-r,x+r,y+r);
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

 Timer1.Enabled := false;


end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Timer1.Enabled:=true;
Timer1.Interval:=1000;
with Canvas do
 begin
  Pen.Color:=clRed;
    Ellipse(x-r,y-r,x+r,y+r);
 end;
end;

end.
Ильгизуля вне форума Ответить с цитированием
Старый 23.05.2013, 19:09   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Такое движение по квадрату пойдет?
Код:
Const
  dx = 5;
  dy = 5;
  StartPos = 150;
Var
  xx1, xx2, yy1, yy2 : Integer;
  GoRight, GoUp : Boolean;
procedure DrawEllipse(Canva : TCanvas; x1, y1, x2, y2 : Integer; color : TColor);
Begin
  With canva do
  Begin
    pen.Color := color;
    pen.Width := 5;
    Ellipse(x1, y1, x2, y2);
  End;
End;
procedure RectangleWay();
Begin
  if (xx2 < Form1.Width - 50) and (GoRight) and not(GoUp) then
  Begin
    DrawEllipse(Form1.Canvas, xx1, yy1, xx2, yy2, Form1.Color);
    Inc(xx1, dx);
    Inc(xx2, dx);
    DrawEllipse(Form1.Canvas, xx1, yy1, xx2, yy2, clRed);
  End
  else
  if (yy2 < Form1.Height - 50) and not(GoUp) then
  Begin
    DrawEllipse(Form1.Canvas, xx1, yy1, xx2, yy2, Form1.Color);
    Inc(yy1, dy);
    Inc(yy2, dy);
    DrawEllipse(Form1.Canvas, xx1, yy1, xx2, yy2, clRed);
    GoRight := false;
  End
  else
  if (xx2 > StartPos) and not(GoRight) then
  Begin
    DrawEllipse(Form1.Canvas, xx1, yy1, xx2, yy2, Form1.Color);
    Dec(xx1, dx);
    Dec(xx2, dx);
    DrawEllipse(Form1.Canvas, xx1, yy1, xx2, yy2, clRed);
    GoUp := true;
  End
  else
  if (yy2 > StartPos) and (GoUp) then
  Begin
    DrawEllipse(Form1.Canvas, xx1, yy1, xx2, yy2, Form1.Color);
    Dec(yy1, dy);
    Dec(yy2, dy);
    DrawEllipse(Form1.Canvas, xx1, yy1, xx2, yy2, clRed);
    GoRight := true;
    if (yy2 <= StartPos) then
      GoUp := false
  End;
End;
procedure TForm1.FormActivate(Sender: TObject);
begin
  xx1 := 50;
  yy1 := 50;
  xx2 := 150;
  yy2 := 150;
  GoRight := true;
  GoUp := false;
  timer1.Interval := 10;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  RectangleWay();
end;
Если подойдет, по аналогии сделайте движение по треугольнику
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 23.05.2013, 19:23   #3
Ильгизуля
Пользователь
 
Регистрация: 11.04.2013
Сообщений: 15
По умолчанию

Спасибо большое!!!
Ильгизуля вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бросок к горизонту(паскаль+-делфи.(может ли кто помочь сделать с Паскаля АВС на Делфи?) extrimal Помощь студентам 8 24.03.2013 23:51
Движение со скоростью света и быстрее скорости света - Сверхсветовое движение Alar Свободное общение 354 13.11.2011 21:32
Движение колец и Движение линий сверху Iren1993 Помощь студентам 2 07.11.2011 19:48
движение alex(21) Паскаль, Turbo Pascal, PascalABC.NET 9 20.08.2009 00:08
Движение ломанной линии Делфи Walter Помощь студентам 8 23.05.2009 19:42