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

26. Поймать и посчитать!

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

Объяснение темы В оглавлении: 26. Поймать и посчитать!

Кратко о теме

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Основные элементы игры «Поймать и посчитать!»

Таблица показывает, какую роль играет каждый элемент программы. По столбцу «Когда используется» можно восстановить порядок действий, а по столбцу «Результат» — проверить, что должно произойти после команды. Если результат не совпал с таблицей, ищите ошибку в условии или цикле.

ЭлементЧто хранит или выполняетКогда используетсяРезультат
Ловящий объектПеремещается по командам игрокаПри попытке поймать предметИзменяет своё положение
Движущийся предметПеремещается по заданному алгоритмуВо время игрыПоявляется в новой позиции или продолжает движение
Переменная-счётчикХранит количество пойманных предметовПосле успешного касанияУвеличивается на единицу
Условие касанияПроверяет взаимодействие объектовВнутри повторяющегося алгоритмаЗапускает обработку пойманного предмета
Случайное числоВыбирает непредсказуемое значениеПри выборе новой позиции или скоростиИгра становится разнообразнее

Разбор задач

Корзина и падающие яблоки

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

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

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

Новая позиция после попадания

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

  1. Проверьте касание предмета и ловящего объекта.
  2. Увеличьте переменную-счётчик на 1.
  3. Выберите случайную координату x в пределах сцены.
  4. Установите предмету новую координату x и верхнюю координату y.

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

Игра на 30 секунд

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Можно ли считать пойманные предметы без переменной?

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

Зачем в игре нужны случайные координаты?

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

Как сделать так, чтобы игра завершалась по времени или по достижении нужного счёта?

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

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

26. Поймать и посчитать!

Учебник

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