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

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

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

Вот и все! В вашей игре есть табло.

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

Каждый раз, когда мы хотим показать символы или графику в программе Scratch, мы будем использовать спрайты. Если вы еще не знаете, как использовать спрайты, ознакомьтесь с одним из начальных уроков по ​​Scratch.

Чтобы сделать базовое табло, я собираюсь использовать встроенные изображения спрайтов, которые поставляются с Scratch. Внутри прилагаемой библиотеки спрайтов находятся все буквы английского алфавита и цифры от нуля до девяти. Мы будем использовать «пиксельные» версии, чтобы они выглядели как табло видеоигр. Если вы хотите найти или нарисовать свои собственные цифры от нуля до девяти, вы тоже можете это сделать.

Костюмы

Первое, что мы собираемся сделать, это открыть спрайт «0-пиксель» в нашем проекте. Затем перейдите на вкладку костюмов и загрузите все остальные цифры, пока у вас не будут загружены костюмы от нуля до девяти в качестве костюмов для вашего спрайта. Убедитесь, что они расположены по порядку - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - потому что мы скажем Скретчу автоматически пролистывать их, чтобы показывать счет по мере его увеличения.

Костюмы - это просто способ изменить изображение, которое отображается для спрайта, так что вы можете изменить его внешний вид во время игры, не создавая полностью новую копию. Для нашего табло мы используем цифры от нуля до девяти в качестве костюмов, чтобы мы могли изменить табло так, чтобы оно выглядело как более высокий результат всякий раз, когда переменная данных увеличивается. Когда есть ноль очков, мы используем нулевой костюм, когда есть одно очко, мы используем один костюм, вплоть до девяти. А как насчет того, если вы хотите перейти от девяти до десяти, ста или одного миллиона? Мы вернемся к этому позже ...

Обновление вашего счета

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

Во-первых, вам нужно создать переменную данных, о которой я упоминал в самом начале. Щелкните свой спрайт, затем щелкните раздел «Данные» на панели инструментов и щелкните «Создать переменную». Вы можете называть эту переменную как хотите, я предлагаю вам назвать эту переменную «score», поскольку это довольно очевидно.

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

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

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

Этот спрайт имеет только следующий код:

Затем в спрайте цифр на табло я добавил этот код:

Что тут происходит? Что ж, всякий раз, когда вы нажимаете кнопку-спрайт, он сообщает остальной программе, что следует увеличить счет («приращение» - это причудливый способ сказать «увеличить число на единицу»). Спрайт табло ожидает этого сообщения и всякий раз, когда он его получает, увеличивает переменную данных счета на единицу.

В вашей игре вы можете транслировать сообщение «увеличение очков» всякий раз, когда вы собираете монету, убиваете плохого парня или выполняете любое другое действие, которое должно привести к увеличению количества очков. Любой спрайт в вашей игре может транслировать это сообщение, поэтому есть много способов обновить ваш счет.

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

Математика !?

Итак, теперь у нас есть спрайт с костюмами, и у нас есть переменная очков, которая увеличивается, когда мы ей говорим, и меняем костюм, чтобы он соответствовал. Но это позволяет нам отслеживать только результат от нуля до девяти, что довольно скучно (если вы не играете в футбол!).

Если мы хотим, чтобы наше табло стало действительно высоким, мы должны использовать более одной копии нашего спрайта, и каждая из них должна менять свой костюм в нужное время, чтобы цифры работали. Например, если я хочу, чтобы моя оценка превысила девять баллов, мне нужно добавить вторую цифру рядом с первой. Когда первый набирает «9», следующее набранное очко должно заставить его вернуться к «0», а цифра рядом с ним должна измениться на «1», что означает «10»:

Да, переход от «9» к «10» на самом деле довольно сложен, потому что два разных спрайта должны работать вместе, чтобы показать правильные числа!

Для следующих девяти баллов первая цифра увеличивается, как обычно, пока снова не достигнет «9», а следующая набранная точка должна снова изменить ее на «0», в то время как вторая цифра изменится. до «2» - оценка 20. Если мы правильно введем код, эти два спрайта могут составить табло, которое начинается с «00» и продолжается до «99».

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

Но как заставить каждый спрайт изменяться с разной скоростью? Здесь на помощь приходит математика и особая функция программирования, называемая modulo.

Во-первых, давайте рассмотрим, как менять костюм при изменении счета:

