Вопросы:
· Создание игры.
· Публикация игры в scratch-сообществе.
Игрой будут хорошо знакомые всем крестики-нолики. Вспомним её правила. Игроки по очереди ставят знаки в свободные клетки поля три на три. Один игрок всегда ставит крестики, а другой – всегда нолики. Первый игрок, который выстроил в ряд по вертикали, горизонтали или диагонали три своих фигуры, побеждает. Первым ходит игрок, который ставит крестики. Если все клетки поля заполнены, но ни один из игроков не выиграл, объявляется ничья.
Начнём создание игры. Царапка в этой игре нам не понадобится, поэтому удалим его спрайт. Создадим первую клетку поля. Для этого загрузим её спрайт из файла с именем «Пустая клетка» в нашей рабочей папке. На сцене появился квадрат, который будет обозначать клетку поля. Перейдём на вкладку «Костюмы» и установим центр костюма так, чтобы он приблизительно совпадал с центром квадрата. Затем загрузим ещё два костюма. Они находятся в нашей рабочей папке с именами «Крестик» и «Нолик». Установим центры новых костюмов также в центрах квадратов. Установим нужный размер клетки.
Теперь займёмся составлением скриптов для клетки поля. Сначала составим скрипт, который при нажатии на клетку будет устанавливать в ней крестик или нолик. Скрипт будет запускаться при нажатии на спрайт. Дальше нужно определить, какой знак должен быть в клетке, а для этого мы должны знать, чей сейчас ход. Чтобы знать, чей ход, создадим переменную, которую назовём «Ходят». В скрипте с помощью блока для полной формы ветвления проверим содержимое этой переменной. Если в переменной хранится строка «Крестики», то с помощью блока из категории «Внешность» сменим костюм клетки на «Крестик». В противном случае ходят нолики – и мы сменим костюм клетки на нолик.
После того как в клетку был установлен знак, ход должен перейти к другому игроку. Для этого после смены костюма клетки на «Крестик» зададим переменной «Ходят» значение «Нолики». Соответственно, после смены костюма на «Нолик» зададим переменной «Ходят» значение «Крестики». В начале игры клетка должна быть пуста, поэтому добавим ей скрипт, который при нажатии на зелёный флажок будет менять текущий костюм клетки на костюм «Пустая клетка». Так как потом будут создаваться спрайты других клеток, в окне информации о спрайте изменим имя спрайта на «Клетка 1».
Попробуем запустить скрипты на выполнение, нажав на зелёный флажок. При нажатии на клетку в ней появился нолик, хотя первыми ходят крестики. Так произошло потому, что в начале игры мы не задали значение переменной «Ходят». Чтобы это сделать, составим скрипт для сцены. При нажатии на зелёный флажок этот скрипт будет задавать переменной «Ходят» значение «Крестики».
Снова запустим скрипты, нажав на зелёный флажок. Теперь при нажатии на клетку в ней появляется крестик. Попробуем нажать на клетку ещё раз. Теперь в ней крестик сменился на нолик. Так быть не должно. Чтобы это исправить, сделаем, чтобы скрипт, запускающийся при нажатии на клетку, срабатывал только один раз и больше не запускался. Для этого поместим всё содержимое скрипта, кроме блока запуска, в блок сокращённой формы ветвления. В каком случае должен срабатывать скрипт? Когда клетка пуста. Чтобы это проверить, установим в качестве условия ветвления из категории «Операторы» блок «=». В одну ячейку блока поместим вот датчик номера костюма из категории «Внешность». Костюм пустой клетки у этого спрайта идёт первым, поэтому во вторую ячейку блока «=» запишем цифру 1. Так скрипт будет срабатывать, только когда клетка ещё пуста.
Снова запустим скрипты и нажмём на клетку. В клетке появился крестик. При повторном нажатии теперь ничего не происходит. Продолжим составление скриптов. Добавим подсчёт сделанных ходов. Для этого создадим переменную, которую назовём «Сделано ходов». В скрипте для сцены зададим этой переменной значение ноль. После каждого хода мы будем увеличивать значение этой переменной на единицу. Для этого добавим в скрипт, который срабатывает при нажатии на клетку, блок «Изменить», увеличивающий значение переменной на 1.
Также после очередного хода нужно проверить, а не окончена ли игра. Для этого с помощью блока «Передать и ждать» будем передавать сообщение «Проверка конца игры». Также условимся, что в конце игры будем выводить на сцену одну из заставок. При этом нужно спрятать клетки. Для этого добавим клетке скрипт, который будет срабатывать при получении сообщения «Конец игры». В этот скрипт добавим единственный блок – «Спрятаться». Соответственно нужно чтобы клетка вновь появлялась на экране при запуске новой игры. Для этого добавим в скрипт, который срабатывает при нажатии на зелёный флажок, блок «Показаться». Перед блоком «Показаться» добавим в этот же скрипт блок «Перейти в...». Этот блок будет передвигать клетку на нужное место сцены.
Мы закончили составление скриптов клетки поля. Нам нужно создать ещё 8 таких же клеток. Для этого продублируем спрайт клетки восемь раз. После того как у нас появилось 9 клеток, нужно расставить их по местам. Для этого в блоках «Перейти в...» нужно указать координаты точек. Условимся, что клетки будут расположены по порядку справа налево и сверху вниз, а расстояние между центрами будет сто шагов. Средняя, то есть пятая, клетка поля будет находиться в центре сцены. Значит, координаты первой клетки будут (-100; 100). Координаты второй клетки: (0; 100). Также заполним блоки в остальных клетках до девятой с координатами: (100; -100).
Теперь выделим сцену и перейдём на вкладку «Фоны». Добавим фоны заставок для победы крестиков, для победы ноликов и ничьей. Они расположены в нашей рабочей папке под именами «Победили крестики», «Победили нолики» и «Ничья».
Остаётся описать проверку конца игры, которая будет происходить после очередного хода. Для этого добавим для сцены скрипт, который будет запускаться сообщением «Проверка конца игры». Сперва предположим, что никто из игроков не победил. Создадим переменную, которую назовём «Игрок победил», и в скрипте зададим ей значение «Нет».
Дальше будем проверять, победил ли какой-нибудь игрок. Для этого добавим блок для сокращённой формы ветвления, который будет проверять один из вариантов победы. Если этот блок сработает, то мы установим для переменной «Игрок победил» значение «Да». Теперь перейдём к условию блока. Какие вообще существуют варианты победы? Всего их восемь, на экране каждый обозначен линией. Сперва рассмотрим все варианты с участием первой клетки. Всего их три. Первый из них – это заполнение одинаковыми фигурами верхней горизонтальной линии клеток. Костюмы всех клеток на этой линии должны совпадать. Чтобы это проверить, составим вот такое условие. Оно сработает, если номер костюма первой клетки равен номеру костюма второй клетки и равен номеру костюма третьей клетки. Однако это условие будет выполняться в начале игры, когда все клетки пусты. Поэтому нужно также проверить, что клетки не пусты, то есть номер костюма первой клетки больше единицы.
Так мы получили проверку первого варианта победы. Продублируем ветвление ещё семь раз для проверки остальных вариантов победы. Так вторым проверим случай, когда заполнена диагональная линия от первой клетки до девятой. Третьим – когда заполнена вертикальная линия от первой клетки до седьмой. Также добавим непроверенный случай с участием второй клетки, два непроверенных случая для третьей клетки и по одному случаю для горизонтальных линий из четвёртой и седьмой клеток.
Так мы проверим восемь вариантов победы, и если хотя бы один из них сработает, то значение переменной «Игрок победил» изменится на «Да». Проверим это с помощью блока для сокращённой формы ветвления. В этом блоке нужно установить, какой из игроков победил. Для этого добавим блок полной формы ветвления. В его условии проверим значение переменной «Ходят». Если это значение «Крестики», значит, до этого ходили нолики и они победили. В этом случае сделаем паузу в одну секунду, чтобы игроки видели поле. Затем с помощью блока «Передать и ждать» отправим сообщение «Конец игры», изменим фон сцены на «Победили нолики» и остановим все скрипты с помощью блока «Стоп». Скопируем эти же блоки для случая, когда победили крестики, только изменим фон сцены на «Победили крестики».
Остаётся рассмотреть случай, когда ни один из игроков не победил, но игра всё равно закончена, то есть ничья. Для этого добавим в скрипт блок сокращённой формы ветвления. Какое условие ничьей? Сделано девять ходов, при этом никто из игроков не выиграл. Если скрипт выполнился до этого ветвления, то никто из игроков уже не победил. Поэтому условием ветвления будет то, что сделано 9 ходов. В этом случае выполним те же команды, что при победе любого из игроков, только установим для сцены фон «Ничья». Также не забудем в скрипт запуска игры добавить смену фона на «Фон один», чтобы в начале новой игры убрать заставку со сцены.
Составление скриптов закончено. Попробуем сыграть в игру. Сделаем, чтобы победили крестики. На экране появилась заставка о том, что крестики победили. Снова запустим игру и сделаем, чтобы победили нолики. На экране появилась соответствующая заставка. Снова запустим игру и сыграем в ничью. На экран была выведена соответствующая заставка. Игра работает правильно. Сохраним проект в нашей рабочей папке под именем «Крестики-нолики».
Нам осталось только опубликовать игру. Для этого в меню «Файл» есть пункт «Опубликовать на сайте». Выберем его. На экране появилось окно для публикации. В нём нужно указать название проекта, а также имя и пароль, которые вы указали при регистрации в Scratch-сообществе. После нажатия на кнопку «Окей», если мы всё ввели правильно, на экране появится сообщение о том, что наш проект был успешно загружен на сайт.
Но то, что мы загрузили проект, ещё не значит, что мы им поделились. Чтобы это сделать, перейдём к сообществу Scratch. Если у вас не выполнен вход в сообщество, то нужно нажать на кнопку «Вход» и в появившемся окне ввести имя и пароль, которые мы указали при регистрации. После входа нужно зайти в раздел «Мои работы» и найти в нём загруженный проект. Дальше нужно войти внутрь проекта. Для этого нажмём на соответствующую кнопку в его строке. В онлайн среде разработки нужно проверить размеры блоков, иногда их нужно изменить. После этого остаётся лишь нажать на кнопку «Поделиться». После этого нам сообщат, что теперь наш проект доступен всем и предложат заполнить страницу проекта, написав инструкцию к нему и примечания. Также на странице проекта можно получить ссылку на него. Это удобно потому, что из-за большого количества проектов на сайте наш проект может быть сложно найти. Теперь другие люди смогут поиграть в нашу игру, посмотреть, как мы её написали, и оставить свой комментарий.
Сегодня мы рассмотрели публикацию проектов в сети. Мы создали в Scratch игру «Крестики-нолики» и поделились ею со scratch-сообществом.