
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04

Я так рада, что ты снова присоединился ко мне! Это означает, что вампус еще не съел вас. Хороший!
Для тех из вас, кто не знаком, это набор руководств, которые я делаю, чтобы помочь моей очаровательной кузине-кузине-кузнецу с ее старшим проектом. Эти руководства предназначены для ознакомления с тем, что вы можете делать с некоторыми функциями программирования 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 () на странице документации Sugarcube.
«Мелкая» копия - это то, что мы делали раньше. Вместо того, чтобы делать полную копию всего массива, он просто предполагает, что ваша переменная работает с тем же массивом. Вместо неглубокой копии clone () выполняет «глубокую» копию, которая ведет себя так, как вы ожидаете. Каждый элемент массива копируется в новый массив и полностью отделен от оригинала.
Если мы протестируем этот новый код, мы обнаружим, что он работает должным образом.
Конечно, не имеет значения, храните ли вы $ roomlist или нет. Для целей моего проекта я не собираюсь этого делать. Все это было сделано для того, чтобы продемонстрировать глубокие и неглубокие копии.
Шаг 10: На этом все

Мы добавили код, который позволяет нашему игроку запускаться в случайной комнате. В дополнение к этому, мы устранили ошибку, из-за которой игрок начинал в той же комнате, что и Wumpus.
Мы узнали о том, как создавать ссылки из переменных и как Sugarcube обрабатывает копирование массивов.
Вещи набирают обороты, но мы только начинаем!
Хорошей охоты!
Рекомендуемые:
Дизайн игры в Flick за 5 шагов: 5 шагов

Дизайн игры в Flick за 5 шагов: Flick - это действительно простой способ создания игры, особенно чего-то вроде головоломки, визуального романа или приключенческой игры
Счетчик шагов - Micro: Bit: 12 шагов (с изображениями)

Счетчик шагов - Микро: Бит: Этот проект будет счетчиком шагов. Мы будем использовать датчик акселерометра, встроенный в Micro: Bit, для измерения наших шагов. Каждый раз, когда Micro: Bit трясется, мы добавляем 2 к счетчику и отображаем его на экране
Играйте в Doom на своем IPod за 5 простых шагов !: 5 шагов

Играйте в Doom на своем IPod за 5 простых шагов!: Пошаговое руководство по двойной загрузке Rockbox на iPod, чтобы играть в Doom и десятки других игр. Это действительно легко сделать, но многие люди до сих пор удивляются, когда видят, как я играю дум на своем iPod, и путаются с инструкциями
Кормушка для рыбы Arduino Uno за 6 простых и простых шагов !: 6 шагов

Arduino Uno Fish Feeder за 6 простых и дешевых шагов !: Итак, для этого проекта может потребоваться немного предыстории. Людям с домашними рыбками, вероятно, приходилось сталкиваться с той же проблемой, что и мне: отпуск и забывчивость. Я постоянно забывала покормить рыбу и всегда старалась это сделать, пока она не упала
Создавать партнерские (реферальные) ссылки Banggood проще, чем когда-либо: 4 шага

Создавать партнерские (реферальные) ссылки Banggood проще, чем когда-либо: сокращенную версию этого руководства можно найти в моем личном блоге. Партнерские продажи являются отличным источником дополнительного дохода для создателей контента, и многие люди с инструкциями используют их. партнерская программа Ban