В КУРСЕ?

Разбираемся в теме

Счёт в Kodu растёт сам: какое условие потерялось в программе?

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

Правило связывает условие с действием

У правила есть часть Когда, или WHEN, и часть Делать, или DO. Условие определяет, в какой ситуации выполняется действие. Например, столкновение с яблоком может запускать его поедание. Действие начисления очка решает другую задачу: изменяет выбранный счёт. Если строка с начислением имеет пустую часть Когда и находится самостоятельно, её условие считается истинным постоянно. Игра не догадывается, что автор мысленно связал её с предыдущей строкой. Соседство на экране и логическая зависимость являются разными вещами.

Отступ может означать зависимость

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

Один предмет должен дать один результат

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

Проверяйте отсутствие события тоже

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

Попробуйте на практике

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

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

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

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

Пустое условие всегда является ошибкой?

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

Достаточно ли поставить строку начисления сразу после столкновения?

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

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

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

Зарегистрироваться
← К списку материалов