Перемещение рисунка
Цель работы - создать программу, в которой на поверхности окна перемещается случайным образом изображение веселой рожицы. Пользователь должен сделать щелчок кнопкой мыши по изображению. Программа должна завершить работу после того, как пользователь сделает 10 щелчков кнопкой мыши.
Начало игры осуществляется по нажатию на кнопку Ok.
Свойство WordWrap компонента Label – признак того, что слова, которые не помещаются в текущей строке, автоматически переносятся на следующую строку (значение свойства AutoSize должно быть False).
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Timer: TTimer;
Label1: TLabel;
Button1: TButton;
procedure TimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
{ объявление процедур помещено сюда,
чтобы процедуры имели прямой доступ
к форме, на которой они рисуют}
procedure PaintFace (x,y: integer); {рисует рожицу}
procedure EraseFace(x,y: integer); {стирает рожицу}
end;
var
Form1: TForm1;
fx,fy: integer; { координаты рожицы}
n: integer; { количество щелчков кнопкой мыши}
p: integer; { количество попаданий}
implementation
{ рисует рожицу}
procedure TForm1.PaintFace(x,y: integer);
begin
Canvas.Pen.Color := clBlack; { цвет линий}
Canvas.Brush.Color := clRed; { цвет закраски}
{ рисуем рожицу}
Canvas.Ellipse(x,y,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 TForm1.EraseFace(x,y: integer);
begin
{ зададим цвет границы и цвет закраски, совпадающий с цветом формы.}
{ По умолчанию цвет формы - clBtnFace }
Canvas.Pen.Color := clBtnFace; { цвет окружности}
Canvas.Brush.Color := clBtnFace; { цвет закраски}
Canvas.Ellipse(x,y,x+30,y+30);
end;
{$R *.dfm}
procedure TForm1.TimerTimer(Sender: TObject);
begin
EraseFace(fx,fy);
{ новое положение рожицы}
fx:= Random(ClientWidth-30); { 30 - это диаметр рожицы}
fy:= Random(ClientHeight-30);
PaintFace(fx,fy);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{ исходное положение рожицы}
fx:=100;
fy:=100;
Randomize; { инициализация генератора случайных чисел}
end;
procedure TForm1.FormMouseDown(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;
Button1.Visible := True;
{ теперь кнопка и сообщение снова видны}
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Visible := False; { скрыть сообщение}
Button1.Visible := False; { скрыть кнопку}
Timer.Enabled := True; { пуск таймера}
end;
end.