Свойство
|
Значение
|
Пояснение
|
Caption
|
Попадания:
|
Надпись метки
|
Font.Color
|
clLime
|
Цвет шрифта – светло-зеленый
|
Font.Name
|
Courier New
|
Название шрифта
|
Font.Size
|
12
|
Размер шрифта
|
Font.Style
|
{fsBold}
|
Начертание шрифта – полужирное
|
Left
|
16
|
Отступ слева
|
Top
|
16
|
Отступ сверху
|
Разместите на форме еще один компонент Label и измените его свойства согласно таблице:
Свойство
|
Значение
|
Пояснение
|
Name
|
popad
|
Новое имя компонента
|
Caption
|
0
|
Надпись метки
|
Font.Color
|
clRed
|
Цвет шрифта – красный
|
Font.Name
|
Courier New
|
Название шрифта
|
Font.Size
|
16
|
Размер шрифта
|
Font.Style
|
{fsBold}
|
Начертание шрифта – полужирное
|
Left
|
120
|
Отступ слева
|
Top
|
16
|
Отступ сверху
|
Разместите на форме третий компонент Label, который будет отображать предельное число «попаданий», и измените его свойства согласно таблице:
Свойство
|
Значение
|
Пояснение
|
Caption
|
\10
|
Надпись метки
|
Font.Color
|
clRed
|
Цвет шрифта – красный
|
Font.Name
|
Courier New
|
Название шрифта
|
Font.Size
|
16
|
Размер шрифта
|
Font.Style
|
{fsBold}
|
Начертание шрифта – полужирное
|
Left
|
144
|
Отступ слева
|
Top
|
16
|
Отступ сверху
|
Напоследок разместите на форме компонент Timer категории System.Результат оформления формы должен соответствовать рисунку:
Разработка программного кода. Изменение формы окна на эллиптическую реализуется в обработчике события OnCreate формы. Для этого необходимо объявить глобальную переменную forma типа HRGN, которая будет содержать размеры окна:
var
Forml: TForml;
forma: HRGN;
В обработчик события OnCreate добавьте следующий код:
procedure TForml.FormCreate(Sender: TObject);
begin
Randomize; //включаемгенератор случайных чисел
forma := CreateEllipticRgn(0, 0, Form1.Width,
Form1.Height); // вид окна
//применяемновыйвидокна
SetWindowRgn(Handle, forma, True);
end;
Здесь мы задаем окно в виде эллипса и применяем новый вид окна.
Каждую секунду форма должна случайным образом менять свои координаты в пределах экрана. Это будет реализовано в обработчикесобытия Timer1.OnTimer:
procedureTForml.TimerlTimer(Sender: TObject);
begin
Forml.Top := Random(Screen.Height) + 1; //случайнаявысота
Forml.Left := Random(Screen.Width) + 1; //случайнаяширина
end;
Здесь мы определяем высоту и ширину экрана, выбираем случайные координаты, не выходящее за пределы экрана, и перемещаем в них окно программы.
Теперь выделите все компоненты и саму форму и создайте для них общий обработчик события OnMouseDown:
procedure TForml.popadMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if StrToInt(popad.Caption) < 10 then
begin //если попаданий меньше 10
//Перемещаем окно в случайную позицию по вертикали
Forml.Top := Random(Screen.Height) + 1;
//Изменяем положение по горизонтали
Forml.Left := Random(Screen.Width) + 1;
//Увеличиваем счетчик "попаданий" на единицу
popad.Caption := IntToStr(StrToInt(popad.Caption) + 1) ;
//Увеличиваем скорость перемещения окна на 100 мс
Timerl.Interval := Timerl.Interval - 100;
end;
if popad.Caption = ‘40’ then
begin //еслиигрокпопал 10 раз
Timerl.Enabled := False; //останавливаемигру
Forml.Position := poDesktopCenter; //окновцентрэкрана
//сообщаем о победе
ShowMessage('Вы попали по окну 10 раз!');
if Application.MessageBox('Игра', 'Игратьещераз?',
mb_yesno + mb taskmodal +
mb_iconQuestion) = idYes then {предлагаем сыграть еще раз}
begin
popad.Caption := 'О1; //сброс результатов
//Придаем окну эллиптическую форму
forma := CreateEllipticRgn(0, 0,
Forml.Width, Forml.Height);
SetWindowRgn(Handle, forma, True);
//Устанавливаем начальную скорость перемещения окна
Timerl.Interval := 1000;
Timerl.Enabled := True; //начинаемигру
end
else Halt; //выходизигры
end;
end;
Прикаждом «попадании» выполняется проверка: было ли это «попадание» последним. Если да, то просто пополняем счетчик попаданийи увеличиваем скорость перемещения формы на 100 мс. Если игрок сделал последнее «попадание», то останавливаем игру, выводим окно вцентр экрана и показываем сообщение о том, что игра успешно окончена. После этого отображаем окно с вопросом: следует ли начинать игрузаново. Если пользователь отказывается играть, то просто выходим изпрограммы. Если пользователь хочет сыграть сначала, то обнуляем всерезультаты и начинаем игру заново.[7: 58-62]
Достарыңызбен бөлісу: |