ПРАКТИЧЕСКАЯ РАБОТА № 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 баллов. Игра заканчивается победой, если «Охотник» удваивает баллы, и поражением, если баллы равны нулю.
Порядок выполнения:
- Создать и сохранить новый проект.
Разместить на форме два компонента Image (Additional), задайте для них имена, например: Men (охотник), Samolet (цель), и измените свойство Picture для каждого (выбрать графический файл .ico).
- Разместить компонент Shape,задать имяPula (пуля).
- Установить два таймера (System). Timer1 отвечает за непрерывное движение цели. Timer2за движение объекта пули. Рекомендуемый вид формы приведен на рисунке.
- Для объекта Timer1 ввести следующий код:
samolet.Left :=samolet.Left +1;
If samolet.Left >300 Then samolet.Left :=-30;
- Проверить работу программы. Самостоятельно отрегулировать скорость движения объекта, изменяя значения свойства Interval для таймера.
- Для формы выбрать событие 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;
- Для объекта Pula изменить свойство Visible на False. Для объекта Timer2 изменить свойства Interval=0
- Для объекта Timer2 введите код:
pula.Top:=pula.Top-5;
If pula.top<0 then
Begin
timer2.Interval :=0;
pula.Visible :=false;
End;
- Проверить работу программы, отрегулировать скорость движения «пули».
- Добавить метку (имя Result) для вывода количества баллов.
- В процедуру для Timer2 добавить код (выделен полужирным шрифтом) для проверки на попадание «пули» в «самолет»: