Помощь - Поиск - Пользователи - Календарь
Полная версия: Рисования в Pascal
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
kolian
У меня есть заданной алгоритм, который при клике мишки рисует один елипс.Как сделать что бы при каждом клике рисовалось столько елипсов сколько было кликов?
@nto$ka
Заведи глобальную переменную. По нажатию кнопки увеличивай ее значение. Затем, какое значение - столько эллипсов и рисуй
kolian
Я новичок и не понимаю как ето реализовать не могли бы Вы мне сделать пример? smile.gif
kolian
Помогите кто то!Срочно нужно
@nto$ka
Цитата
Вы мне сделать пример


За тебя здесь никто ничего делать не будет. покажи что есть.
kolian
Код
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls;

type

  { TForm1 }

  Ttargan = class
    public
      x,y      : double;
      golod    : integer;
      stan     : integer;
      { 0 - стою
        1 - Гуляю
        2 - Біжу до їжі
        3 - Їм!
        4 - Тікаю до темного
      }
      dov_krok : double;

      procedure BigtiDo( a,b:double); //Змінити координати таргана, щоб був ближще до вказаної точки
      procedure Gulyaty; //Робимо випадковий рух, гуляємо
      procedure ZminityStan( svitlo: integer; a,b:double; var izha:integer); //За правилами скінченного автомату міняємо стан
      procedure Isty( a,b:double; var izha:integer);  //Якщо їжа досяжна - істи
      procedure Tikaty;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    CheckBox1: TCheckBox;
    IdleTimer1: TIdleTimer;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure IdleTimer1Timer(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { private declarations }
  public
    { public declarations }
    Izha : integer; //Кількість їжі
    A,B  : integer; //Координати їжі
    targan: array [0..50] of Ttargan;
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;  //Створюємо початкові стани тарганам
begin
  for i:=0 to 50 do
  begin
    targan[i] := Ttargan.Create;
    targan[i].x:=random(400)+50;
    targan[i].y:=random(400)+50;
    targan[i].golod:=random(200);
    targan[i].dov_krok:=5;
    targan[i].stan:=0;
  end;
  Image1.Canvas.Brush.Color:=0;
  Image1.Canvas.FillRect(0,0,511,511);
  Izha := 0;
end;

procedure TForm1.IdleTimer1Timer(Sender: TObject);
begin
  Button2Click(Sender);
  Button1Click(Sender);
end;

procedure TForm1.Image1Click(Sender: TObject);
begin

end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  A := X; B := Y; Izha := 600;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer; //Малюємо стадо тарганів
begin
  if CheckBox1.Checked then
    Image1.Canvas.Brush.Color:=127+127*256+127*256*256
  else
    Image1.Canvas.Brush.Color:=0;


  Image1.Canvas.FillRect(0,0,511,511);
  Image1.Canvas.Pen.Color:=255*256;
  for i:=0 to 50 do
  begin
    Image1.Canvas.EllipseC(round(targan[i].x),round(targan[i].y),2,2);
  end;
  if Izha>0 then
  begin
    Image1.Canvas.Pen.Color:=255;
    Image1.Canvas.EllipseC(A,B,1+round(Izha/100),1+round(Izha/100));
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,c:integer;
begin
  if CheckBox1.Checked then c:=1 else c:=0;
  for i:=0 to 50 do
  begin
    if targan[i].golod>0 then  targan[i].golod:= targan[i].golod-1;
    if Izha>0 then targan[i].ZminityStan(c,A,B,Izha)
    else  targan[i].ZminityStan(c,-100,-100,Izha);
  end;
end;

{$R *.lfm}

procedure Ttargan.BigtiDo( a,b:double);
var D : double;
begin
  D := sqrt( sqr(a-x)+sqr(b-y) );
  x := x + 1.5*dov_krok*(a-x)/D;
  y := y + 1.5*dov_krok*(b-y)/D;
end;

procedure Ttargan.Gulyaty;
var a,b,D:double;
begin
  a := random(512);
  b := random(512);
  D := sqrt( sqr(a-x)+sqr(b-y) );
  x := x + 0.5*dov_krok*(a-x)/D;
  y := y + 0.5*dov_krok*(b-y)/D;
end;

procedure Ttargan.ZminityStan( svitlo: integer; a,b:double; var izha:integer);
begin
  if svitlo=1 then
  begin
    stan:=4;
    Tikaty;
  end else
  if stan=0 then
  begin
    if golod=0 then stan:=1;
    if random(2)=1 then stan:=1;
  end else
  if stan=1 then
  begin
    Gulyaty;
    if (a>0)and(golod=0) then
    begin
      stan:=2;
    end;
    if golod>0 then if random(2)=0 then stan:=0;
  end else
  if stan=2 then
  begin
    if a<0 then stan:=1 else Isty(a,b,izha);
    if golod=200 then stan:=0;
  end else
  if stan=4 then
  begin
    if svitlo=0 then stan:=0;
  end;
end;

procedure Ttargan.Isty( a,b:double; var izha:integer);  //Якщо їжа досяжна - істи
var D : double;
begin
  D := sqrt( sqr(a-x)+sqr(b-y) );
  if( D< 1.5*dov_krok ) then
  begin
    izha := izha - 1;
    golod := golod + 4;
  end else
  begin
    BigtiDo(a,b);
  end;

end;

procedure Ttargan.Tikaty;
begin
  if x<y then
  begin
    if x<(512.0-y) then BigtiDo(x,512.0) else BigtiDo(0,y);
  end else
  begin
    if y<(512.0-x) then BigtiDo(512.0,y) else BigtiDo(x,0);
  end;
end;


end.
                                        
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.