На Горох
Информатика

29. Побольше событий

"Информатика (в 2 частях)", Павлов Д.И., Полежаева О.А., Коробкова Л.Н. и др./ Под ред. Горячева А.В.

Объяснение темы В оглавлении: 29. Побольше событий

Кратко о теме

События позволяют программе реагировать на действия пользователя и изменения в окружающих объектах. Нажатие клавиши, щелчок мыши, истечение времени или сообщение другого объекта становятся сигналами для программы. Для каждого сигнала можно назначить обработчик — фрагмент кода с нужной реакцией. Событийная программа ожидает разные события и запускает подходящие обработчики, поэтому может одновременно управлять движением объектов, интерфейсом и ходом игры.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

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

Источник события — объект или устройство, от которого поступает событие: клавиатура, мышь, таймер или другой объект программы. Источник показывает, где произошло изменение и откуда программа получила сигнал. Это помогает правильно настроить реакцию на действия пользователя или работу другого объекта.

Обработчик события — фрагмент программы, запускаемый при наступлении определённого события. В нём записывают команды, которые должны выполнить объект или вся программа. Благодаря обработчику один и тот же проект может по-разному отвечать на нажатие клавиш, щелчки и сообщения.

Событийная программа — программа, работающая в ожидании событий и выполняющая соответствующие обработчики. Она не обязана заранее выполнять все действия строго по одной цепочке. Такой способ работы нужен для игр, приложений и интерфейсов, где заранее неизвестно, когда именно пользователь или таймер подаст сигнал.

Как это устроено

Программа должна различать события, потому что разные действия требуют разных ответов. Нажатие стрелки вправо может передвинуть героя, а нажатие пробела — изменить его вид. Если не связывать события с отдельными реакциями, программа не сможет точно понять намерение пользователя и будет выполнять неподходящие команды.

Событие сначала возникает в устройстве или объекте. Клавиатура фиксирует нажатие клавиши, мышь сообщает о щелчке, а таймер отмечает завершение заданного интервала. Затем система передаёт сведения о событии программе, чтобы та могла проверить, есть ли для него подходящая реакция.

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

Событийная программа может следить сразу за несколькими источниками. Пока таймер двигает объект через равные интервалы, пользователь может нажать клавишу или щёлкнуть мышью, а другой объект может отправить сообщение. Для каждого такого сигнала предусмотрен свой обработчик, поэтому программа реагирует на происходящее без остановки всего проекта.

Порядок событий способен изменить результат работы. Если сначала увеличить счёт, а потом завершить игру, итог сохранится; если завершить игру раньше, последующее увеличение может уже не выполниться. Поэтому при проектировании учитывают, какие действия могут совпасть, и проверяют, как обработчики меняют общие переменные и состояние объектов.

Виды событий и способы реакции программы

Таблица помогает быстро сопоставить источник события с моментом срабатывания и действием обработчика. При составлении программы сначала найдите нужный источник и событие, затем определите, какую реакцию следует записать. Если один источник создаёт несколько сигналов, для каждого из них можно назначить отдельный обработчик.

Источник событияПример событияКогда срабатываетДействие обработчика
КлавиатураНажатие или отпускание клавишиПосле действия пользователя с клавишейИзменить объект, выполнить команду или вывести сообщение
МышьЩелчок или перемещение указателяПосле действия пользователя с мышьюПереместить объект, изменить его вид или запустить действие
ТаймерИстечение заданного промежутка времениЧерез установленный интервалПовторить действие или изменить состояние объекта
Другой объект программыСообщение или изменение состояния объектаПосле выполнения условия или командыЗапустить связанный обработчик

Разбор задач

Разные реакции на клавиши

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

  1. Создайте обработчик события нажатия стрелки вправо.
  2. Поместите в него команду перемещения объекта на несколько шагов.
  3. Создайте отдельный обработчик события нажатия пробела.
  4. Добавьте в него команду смены костюма, цвета или другого внешнего свойства объекта и проверьте обе клавиши отдельно.

В результате стрелка вправо отвечает только за движение, а пробел — только за внешний вид. Разделение обработчиков делает программу понятной и не допускает случайного выполнения чужой команды.

