Рисования в Pascal, Рисования елипсов |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Рисования в Pascal, Рисования елипсов |
kolian |
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Коля Репутация: 0 |
У меня есть заданной алгоритм, который при клике мишки рисует один елипс.Как сделать что бы при каждом клике рисовалось столько елипсов сколько было кликов?
|
@nto$ka |
Сообщение
#2
|
Новичок Группа: Пользователи Сообщений: 38 Пол: Мужской Репутация: 0 |
Заведи глобальную переменную. По нажатию кнопки увеличивай ее значение. Затем, какое значение - столько эллипсов и рисуй
|
kolian |
Сообщение
#3
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Коля Репутация: 0 |
Я новичок и не понимаю как ето реализовать не могли бы Вы мне сделать пример?
|
kolian |
Сообщение
#4
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Коля Репутация: 0 |
Помогите кто то!Срочно нужно
|
@nto$ka |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 38 Пол: Мужской Репутация: 0 |
Цитата Вы мне сделать пример За тебя здесь никто ничего делать не будет. покажи что есть. |
kolian |
Сообщение
#6
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Коля Репутация: 0 |
Код 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. |
Текстовая версия | 12.01.2025 8:14 |