ПРАКТИЧЕСКАЯ РАБОТА № 3

 

Тема:Программированиесобытий KeyPress, KeyDown,KeyUp.

Цель работы:Получить навыки создания процедур обработки событий, связанных с клавиатурой. Получить навыки использования объектов Image, Shape и Timer.

Пояснения к работе:

Приложение Delphi реагирует на события – сигнал от мыши, клавиатуры и системные события. Различные объекты могут реагировать на различные совокупности событий. При организации реакции на события можно:

· проигнорировать событие, т.е. не писать процедуру для реакции на это событие;

· перехватить событие, для этого нужно написать текст процедуры – обработчика события.

Имя процедуры - обработчика события состоит из имени объекта, на котором произошло событие и имении события. Все события в Delphi принято именовать с префиксом ‘On’. События различны, но общим для них является параметр Sender – отправитель, он указывает на источник события. Традиционно может быть предусмотрена реакция на 3 вида событий от пользователя: нажатие или отпускание любой из кнопок мыши (MouseUp,MouseDown), перемещение курсора (MouseMove) и нажатие клавиш (KeyUp, KeyDown, KeyPress).

Обработчику события передаются:

Sender источник сообщения;

Shift состояние специальных клавиш и кнопок мыши во время нажатия (отпускания);

Key код нажатой клавиши (для событий KeyUp, KeyDown), символ, соответствующий нажатой буквенно-цифровой клавише (событие KeyPress);

X,Y координаты положения курсора.

Компонент Image обеспечивает вывод на поверхность формы иллюстраций, представленных в bmp, jpg, ico, wmf-форматах.

 

Свойства Image:

Picture иллюстрация, которая отображается в поле компонента;

Width, Height размер компонента. Если размер компонента меньше размера иллюстрации, и значение свойств AutoSize, Strech, Proportional, равно False, то отображается часть иллюстрации;

Proportional признак автоматического масштабировании картинки без искажения. Чтобы масштабирование было выполнено, значение свойства AutoSize должно быть False;

Strechпризнак автоматического масштабировании (сжатия или растяжения) иллюстрации в соответствии с реальным размером компонента. Если размер компонента непропорционален размеру иллюстрации, то она будет искажена.

AutoSizeпризнак автоматического изменения размера компонента в соответствии с реальным размером иллюстрации;

Centerпризнак определяет расположение картинки в поле компонента, если ширина картинки меньше ширины поля компонента. Если значение False, то картинка прижата к правой границе, если True то по центру.

Компонент Timer обеспечивает генерацию последовательности событий OnTimer.

Свойства Timer:

Intervalпериод генерации событияOnTimer, задается в миллисекундах;

Enabledразрешение работы.разрешает (значение true) или запрещает (значение false) генерацию событий OnTimer

 

Компонент Shape предназначен для рисования фигур.

Свойства Shape:

Shape определяет тип фигуры;

Brush определяет стиль и цвет заполнения фигуры;

Penопределяет стиль, цвет и толщину границ фигуры.

 


Постановка задачи:

В верхней части окна приложения непрерывно движется объект «Противник ». В нижней части окна – объект «Охотник», который может перемещаться влево и вправо, а также стрелять в «Противника» вверх пулей. При попадании пули в «Противника» объект «Охотник» увеличивает свои баллы. Цель может быть опасна, т.к. сбрасывает объект «Бомбочки», которые при попадании в охотника уменьшают его баллы.

В начале игры у «Охотника» 10 баллов. Игра заканчивается победой, если «Охотник» удваивает баллы, и поражением, если баллы равны нулю.

Порядок выполнения:

 

  1. Создать и сохранить новый проект.
  2. Разместить на форме два компонента Image (Additional), задайте для них имена, например: Men (охотник), Samolet (цель), и измените свойство Picture для каждого (выбрать графический файл .ico).
  3. Разместить компонент Shape,задать имяPula (пуля).
  4. Установить два таймера (System). Timer1 отвечает за непрерывное движение цели. Timer2за движение объекта пули. Рекомендуемый вид формы приведен на рисунке.
  5. Для объекта Timer1 ввести следующий код:

samolet.Left :=samolet.Left +1;

If samolet.Left >300 Then samolet.Left :=-30;

  1. Проверить работу программы. Самостоятельно отрегулировать скорость движения объекта, изменяя значения свойства Interval для таймера.

 

  1. Для формы выбрать событие OnKeyDown и введите код:

If key=37 then men.Left :=men.Left-10;//влево

If key=39 then men.Left :=men.Left+10;//вправо

 

If key=32 then //нажат пробел

Begin

pula.Visible :=true;

pula.Left:=men.Left ;

pula.Top:=men.Top-pula.Height ;

timer2.interval:=10;

End;

  1. Для объекта Pula изменить свойство Visible на False. Для объекта Timer2 изменить свойства Interval=0
  2. Для объекта Timer2 введите код:

pula.Top:=pula.Top-5;

If pula.top<0 then

Begin

timer2.Interval :=0;

pula.Visible :=false;

End;

  1. Проверить работу программы, отрегулировать скорость движения «пули».
  2. Добавить метку (имя Result) для вывода количества баллов.
  3. В процедуру для Timer2 добавить код (выделен полужирным шрифтом) для проверки на попадание «пули» в «самолет»: