unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TPoint = object
private
x, y : integer; {Êîîðäèíàòè}
figure : TShape;
public
end;
TCircle = object(TPoint)
private
radius : integer; {Äîäàíî ïîëå äëÿ ðàä³óñà êîëà}
public
end;
TRoundRect = object(TPoint)
private
w, h: integer;
public
end;
var
Form1: TForm1;
Point : TPoint;
Circle : TCircle;
RoundRect : TRoundRect;
count : integer;
implementation
{$R *.dfm}
constructor Create(a, b : integer; owner : TWinControl);
{²í³ö³àë³çóº ïîëÿ êîîðäèíàò ÷èñëàìè à ³ Ü;
owner- îá'ºêò, íà ÿêîìó ðèñóºòüñÿ òî÷êà}
procedure Show; {Ðèñóº òî÷êó ïîòî÷íèì êîëüîðîì }
procedure Hide; {Âèòèðຠòî÷êó }
procedure Draw(vis : boolean); virtual;
{³ðòóàëüíà ïðîöåäóðà, ÿêà âèêîðèñòîâóºòüñÿ ìåòîäàìè Show ³ Hide}
procedure Set_Color(color: TColor);
procedure Move(dx, dy : integer); {Ïåðåì³ùóº òî÷êó íà}
end; {dx ïðàâîðó÷ ³ íà dy âíèç}
constructor TPoint.Create(a, b : integer; owner : TWinControl);
begin
figure := TShape.Create(nil); {Ñòâîðþºìî îá'ºêò TShape}
figure.Parent := owner; {Ðîçì³ùóºìî éîãî íà owner}
figure.Visible := false; {"Ãàñèìî" éîãî äî âèêëèêó ìåòîäó Show}
õ := à; ó := Ü; {Çàïàì'ÿòîâóºìî êîîðäèíàòè}
end;
procedure TPoint.Draw(vis : boolean); begin
with figure do {Ïðàöþâàòèìåìî ç âëàñòèâîñòÿìè îá'ºêòà figure} begin
shape := stCircle; {Òî÷êà - öå êîëî ç ðàä³óñîì 1 ï³êñåëü}
brush.Style := bsClear; {Êîëî âñåðåäèí³, íå çàëèòå êîëüîðîì]
width := 2; {Øèðèíà ô³ãóðè - 2 ï³êñåë³}
height := width; {Âèñîòà ô³ãóðè - 2 ï³êñåë³}
left := õ - 1; top := ó - 1; {Êîîðäèíàòè left òà top îá'ºêòà figure
ðîçòàøîâàí³ â ¿¿ ë³âîìó âåðõíüîìó êóò³, òîìó çì³ùóºìîñÿ òóäè â³ä
êîîðäèíàò (õ; ó), çàäàíèõ ÿê öåíòð êîëà ç ðàä³óñîì 1 ï³êñåëü}
visible := vis; {Çàñâ³÷óºìî ÷è ãàñèìî òî÷êó}
end
end;
procedure TPoint.Set_Color(color: TColor); begin
figure.Pen.Color := color; {Çàäàºìî êîë³ð äëÿ figure}
end;
procedure TPoint.Show;
begin
Draw(true); {Çàñâ³÷óºìî òî÷êó - êîëî ðàä³óñà 1 ï³êñåëü}
end;
procedure TPoint.Hide ;
begin
Draw( false); {Ãàñèìî òî÷êó}
end;
procedure TPoint.Move(dx, dy: integer);
begin
Hide; {Ãàñèìî òî÷êó}
with figure do
begin
x := x + dx; ó := ó + dy; {Çì³ùóºìî êîîðäèíàòè òî÷êè íà dx, dy}
end;
Show; {Çàñâ³÷óºìî òî÷êó íà íîâîìó ì³ñö³}
end;
{-----------------------------------------------------}
var Point: TPoint;
begin {Ñòâîðþºòüñÿ òî÷êà â ïîçèö³¿(25,10) íà Forml}
Point. Create( 25,10, Form1);
Point.Show; {Òî÷êà Point "çàñâ³÷óºòüñÿ" ³}
Point.Move(35, 70); {ïåðåíîñèòüñÿ íà 35 ï³êñåë³â ïðàâîðó÷ ³ 70}
Point.Hide; {ï³êñåë³â ë³âîðó÷, "ãàñèòüñÿ" ³ ò.ä.}
{-----------------------------------------------------}
constructor
Create(a, b, ñ : integer; owner : TWinControl);
procedure Draw(vis : boolean); virtual;
end;
{implementation }
constructor Circle.Create(a, b, ñ : integer; owner : TWinControl);
begin {Âèêëèêàºìî êîíñòðóêòîð áàçîâîãî êëàñó}
inherited Create(a, b, owner);
radius :=c; {Çáåð³ãàºìî ðàä³óñ}
end;
procedure TCircle.Draw(vis : boolean);
begin
inherited;
with figure do
begin {Êîîðäèíàòè ô³ãóðè çàäàþòüñÿ ¿¿ ë³âèì âåðõí³ì êóòîì}
left: = õ radius; top := ó radius;
width := 2 * radius; {Øèðèíà ³ âèñîòà äîð³âíþº äâà ðàä³óñè}
height := width;
end
end;
constructor Create(a, b, c, d : integer; owner : TWinControl);
procedure Draw(vis : boolean); virtual;
end;
{implementation}
constructor TRoundRect.Create(a, b, c, d: integer; owner: TWinControl);
begin
inherited Create(a, b, owner);
w := c; h := d;
end;
procedure TRoundRect.Draw(vis : boolean);
begin
inherited;
with figure do
begin
shape := stRoundRect;
width := w; height := h;
left := x wdiv2; top := ó hdiv2;;
end
end;
procedure TPoint.Show; begin
Draw(true); {Âèêëèêຠìåòîä Draw}
end;
procedure TPoint.Draw(vis : boolean);
begin
with figure do
begin
shape := stCircle; brush.Style := bsClear;
width := 2; {Øèðèíà ô³ãóðè - 2 ï³êñåë³}
height := width; {Âèñîòà ô³ãóðè - 2 ï³êñåë³}
left:=x 1; top:=y 1;
visible := vis; {Áóäå íàðèñîâàíà òî÷êà, à íå êîëî }
end
end;
procedure Draw(vis:boolean); virtual;
procedure TCircle.Draw(vis : boolean);
{Áóäå íàðèñîâàíå êîëî}
begin
inherited;
with figure do
begin
left := x radius; top := ó radius;
width :=2 * radius; height := width;
end
end;
procedure TForml.FormCreate(Sender : TObject);
var ³, middleX, middleY : integer;
begin
Panell.Color := clBlack; {Çà÷îðíþºìî ïàíåëü ì³øåí³}
count := 0; {Îáíóëþºìî ë³÷èëüíèê}
middleX := Panell .ClientWidth div 2; {Ñåðåäèíà ïàíåë³ ó øèðèíó}
middleY := Panell.ClientHeight div 2; {Ñåðåäèíà ïàíåë³ ó âèñîòó}
{Ñòâîðþºìî ïðÿìîêóòíèê}
RoundRect.Create(middleX, middleY, 30, 20, Panel1);
RoundRect.Set_Color(clLime); {Ñâ³òëî-çåëåíèì êîë³ðüîðîì)
RoundRect.Show ; {ìàëþºìî ïðÿìîêóòíèê }
for ³ := 1 to 10 do {Ìàëþºìî 10 êîíöåíòðè÷íèõ ê³ë}
begin {Ñòâîðþºìî êîëî}
Circle.Create(middleX, middleY, ³ * 10, Panel1);
Circle. Set_Color(cl Yellow); {Ñâ³òëî-æîâòèì êîëüîðîì}
Circle.Show ; {ìàëþºìî êîëà}
end
end;
procedure TForml.ButtonlClick(Sender: TObject);
var xl, yl, shiftX, shiftY : integer;
begin
randomize;
ShiftX := random(100) mod 3 1; {Äâà âèïàäêîâ³ ÷èñëà ìíîæèíè)
ShiftY := random( 100) mod 3 1; {{1,0,1) äëÿ çì³ùåííÿ)
RoundRect.Move( ShiftX * 8, ShiftY * 8); {ïðÿìîêóòíèêà)
{Çì³ùóºìî ïðÿìîêóòíèê íà 8 ï³êñåë³â ó âèïàäêîâîìó íàïðÿìêó)
with RoundRect.figure do {Ðîçãëÿíåìî RoundRect.figure)
begin {Öå êîîðäèíàòè âèïàäêîâî¿ òî÷êè â äåÿêîìó îêîë³)
xl := left + (random(120) 60); {ö³ë³ - òî÷êà âëó÷åííÿ)
yl := top + (random(80) 40);
Point.Create(xl, yl, Panel1); {Ñòâîðþºìî òî÷êó)
Point.Set_Color(clWhite); {Á³ëèì êîëüîðîì)
Point.Show ; {ìàëþºìî òî÷êó)
if (xl > Left) and (xl < left + width) {ßêùî âëó÷åííî ó ö³ëü,}
and (yl > top) and (yl < top + height) then
begin
messagedlg('Âëó÷åííÿ!!', mtInformation, [mbOk], 0);
inc(count); {çá³ëüøóºìî ë³÷èëüíèê âëó÷åíü)
end;{if}
if (left < 0) or (left + width > Panel1.ClientWidth) {ßêùî ö³ëü)
or (top < 0) or (top + height > Panel1.ClientHeight) then
begin {âèéøëà ³ç çîíè ïðèö³ëó (çà ïàíåëü)}
messagedlg('ʳíåöü ãðè! Óñüîãî áóëî ' + inttostr(count) + ' âëó÷åíü.',
mtInformation, [mbOk], 0);
Forml.Close ; {Çàê³í÷óºìîðîáîòó)
end {if}
end {with}
end;
end;
end.