[personal profile] blocknote

© 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/

(will be screened)
(will be screened)
(will be screened)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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