Рис. 1.20. Звезда

unit Stars_;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtris;type
TFontil class (TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations I
procedure StarLine(xO,yO,r: integer); // рисует звезду
end;var
Forml: TForml;implementation{$R *.dfm}// рисует звезду
procedure TForml.StarLine(xO,yO, r: integer);
// xO,yO — координаты центра звезды
//г — радиус звезды
var
р : array[1..11] of TPoint; // массив координат лучей и впадин
a: integer; // угол между осью ОХ и прямой, соединяющей
// центр звезды и конец луча или впадину
i: integer;
begin
а := 18; // строим от правого гор. луча
for i:=l to 10 do
begin
if (i mod 2=0) then
begin // впадина
p[i].x := xO+Round(r/3*cos(a*2*pi/360)) ;
p[i].y:=yO-Round(r/3*sin(a*2*pi/360) ) ;
end
else
begin // луч
i].x:=xO+Round(r*cos(a*2*pi/360) ) ;
i].y:=yO-Round(r*sin(a*2*pi/360)) ;
end;
a := a+36;
end; p[ll].X := p[l].X; // чтобы замкнуть контур звезды
р[11].Y := р[1].Y; Canvas.Polyline(p); // начертить контур звезды
end;// нажатие кнопки мыши
procedure TForml.FonnMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft // нажата левая кнопка?
then Canvas.Pen.Color := clBlack
else Canvas.Pen.Color := clRed;
StarLine(x, y, 30);
end;end.
26. Напишите программу, по поверхности окна которой пере-
мещается случайным образом (прыгает) изображение веселой
рожицы, на котором пользователь может сделать щелчок кноп-
кой мыши. Программа должна завершить работу после того, как
пользователь сделает 10 щелчков кнопкой мыши. Рекомендуе-
мый вид окна в начале работы программы приведен на рис. 1.21.
unit tir_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
Рис. 1.21. Окно программы Тир

type
TForml class(TForm)
Timer: TTimer;
Label1: TLabel;
Buttonl: TButton;
procedure TimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ForrnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ButtonlClick(Sender: TObject);
private
I Private declarations j
public
/ Public declarations }
объявление процедур помещено сюда,
чтобы процедуры имели прямой доступ
к форме, на которой они рисуют
****************************** , procedure PaintFace(x,у: integer); // рисует рожицу
procedure EraseFace(x,у: integer); // стирает рожицу
end;var
Forml: TForml;
fx,fy: integer; // координаты рожицы
n: integer; // количество щелчков кнопкой мыши
р: integer; // количество попаданий
implementation// рисует рожицу
procedure TForml.PaintFace(x,y: integer);
begin
Canvas.Pen.Color := clBlack; // цвет линий
Canvas.Brush.Color := clYellow; // цвет закраски
// рисуем рожицу
Canvas.Ellipse(х,у,x+30,Y+30); // лицо
Canvas.Ellipse(x+9,y+10,x+11,y+13); // левый глаз
Canvas.Ellipse(x+19,y+10,x+21,y+13); // правый глаз
Canvas.Arc(x+4,y+4,x+26,y+26,x,y+20,x+30,y+20); // улыбка
end;// стирает рожицу
procedure TForml.EraseFace(x,у: integer);
begin
// зададим цвет границы и цвет закраски,
// совпадающий с цветом формы. По умолчанию
// цвет формы - clBtnFace (см. в Object Inspector)
Canvas.Pen.Color := clBtnFace; // цвет окружности
Canvas.Brush.Color := clBtnFace; // цвет закраски
Canvas.Ellipse(x,y,x+30, y+30) ;
end;{$R *.dfm)procedure TForml.TimerTimer(Sender: TObject);
begin
EraseFace(fx,fy);
// новое положение рожицы
fx:= Random(ClientWidth-30); // 30 - это диаметр рожицы
fy:= Random(ClientHeight-30) ;
PaintFace(fx,fy);
end;procedure TForml.FormCreate(Sender: TObject);
begin
// исходное положение рожицы
fx:=100;
fy:=100;
Randomize; // инициализация генератора
// случайных чисел
end;
// нажатие клавиши мыши
procedure TForml.ForroMouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
inc(n); // кол-во щелчков if (x > fx) and (x < fx+30) and
(y > fy) and (y < fy+30)
then begin
// щелчок по рожице
inc(p);
end;
if n = 10 then
begin
// игра закончена
Timer.Enabled := False; // остановить таймер
ShowMessage('Выстрелов: 10. Попаданий: ' +
IntToStr(p)+'.'); EraseFace(fx,fy); •
Label1.Visible := True;
Buttonl.Visible := True;
// теперь кнопка и сообщение снова видны
end;
end;

// щелчок на кнопке Ok
procedure TForml.ButtonlClick(Sender: TObject);
begin
Labell.Visible := False; // скрыть сообщение
Buttonl.Visible := False; // скрыть кнопку
Timer.Enabled := True; // пуск таймера
end;end.