Постановка задачи. В случайном месте формы рисуется небольшой кружок заданного радиуса и произвольного цвета. Одновременно запускается таймер, и играющий должен успеть щелкнуть по кружку. Число попаданий и число щелчков подсчитываются. Игра продолжается до 10 щелчков.
Реализация. Положите на форму таймер, установите подходящий интервал. Положите одну кнопку «Старт». Кнопка сначала видна, по ее нажатию обнуляются счетчики, и запускается таймер, а также свойству Button1.Visible присваивается значение false. Во время игры кнопка уже не видна. После 10 выстрелов форма очищается, и кнопка вновь видна. Число попаданий и выстрелов будем выводить в строке Form1.Caption (рис. 17).
Рис. 17. Форма проекта «Попади в мишень»
Потребуется написать процедуру mishen рисования кружка заданного цвета с использованием стандартного метода Ellipse.Используем следующие глобальные переменные
{Переменные х, у – «экранные» координаты точки щелчка, поэтому пересчитаем их так, чтобы значения х1, у1 «были» внутри мишени }
x1:=abs(x-a)-rad div 2;
y1:=abs(y-b)-rad div 2;
if (x1*x1+y1*y1<=rad*rad) then
// Указатель мыши внутри мишени
begin
popal:=popal+1;
end;
Form1.Caption:='Выстрелов: '+IntToStr(vist)+
' Попаданий: '+IntToStr(popal);
if vist = 10 then
Begin
Timer1.Enabled:=false;
with Canvas do
begin
Font.Size:=24;
Font.Color:=ClTeal;
Brush.Color:=Form1.Color;
TextOut(70,80,'Игра окончена');
end;
Button1.Visible:=true; // Можем начать сначала
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
vist:=0;
popal:=0;
// Очистим форму
with Canvas do
begin
Pen.Color:=Form1.Color;
Brush.Color:=Form1.Color;
Rectangle(0,0,cw,ch);
end;
Timer1.Enabled:=true;
Button1.Visible:=false; // Кнопка невидима
end;
На рис. 18 нарисован «один миг» из игры.
Рис. 18. Игра «Попади в мишень»
Задание. Вместо кружка нарисуйте симпатичную картинку, создайте переменную класса TBitMap и загрузите картинку в эту переменную с помощью метода LoadFromFile. «Стирать» картинку можно рисованием прямоугольника цветом формы.