Чтение онлайн

на главную - закладки

Жанры

Delphi. Учимся на примерах

Парижский Сергей Михайлович

Шрифт:

Разместите на форме компонент Label категории Standard. Измените его свойства согласно табл. 8.2.

Таблица 8.2. Свойства первого компонента Label

Свойство Значение Пояснение
Caption Попадания: Надпись метки
Font.Color clLime Цвет шрифта — светло-зеленый
Font.Name Courier New Название шрифта
Font.Size 12 Размер
шрифта
Font.Style [fsBold] Начертание шрифта — полужирное
Left 16 Отступ слева
Top 16 Отступ сверху

Разместите на форме еще один компонент Label и измените его свойства согласно табл. 8.3.

Таблица 8.3. Свойства второго компонента Label

Свойство Значение Пояснение
Name popad Новое имя компонента
Caption 0 Надпись метки
Font.Color clRed Цвет шрифта — красный
Font.Name Courier New Название шрифта
Font.Size 16 Размер шрифта
Font.Style [fsBold] Начертание шрифта — полужирное
Left 120 Отступ слева
Top 16 Отступ сверху

Разместите на форме третий компонент Label, который будет отображать предельное число "попаданий", и измените его свойства согласно табл. 8.4.

Таблица 8.4. Свойства третьего компонента Label

Свойство Значение Пояснение
Caption /10 Надпись метки
Font.Color clRed Цвет шрифта — красный
Font.Name Courier New Название шрифта
Font.Size 16 Размер шрифта
Font.Style [fsBold] Начертание шрифта — полужирное
Left 144 Отступ слева
Top 16 Отступ сверху

Напоследок разместите на форме компонент Timer категории System. Результат оформления формы должен соответствовать рис. 8.1.

Рис. 8.1. Форма для игры "Успей щелкнуть"

Разработка

программного кода

Изменение формы окна на эллиптическую реализуется в обработчике события OnCreate формы. Для этого необходимо объявить глобальную переменную forma типа HRGN, которая будет содержать размеры окна:

var

 Form1: TForm1;

 forma: HRGN;

В обработчик события OnCreate добавьте следующий код:

procedure TForm1.FormCreate(Sender: TObject)

begin

 Randomize;//включаем генератор случайных чисел

 forma:= CreateEllipticRgn(0, 0, Form1.Width, Form1.Height); //вид окна

 //применяем новый вид окна

 SetWindowRgn(Handle, forma, True);

end;

Здесь мы задаем окно в виде эллипса и применяем новый вид окна.

Каждую секунду форма должна случайным образом менять свои координаты в пределах экрана. Это будет реализовано в обработчике события Timer1.OnTimer:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

 Form1.Top:= Random(Screen.Height) + 1; //случайная высота

 Form1.Left:= Random(Screen.Width) + 1; //случайная ширина

end;

Здесь мы определяем высоту и ширину экрана, выбираем случайные координаты, не выходящее за пределы экрана, и перемещаем в них окно программы.

Теперь выделите все компоненты и саму форму и создайте для них общий обработчик события OnMouseDown:

procedure TForm1.popadMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

 if StrToInt(popad.Caption) < 10 then begin //если попаданий меньше 10

//Перемещаем окно в случайную позицию по вертикали

Form1.Top:= Random(Screen.Height) + 1;

//Изменяем положение по горизонтали

Form1.Left:= Random(Screen.Width) + 1;

//Увеличиваем счетчик "попаданий" на единицу

popad.Caption:= IntToStr(StrToInt(popad.Caption) + 1);

//Увеличиваем скорость перемещения окна на 100 мс

Timer1.Interval:= Timer1.Interval – 100;

 end;

 if popad.Caption = '0' then begin //если игрок попал 10 раз

Timer1.Enabled:= False; //останавливаем игру

Form1.Position:= poDesktopCenter; //окно – в центр экрана

//сообщаем о победе

ShowMessage('Вы попали по окну 10 раз!');

if Application.MessageBox('Игра', 'Играть еще раз?', mb_yesno + mbtaskmodal + mb_iconQuestion) = idYes

then {предлагаем сыграть еще раз}

begin

popad.Caption:= '0'; //сброс результатов

//Придаем окну эллиптическую форму

forma:= CreateEllipticRgn(0, 0, Form1.Width, Form1.Height);

Поделиться:
Популярные книги

Эпоха Опустошителя. Том I

Павлов Вел
1. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том I

Проблема майора Багирова

Майер Кристина
1. Спецназ
Любовные романы:
современные любовные романы
6.60
рейтинг книги
Проблема майора Багирова

Законы Рода. Том 13

Андрей Мельник
13. Граф Берестьев
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 13

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

О, Путник!

Арбеков Александр Анатольевич
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
О, Путник!

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век

Её (мой) ребенок

Рам Янка
Любовные романы:
современные любовные романы
6.91
рейтинг книги
Её (мой) ребенок

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Цвет сверхдержавы - красный. Трилогия

Симонов Сергей
Цвет сверхдержавы - красный
Фантастика:
попаданцы
альтернативная история
8.06
рейтинг книги
Цвет сверхдержавы - красный. Трилогия

Болтливый мертвец

Фрай Макс
7. Лабиринты Ехо
Фантастика:
фэнтези
9.41
рейтинг книги
Болтливый мертвец

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Лишняя дочь

Nata Zzika
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Лишняя дочь