Движение по таймеру и остановка мышью

Объект должен двигаться автоматически, а после щелчка мышью остановиться. Автоматическое движение требует повторяющегося события таймера, а остановка — отдельного события мыши. Общий признак остановки удобно хранить в переменной, например движение_разрешено.

  1. Установите интервал таймера и задайте переменной движение_разрешено значение да.
  2. В обработчике таймера проверьте эту переменную и, если движение разрешено, переместите объект.
  3. Создайте обработчик щелчка мышью по объекту или сцене.
  4. В обработчике щелчка измените движение_разрешено на нет, чтобы следующие события таймера больше не двигали объект.

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

Игра с несколькими обработчиками

В игре по таймеру появляется объект, щелчок по нему увеличивает счёт, а нажатие клавиши завершает игру. Здесь участвуют три источника: таймер, мышь и клавиатура. Нужно заранее определить состояние игры, чтобы после завершения остальные обработчики не меняли результат.

  1. Запустите игру, обнулите счёт и установите состояние игра_идёт.
  2. В обработчике таймера проверяйте состояние и создавайте объект через заданный интервал, если игра продолжается.
  3. В обработчике щелчка увеличивайте счёт только при работающей игре и попадании по объекту.
  4. В обработчике клавиши изменяйте состояние на игра_закончена и выводите итоговый счёт.

Так программа связывает появление объектов, начисление очков и завершение игры с разными событиями. Если щелчок и завершение почти совпадут, результат будет зависеть от порядка обработки, поэтому проверку состояния нужно выполнять в каждом важном обработчике.

Типичные ошибки

Обработчик запускают сразу после старта программы, хотя он должен ждать событие. Так происходит, когда команды обработчика помещают в основную последовательность без условия или связи с сигналом. Проверьте себя: до нажатия клавиши или щелчка реакция не должна выполняться.

Разные события связывают с одним неподходящим обработчиком или путают клавиши. Причина обычно в невнимательном выборе названия события. Проверьте каждую связь отдельно: стрелка должна запускать движение, а пробел — именно смену вида.

Таймер считают одноразовым, хотя задан повторяющийся интервал. Из-за этого ожидаемое действие выполняется много раз или объект неожиданно продолжает изменяться. Проверьте настройки таймера и посчитайте, сколько раз обработчик должен сработать за выбранное время.

Не учитывают почти одновременное поступление нескольких событий. Тогда один обработчик изменяет переменную, а другой работает уже с новым состоянием, что меняет результат. Проверьте сценарии в разном порядке и добавьте условия, запрещающие действия после завершения игры или другой важной операции.

Связь с другими темами

До этой темы нужны команды исполнителя, условия, повторения, переменные и способы ввода данных: они составляют содержимое обработчиков. Событийные программы применяются при создании игр, интерактивных приложений и графических интерфейсов. Тема связывает алгоритмы и программирование с пользовательским интерфейсом и взаимодействием устройств с программой.

Что запомнить

  • Событие сообщает программе о действии или изменении.
  • У каждого события может быть свой обработчик.
  • Обработчик выполняется только после наступления связанного события.
  • Источниками событий могут быть пользователь, таймер или другой объект программы.
  • Событийная программа ожидает события и реагирует на них.
  • Несколько обработчиков позволяют программе реагировать на разные действия.
  • Результат может зависеть от порядка поступления событий.

Частые вопросы по теме

Чем событие отличается от команды программы?

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

Может ли у одного события быть несколько действий?

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

Как программа понимает, какой обработчик нужно запустить?

При создании программы событие связывают с определённым обработчиком. Когда событие возникает, система находит такую связь и запускает соответствующий фрагмент кода.

Что произойдёт, если два события возникнут почти одновременно?

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

Зачем в программе нужен таймер?

Таймер создаёт события через заданные промежутки времени. С его помощью можно двигать объект автоматически, обновлять экран, отсчитывать время или регулярно выполнять проверку.

Спросить по теме параграфа

29. Побольше событий

Учебник

Оглавление →
Предмет
Информатика
Учебник
"Информатика (в 2 частях)", Павлов Д.И., Полежаева О.А., Коробкова Л.Н. и др./ Под ред. Горячева А.В.