Oct. 9th, 2022


© 2016 Adam Hammond
adamhammond.com
https://www.adamhammond.com/wp-content/uploads/2016/03/hammond_twineguide_2_programming.pdf
В этом руководстве объясняется, как использовать переменные и выполнять базовое программирование в Twine. Все эти
инструкции основаны на формате истории SugarCube. Прежде чем начать, убедитесь, что ваша Twine игра
настроена на формат SugarCube. Для этого нажмите на название своей истории в ее главной
вид «карта-история». Выберите «Изменить формат истории» и установите флажок рядом с «Sugarcube».(в последних версиях инетрефейс изменился, но все равно найти можно)
Что такое переменная?
Переменная — это контейнер, содержимое которого можно изменить. (Он получил свое название из-за того, что его содержимое
«переменное».) Думайте об этом как о конверте. Вы можете положить в конверт лист бумаги с надписью «Адам».
Вы можете положить в него лист бумаги с надписью 9. Вы можете вложить в него целый роман.
Переменные имеют имена и значения. Значением переменной является описанное выше «содержимое» — слово
«Адам», или цифра 9, или весь роман. Имя — это просто сокращение, которое Twine будет использовать для доступа к
чему бы то ни было в нем. Вы должны выбрать имя переменной, но вы можете называть ее как хотите.
Единственное правило состоит в том, что переменные Twine всегда должны начинаться со знака доллара ( $ ). Чтобы оживить переменную, используйте
Команда SugarCube <<set>>, которая делает две вещи: создает переменную с определенным именем и дает ей
его начальное «значение» ( "value.")

<<set $myvariable to "Adam">>
<<set $myothervariable to 99>>
<<set $yetanother to true>>

Вот три основных типа переменных, которые могут понадобиться: текстовые (также известные как «строки» - "strings"), числа (также известные как «числовые» - "numeric" переменные) и true/false (логические - "booleans" значения). Обратите внимание, что вам нужно поместить в кавычки содержимое текстовых переменных. Не используйте кавычки для чисел или переменных true/false.

Приложение №1: Использование ключа в вашей игре
Допустим, вы делаете игру о побеге из замка. Для того, чтобы иметь возможность выйти из замка, ваш
игрок должен найти ключ к двери. Этот ключ спрятан в каком-то непонятном месте вашей игры; вы намеренно сделали его трудным для поиска.
Вам понадобится переменная с именем вроде $hasKey, которая будет принимать одно из двух значений: false, когда у игрока его нет, и правда, когда она его находит.
По умолчанию у игрока нет ключа. Итак, в начале прохождения вашей игры вы захотите создать свою
переменную и установите для нее значение false , например:
 
<<set $hasKey to false>>

 В отрывке, когда ваш читатель входит в потайную комнату и находит ключ, вы захотите установить
значение $hasKey в true . Вы можете сделать это, вставив в этот отрывок (прим. в оригинальном тексте отрывок - passage - так называются блоки кода внутри Twine, аналог локации в QSP) следующую строку кода:
 
<<set $hasKey to true>>
 
(Обратите внимание, что <<set>> может создавать переменные, но если переменная уже существует, она просто изменяет своё значение.)

Хорошо, а теперь представьте, что мы находимся в прохождении вашей игры, где игрок, наконец, добрался до главной двери замка и пытается сбежать. Если у него есть ключ, он может сбежать. Если ключа нет, он этого не сделает. Чтобы реализовать это, вы можете использовать функцию SugarCube <<if>>, например:

<<if $hasKey is true>> Вы вставляете ключ в дверь, и она открывается. 
Вы [[проходите через дверь|наружу]]. 
(прим. Если вы пишите игру на русском языке, то ссылки в квадратных скобках и названия пассажей (отрывков) прописанные по-русски будут работать также как и английские, но если вы переводите игру, то, чтобы не ломать код можно сохранить английский оригинал названия пассажей  [[walk through the door|outside]] потому, что они могут быть нужны для другой части кода. Левая часть ссылки в квадратных скобках до вертикальной черты: walk through the door - название ссылки как она будет отображаться в тексте игры. Справа от вертикальной черты название отрывка (passage) куда вы перейдете по ссылке)
<<elseif $hasKey is false>> Вы пытаетесь открыть дверь, но она заперта и не поддается. Вам нужно будет [[продолжать искать ключ|start]].
<</if>>

Еще раз:
1 <<if $hasKey is true>>You insert your key into the door and it opens. You
   [[walk through the door|outside]].
2 <<elseif $hasKey is false>>You try to open the door, but it's locked, and it
    won't budge. You'll need to [[keep looking for the key|start]].
3 <</if>>

Twine начинает с оценки первой строки оператора if; если это не так, он смотрит на первый elseif
строка, затем просматривает остальные строки elseif (если они есть) и прекращает работу, когда она
достигает <</if>>, что означает, что оператор if закончился. В дополнение к if и elseif вы также можете
написать else , что просто означает «Если ни одно из условий if или elseif не выполняется, сделайте это.) Также обратите внимание, что если вы работаете с числами, вы можете использовать условные операторы, такие как gt ("больше") и lt ("меньше").
чем") вместо просто is.

