Delphi. Учимся на примерах - [12]

Шрифт
Интервал

Свойство Значение Пояснение
BorderStyle bsNone Окно программы будет отображаться без границы и заголовка
FormStyle fsStayOnTop Окно программы должно располагаться поверх всех остальных окон, поскольку игрок не всегда будет "попадать" по нашему окну, а значит своими "промахами" будет активизировать другие окна
Color clWindowText Цвет формы — черный
Height 72 Высота
Width208Ширина

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

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


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

Разместите на форме еще один компонент 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 Отступ слева
Top16Отступ сверху

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

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

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

Напоследок разместите на форме компонент 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);

>   SetWindowRgn(Handle, forma, True);

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

>   Timer1.Interval:= 1000;

>   Timer1.Enabled:= True; //начинаем игру

>  end

>  else Halt; //выход из игры

> end;

>end;

При каждом "попадании" выполняется проверка: было ли это "попадание" последним. Если да, то просто пополняем счетчик попаданий и увеличиваем скорость перемещения формы на 100 мс. Если игрок сделал последнее "попадание", то останавливаем игру, выводим окно в центр экрана и показываем сообщение о том, что игра успешно окончена. После этого отображаем окно с вопросом: следует ли начинать игру заново. Если пользователь отказывается играть, то просто выходим из программы. Если пользователь хочет сыграть сначала, то обнуляем все результаты и начинаем игру заново.

Окно программы в процессе игры представлено на рис. 8.2.

Рис. 8.2. Игра "Успей щелкнуть" в действии

Полный исходный код модуля

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

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

Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Фундаментальные алгоритмы и структуры данных в Delphi

Книга "Фундаментальные алгоритмы и структуры данных в Delphi" представляет собой уникальное учебное и справочное пособие по наиболее распространенным алгоритмам манипулирования данными, которые зарекомендовали себя как надежные и проверенные многими поколениями программистов. По данным журнала "Delphi Informant" за 2002 год, эта книга была признана сообществом разработчиков прикладных приложений на Delphi как «самая лучшая книга по практическому применению всех версий Delphi».В книге подробно рассматриваются базовые понятия алгоритмов и основополагающие структуры данных, алгоритмы сортировки, поиска, хеширования, синтаксического разбора, сжатия данных, а также многие другие темы, тесно связанные с прикладным программированием.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.