Эта часть довольно проста. Приведенный выше код выполняет две функции: (1) всякий раз, когда мы перезапускаем игру, щелкнув флаг, мы сбрасываем счет до нуля, а также устанавливаем для костюма цифру «0»; и (2) всякий раз, когда получено сообщение об увеличении очков, мы обновляем счет, добавляя к нему 1, а затем переключаемся на следующий костюм. Если мы расставим костюмы по порядку, как и положено, картинка изменится с 0 на 1, на 2, на 3… вплоть до 9.

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

Когда вы разделите 9 на 4, вы получите 2,25. остаток от этого деления равен 1. Если вы помните школьную арифметику, это потому, что «целая» часть 2,25 равна 2, и когда вы умножаете это на делитель (4), вы получаете 8. 9–8 = 1, так что это остаток. Вот еще несколько примеров:

12/6 = 2 и 2 x 6 = 12, не оставляя остатка (12–12 = 0).

17/3 = 5,67 и 5 x 3 = 15, в результате остается 2 (17–15 = 2).

122/9 = 13,55 и 13 x 9 = 117, в результате остается 5 (122–117 = 5).

Вы, наверное, уже видите, что есть несколько шагов для вычисления остатка, поэтому функция по модулю очень удобна. Большинство языков программирования используют символ «%» для обозначения модуля; в Scratch в списке операторов это называется «мод». Таким образом, мы могли бы написать 9% 4 = 1 в программном коде, чтобы получить остаток для нашего первого примера за один шаг.

Уф, извини за это! Бьюсь об заклад, вам интересно, как это связано с нашим табло? Что ж, одна вещь, которая действительно удобна по модулю, - это выяснить, делится ли одно число равномерно на другое. Если остаток равен 0, это означает, что числа делятся поровну. Хотите, чтобы ваша программа проверяла, четное или нечетное число? Просто используйте по модулю: если x% 2 = 0, тогда x - четное число, если x% 2 = 1, то x - нечетное число. Очень удобно!

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

Для нашего табло мы используем обычные старые базовые десять чисел.

В месте единиц, когда результат можно разделить поровну на 10, нам нужно вернуться к костюму 0.

В разряде десятков, всякий раз, когда счет можно разделить поровну на 10, нам нужно перейти к следующему костюму, но если его можно разделить поровну на 100, нам нужно вернуться к костюму 0.

В разряде сотни, всякий раз, когда счет можно разделить поровну на 100, нам нужно перейти к следующему костюму, но если его можно разделить поровну на 1000, нам нужно вернуться к костюму 0.

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

Вот полный код самого простого спрайта:

Вы можете увидеть, как мы используем оператор по модулю («mod»): всякий раз, когда оценка увеличивается, нам нужно знать, должен ли показанный нами костюм подняться до следующего числа или должен вернуться к нулю. Modulo позволяет нам проверить, равен ли остаток (оценка% 10) 0, что означает, что мы должны выполнить сброс - в противном случае мы перейдем к следующему костюму.

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

Теперь я покажу вам код спрайта десятки:

Вы можете видеть, что требуются два теста: во-первых, чтобы увидеть, делится ли оценка равномерно на 100, что означает, что нам нужно сбросить, а во-вторых, чтобы увидеть, делится ли оценка на 10, что означает, что нам нужно показать костюм со следующей цифрой.

Бьюсь об заклад, вы можете догадаться, как тогда выглядит спрайт сотни:

Правильно, это почти то же самое, что и спрайт десятки - мы только что изменили наши тесты mod, чтобы использовать 1000, а затем 100 на этот раз, так как мы работаем с большим числом, кратным десяти.

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

Бонус: спрайт Any

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

Сможете догадаться, для чего нужен этот спрайт?

Спрайт any можно использовать для любого места на табло. Что я сделал, так это добавил вторую переменную под названием «base», которая позволяет вам самостоятельно установить значение теста мода. Вы можете просто продублировать этот спрайт бок о бок столько раз, сколько захотите, и при необходимости изменить «базовую» переменную, чтобы сделать табло настолько большим, насколько вам нужно.

Сравните «базовую» переменную с другими спрайтами, которые я уже показал вам - можете ли вы заставить любой действовать как спрайты, десятки или сотни?

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

Вывод

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

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

Удачи и приятного кодирования! 😎