Все это означает следующее. Во-первых, Twine проверит, является ли значение $hasKey is true. Если это так, то отобразит текст «Вы вставляете свой ключ в дверь, и она открывается» и дает пользователю возможность щелкнуть по ссылке на проход за пределы замка. Если значение $hasKey не true, Twine не будет отображать этот текст для пользователя, и пользователь не сможет нажать на эту ссылку. Теперь Twine оценит следующую возможность. Здесь он оценит, является ли значение $hasKey is false. Если оно false - ложно (что так и есть по умолчанию, так как мы установили это в качестве начального значение в начальном пассаже), то Twine отобразит текст «Вы пытаетесь открыть дверь, но она заперта, и не сдвигается с места», и единственным вариантом будет щелкнуть ссылку, которая вернет игрока к старту игры, чтобы заново начать поиск этого неясного прохода, где $hasKey имеет значение true (прим. в оригинале $hasKey is set to true)

 Приложение №2: Проверка имени игрока
Скажем, вы хотите сделать игру, в которой вы спрашиваете имя игрока и узнав его, даете какой-то индивидуальные ответ.
В первом "passage" используйте встроенный код SugarCube для отображения текстового поля и "приклеивания" всего, что игрок впишет в переменную:
 
Введите ваше имя:
<<textbox "$name" "">>
Когда будете готовы, нажмите [[здесь]].
 
Этот код указывает, что все, что игрок вводит в текстовое поле - text box, будет сохранено в переменной с именем
$name («» просто означает, что в поле нет текста по умолчанию — если написать «Введите свое имя
здесь» в этом месте текстовое поле изначально будет отображаться с надписью «Введите свое имя здесь».)
Теперь, на следующей странице, вы можете сделать так, чтобы ваша игра отображала специальное сообщение, если кто-то
вписали свое имя как «Адам».
 
<<if $name is "Adam">>Эй, тебя зовут Адам! Как и меня!
<<else>>Привет, $name.
<</if>>

Twine будет отображать только «Эй, тебя зовут Адам! Меня тоже!» если переменная $name равна «Адам».
В противном случае — <<else>> — он просто скажет «Привет» и повторит ей имя человека в ответ (да, это круто).
дело в переменных. Если вы введете имя переменной в обычный фрагмент текста, Twine заменит его на
значение переменной, когда она фактически показывает его игроку.)

Приложение №3: Запись «счастья» игрока
Допустим, вы хотите, чтобы ваша игра постоянно подсчитывала, насколько «счастлив» ваш игрок. Вы могли бы сделать это
с числовой переменной. Например, в начале игры вы можете включить:
 
<<set $happiness to 0>>

Затем, всякий раз, когда происходит что-то, что делает вашего игрока счастливым, вы можете включить эту строку:
 
<<set $happiness to $happiness + 1>>
 
Если уровень счастья игрока равен нулю перед этим passage эта строка кода установит его равным 1 (0 + 1 = 1). Если
уровень счастья игрока равен 3, эта строка кода установит его на 4 (3 + 1 = 4). Причина, по которой вы не
хотите, чтобы эта строка была <<set $happiness to 1>>, так это сотрет все ваши "текущие подсчеты", и просто установит значение счастья на 1, независимо от того, насколько счастлив был ваш персонаж до того, как наткнулся на это
конкретный пассаж.
Когда происходит что-то, что делает вашего игрока несчастным, вы можете включить эту строку кода:
<<set $happiness to $happiness - 1>>
Позже предположим, что вашему игроку звонит друг. Если их уровень счастья выше определенного
порога, они решают пойти за мороженым. Если их уровень счастья ниже этого порога, они не
берут трубку и остаются внутри. Вы можете закодировать это следующим образом:

<<if $happiness gte 5>>Вы берете трубку, она приглашает вас на мороженое, и вы [[уходите]].
<<else>>Вы не хотите брать трубку. Я думаю, ты никогда не узнаешь, что она
хотела тебя спросить. Ты [[остался дома]].
<</if>

Здесь, если ваша переменная $happiness имеет значение 5 или выше (gte на языке SugarCube означает «больше чем или равно"), ваш игрок получит возможность перейти к пассажу с мороженым. В противном случае — <<else>> —
их единственный вариант — перейти к проходу «оставаться дома».
Это всего лишь несколько примеров для начала. Если вы взволнованы этим, вы захотите посетить эту страницу
полный список макросов SugarCube 1.x: http://www.motoslave.net/sugarcube/1/docs/macros.html
Если вы действительно разбиретесь во всем этом, я настоятельно рекомендую вам установить SugarCube 2.0, который является немного полнее и веселее. Инструкции по его загрузке и полная документация находятся по адресу:
http://www.motoslave.net/sugarcube/2/

Profile

blocknote

January 2025

S M T W T F S
    1234
567891011
12131415 161718
19202122232425
2627 28293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Powered by Dreamwidth Studios