На Горох
Информатика, 7 класс

§ 45. Управление с помощью клавиатуры

"Информатика. (в 2 частях)", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 45. Управление с помощью клавиатуры

Кратко о теме

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы управлять объектом, конкретным клавишам назначают команды, которые меняют его положение. Например, при нажатии стрелки вверх программа уменьшает вертикальную координату, а при нажатии стрелки вниз — увеличивает её. Точное направление изменения зависит от того, как в программе устроены координаты. Раздельные условия для разных клавиш позволяют объекту выполнять разные движения по команде пользователя.

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

Способы реакции программы на клавиатуру

СпособЧто проверяет программаКогда выполняется действиеПример применения
Обработка нажатияСобытие нажатия клавишиОдин раз при нажатииЗапуск действия или выстрела
Обработка отпусканияСобытие отпускания клавишиОдин раз при отпусканииОстановка движения
Проверка состоянияНажата ли клавиша сейчасПока клавиша удерживаетсяНепрерывное перемещение объекта

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

Разбор задач

Клавиша пробел запускает действие

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

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

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

Стрелки перемещают объект вверх и вниз

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

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

Ответ: стрелке вверх назначается изменение координаты вверх, а стрелке вниз — обратное изменение. Знак изменения зависит от принятой в программе системы координат.

Движение продолжается при удержании клавиши

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

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

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

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

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

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

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

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

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

Чтобы проверять ввод снова и снова, нужно знать, как работает цикл программы: он повторяет команды, пока приложение не завершено. Условные команды позволяют выбрать нужную реакцию, например выполнить действие только тогда, когда нажата определённая клавиша. Эти знания помогают понять, где размещать проверку и как связать её с обработчиком.

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

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

  • Клавиатурный ввод позволяет пользователю управлять работой программы.
  • Нажатие и отпускание клавиши — разные события.
  • Обработчик связывает событие с выполняемыми командами.
  • События нужно проверять в основном цикле программы.
  • Для движения при удержании клавиши проверяют её текущее состояние.
  • Разным клавишам можно назначить разные действия.

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

Чем событие нажатия клавиши отличается от проверки, нажата ли клавиша?

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

Почему программа должна постоянно проверять события клавиатуры?

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

Как назначить действие на конкретную клавишу?

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

Как сделать непрерывное движение при удержании клавиши?

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

Как остановить движение после отпускания клавиши?

Можно обрабатывать событие отпускания и прекращать движение, например сбрасывать признак движения. Если движение задаётся проверкой состояния, после отпускания условие перестанет выполняться и координаты перестанут изменяться.

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

§ 45. Управление с помощью клавиатуры

Учебник

Оглавление →
Предмет
Информатика
Класс
7 класс
Учебник
"Информатика. (в 2 частях)", Поляков К.Ю., Еремин Е.А.