Оглавление:

Ссылки из переменных в Twine with Sugarcube: 10 шагов
Ссылки из переменных в Twine with Sugarcube: 10 шагов

Видео: Ссылки из переменных в Twine with Sugarcube: 10 шагов

Видео: Ссылки из переменных в Twine with Sugarcube: 10 шагов
Видео: Twine: создание интерактивных игр, структурирование контента и сторителлинг 2024, Ноябрь
Anonim
Ссылки из переменных в Twine with Sugarcube
Ссылки из переменных в Twine with Sugarcube

Я так рада, что ты снова присоединился ко мне! Это означает, что вампус еще не съел вас. Хороший!

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

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

Шаг 1. Создайте своего игрока

Создайте своего игрока
Создайте своего игрока

Это очень простой шаг. По сути, я использую тот же код, что и мой $ wumpus, но с переменной $ player.

Шаг 2: новый код комнаты

Новый код номера
Новый код номера

Изменен общий код вашей комнаты, поэтому значением $ player является текущая комната. Затем сравните $ wumpus с $ player вместо текущей комнаты.

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

Шаг 3. Создание ссылки из переменной

Создание ссылки из переменной
Создание ссылки из переменной

Наконец, хочу заменить ссылку в моей начальной комнате на ссылку, которая изменяется в зависимости от значения $ player. Это можно сделать с помощью функции "" в Sugarcube. Вы можете узнать больше об этом на странице документации Sugarcube.

Первая строка после нашей команды - это фраза, которая появится в нашем отрывке. Второй - это название отрывка, на который мы хотим сделать ссылку. Я использую "Охота на Wumpus!" как моя фраза, но вместо этого мы могли бы использовать нашу переменную, если хотим, чтобы игрок заранее знал, куда он идет, например:

Шаг 4: Тест

Тестовое задание
Тестовое задание
Тестовое задание
Тестовое задание

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

К сожалению, это также может привести вас прямо в комнату Wumpus! Сейчас это не имеет большого значения, но в реальной игре это мгновенно закончится. Нам нужно это исправить.

Шаг 5: Добавьте список комнат

Добавить список комнат
Добавить список комнат

Во-первых, мы собираемся создать список комнат, чтобы упростить управление комнатами. Объявив этот массив, мы можем использовать его для установки значений $ player и $ wumpus без повторения кода. У него также есть еще одно преимущество, которое мы рассмотрим далее.

Тестирование с помощью этого кода должно вести себя так же, как и раньше.

Шаг 6: удаление комнат

Удаление комнат
Удаление комнат

Я добавил одну строку кода в код из предыдущего (выделено).

Массивы в Sugarcube имеют встроенную функцию, которая позволяет удалять из них элементы по имени. В этом случае, как только мы назначим $ wumpus комнату, мы сможем удалить эту комнату из нашего $ roomlist. Однако эта функция привередлива. Это не будет работать, если выход функции не назначен или не используется каким-либо образом. Чтобы позаботиться об этом, я создал временную переменную _temp.

В Sugarcube временные переменные начинаются с подчеркивания (_) вместо доллара ($). Они полезны, потому что удаляются после выполнения отрывка, поэтому вам не нужно беспокоиться о наложении имен переменных.

Я, конечно же, удаляю комнату $ player из $ roomlist.

Шаг 7: Тестирование

Тестирование
Тестирование
Тестирование
Тестирование

Хотя мы могли бы запустить код в том виде, в каком он есть сейчас, это не будет очень тщательным тестом. Если мы запустим код и обнаружим, что $ player и $ wumpus назначены разным комнатам, мы не знаем, работает ли это код или это просто случайность. Конечно, мы могли бы запускать код много раз и предполагать, что, если он никогда не назначит им обоим одну и ту же комнату, этого никогда не будет, но это займет вечность, и это еще не 100% гарантия того, что этого никогда не произойдет.

Вместо этого нам нужен способ проверки.

Я добавил три строки в верхнюю часть нашего вступительного отрывка, которые позволят нам увидеть значения наших переменных $ wumpus, $ player и $ roomlist. Из-за того, как мы настроили наш код, мы знаем, что комнаты $ wumpus и $ player должны быть удалены из списка $ roomlist.

Когда мы запускаем этот код, мы можем проверить, что это так.

Шаг 8: странности с сахарным кубиком и предметами

Странности с сахарным кубиком и предметами
Странности с сахарным кубиком и предметами
Странности с сахарным кубиком и предметами
Странности с сахарным кубиком и предметами
Странности с сахарным кубиком и предметами
Странности с сахарным кубиком и предметами

Объекты Sugarcube немного странные. Позвольте мне продемонстрировать это.

Когда я изначально создавал этот проект, я хотел сохранить свой $ roomlist в переменной $ saveroom, прежде чем я начну удалять из него комнаты. Я подумал, что это пригодится позже.

Когда у меня появилось странное поведение этого кода, я добавил еще одну строку на мою вводную страницу, чтобы я мог посмотреть на мою переменную $ saveroom (второе изображение).

Я был шокирован, обнаружив, что элементы, которые я удалил из $ roomlist, также были удалены из моего сохраненного списка! Вы можете увидеть это в действии на третьей картинке.

Это потому, что когда вы копируете такой массив, вы на самом деле не говорите Twine копировать массив, вы говорите Twine, что эти две переменные являются одним и тем же массивом. Когда вы что-то делаете с массивом, используя одну переменную, он изменяет тот же массив, на который смотрит другая переменная!

Мы можем исправить это с помощью функции clone ().

Шаг 9: функция Clone ()

Функция Clone ()
Функция Clone ()
Функция Clone ()
Функция Clone ()

Вы можете прочитать о функции clone () на странице документации Sugarcube.

«Мелкая» копия - это то, что мы делали раньше. Вместо того, чтобы делать полную копию всего массива, он просто предполагает, что ваша переменная работает с тем же массивом. Вместо неглубокой копии clone () выполняет «глубокую» копию, которая ведет себя так, как вы ожидаете. Каждый элемент массива копируется в новый массив и полностью отделен от оригинала.

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

Конечно, не имеет значения, храните ли вы $ roomlist или нет. Для целей моего проекта я не собираюсь этого делать. Все это было сделано для того, чтобы продемонстрировать глубокие и неглубокие копии.

Шаг 10: На этом все

На этом все!
На этом все!

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

Мы узнали о том, как создавать ссылки из переменных и как Sugarcube обрабатывает копирование массивов.

Вещи набирают обороты, но мы только начинаем!

Хорошей охоты!

Рекомендуемые: