Как сделать?
…
AleksGor:
Lisichka:
“текст 1”
это текст. его много, потому убрал в примере.
CLS в тексте 2 не нужна, потому что чистит все кроме окна инвентаря.
упс, я потер лишнее, вот такой код не работает:IF читать=1: CLS "текст текст текст" act "задуматься": goto "задуматься" END ELSE:"нужно заглянуть в начало дневника"потому то и нужен CLSв первом случае, и он работает, я проверял - когда чел. прочел 1 часть и нажал на вторую, срабатывает условие IF и CLS стирает всё, пользователь не сможет уйти из локации и проигнорировать act “задуматься” (можно сделать так что бы кнопка была во всех локациях, но это сложнее), только срабатывал с какого то перепоя еще и ELSE, добавляя текст “нужно заглянуть в начало дневника” к IFу. исчезла, как я уже говорил эта проблема только после смены ELSE на IF читать<>1:. но почему она вообще была?! не понимаю. ведь логика в первом примере и во втором одинакова. вся разница, то что первый пример срабатывает когда человек просто через GOTO попадает на локацию, а в примере, в котором у меня была проблема - через меню долбаного дневника
Spoiler
$меню_Дневник[0]=“осмотреть:осмотреть” $меню_Дневник[1]=“читать:читать_1”
$меню_Дневник[2]= “читать дальше:читать_2”
If $selobj=“дневник мага”: menu”$меню_Дневник”
unselКонкретно, когда используется $меню_Дневник[2]= “читать дальше:читать_2” и вызывается этот код:
Spoiler
IF читать=1: CLS
“текст текст текст”
act “задуматься”: goto “задуматься”
END
ELSE:”нужно заглянуть в начало дневника”хмм, пока писал пришла в голову мысль что можно поменять текст местами, тогда CLS по идее должен чистить текст “нужно заглянуть в начало дневника” или, опять же поменяв его местами, присобачить к IFу jump, что бы кусок кода при невыполнении условия просто не считывался… надо будет попробовать ради интереса, но это не отменяет вопроса о логике QSP. в чем причина срабатывания кода по другому?!
AleksGor,
IF - ELSE - END — это единая конструкция, в ней IF означает ЕСЛИ, ELSE означает ИНАЧЕ, END означает КОНЕЦ.
Работает это так:
IF <условие>:
<то, что выполняется, если условие верно>
ELSE
<то, что выполняется, если условие неверно>
END
У тебя же ELSE стоит дальше слова END, закрывающего эту конструкцию.
snail:
У тебя же ELSE стоит дальше слова END
не спорю. но END ставится если конструкция многострочная не только в ее конце.а у меня она многострочная. щас попробую
работает! странно. почему тогда первый пример работает? там же между IF и ELSE тоже END, и конструкция тоже многострочная…
IF вещи = 0:
"Телега подъехала прямо к входу в и девушка вместе со стариком быстро перенесла в нее свои немногочисленные вещи. После этого она попрощалась со старостой, тот вскоре отправился на своей телеге обратно, и лишь скрип ее несмазанных осей еще долго был слышен среди деревьев…"
ACT "осмотреться":
вещи = 1
goto "Осмотр"
END
ELSE:
ACT "в башню":goto "1_этаж"
ACT "в лабораторию":goto "лаборатория"
ACT "в деревню":goto "деревня"
END
ой, кажется понял. вопрос снят.END сдвинут табом, как я мог забыть! но в неработающем примере я кажется его тоже табом сдвигал… или нет…
AleksGor:
Конкретно, когда используется $меню_Дневник[2]= “читать дальше:читать_2” и вызывается этот код:
Spoiler
IF читать=1: CLS
“текст текст текст”
act “задуматься”: goto “задуматься”
END
ELSE:”нужно заглянуть в начало дневника”может, так нужно записать?
IF читать = 1:
CLS
"текст текст текст"
ACT 'Задуматься':
GT 'задуматься'
END
ELSE
'Нужно заглянуть в начало дневника.'
END
END
AleksGor,
таб тут вообще ни при чём. Он используется только для придания наглядности коду:
IF вещи = 0:
"Телега подъехала прямо к входу в и девушка вместе со стариком быстро перенесла в нее свои немногочисленные вещи. После этого она попрощалась со старостой, тот вскоре отправился на своей телеге обратно, и лишь скрип ее несмазанных осей еще долго был слышен среди деревьев…"
ACT "осмотреться":
вещи = 1
goto "Осмотр"
END
ELSE
ACT "в башню": goto "1_этаж"
ACT "в лабораторию": goto "лаборатория"
ACT "в деревню": goto "деревня"
END
END используется не только в многострочных формах оператора IF, но и в многострочных формах оператора ACT.
AleksGor:
там же между IF и ELSE тоже END, и конструкция тоже многострочная…
Этот END как раз и соответствует действию ACT “осмотреться” в многострочной форме оператора ACT.
Lisichka,
ага, я разобрался, фишка была в том что бы END “закрывал” ТОЛЬКО ACT ‘Задуматься’: GT ‘задуматься’, если он многострочный, потому его нужно было сдвинуть. кстати у тебя в примере последний END не нужен. судя по всему кусп считает ELSE ‘Нужно заглянуть в начало дневника.’ однострочным вне зависимости от того перенесен ли текст на другую строку или нет. это видимо потому что там нет “операторов”, т.е. всяких там GOTO, ACT, и т.д.
snail:
таб тут вообще ни при чём. Он используется только для придания наглядности коду:
дык работает же. НЕ ПОНЯЛ!? щас вообще все работает!!!! не работало же, прибавляло текст…. это бреееед.
нет, не бред. кажется у меня ACT ‘Задуматься’: GOTO “задуматься” шел одной строкой, т.е. был однострочным и end там был не нужен, а я его влепил.
Спасибо, ребят. пойду отсыпаться, пока мозг не взорвался
AleksGor:
судя по всему кусп считает ELSE ‘Нужно заглянуть в начало дневника.’ однострочным
Ещё раз повторяю: ELSE — это не самостоятельный оператор. ELSE — это часть условного оператора IF.
snail:
ELSE — это часть условного оператора IF.
все, понял, спасибо. такие вот, мы - дикари от программирования :|
Ребят, всем привет! Я тут решил приобщиться к прекрасному, написал свой генератор предложения и обнаружил досадную ошибку.
Предложение состоит из четырёх частей, слова в каждую берутся случайным образом из четырёх массивов соответственно. Но иногда последний массив возвращает мне пустоту: это случается где-то в 2-3 предложениях из 15.
вот скрин:

почему так? можно ли пофиксить?
Не могу решить проблему с падежами, у меня в квесте есть битва бандитов против военных, а там просят ввести имя врага, ну я ввел: военные, а когда побеждаешь, там написано: вы победили Военные. Как сделать так, чтобы окончания были другими?
Millstream,
Хитрый Пряник:
Думаю, это сюда.
На дворе 21 век, когда роботы не то что разговаривают, а начинают выдвигать простейшие идеи. И на фоне этого почти нигде не наблюдается культуры интерфейсного языка в программах. И не только. Пресловутые «Уважаем(ый/ая)» повсеместно.Короче, мой вклад в искоренение топорности робоязыка. Функция, выбирающая правильное склонение предмета, согласно количеству. Может добавлять эпитет, можно подтачивать напильником, как нравится. Файл:
duxlab.com/files/qsp/chisskl-1_5.zip
я там нихрена не понял. копируй duxlab.com/files/qsp/chisskl-1_5.zip в адресную строку браузера. мож. разберешся
Друзья, не пойму, как сделать магазин? Я знаю, там нужны переменные и т д, и использование предметов, однако я не понял, как поставить счетчик денег, чтобы их тратить
Ничего не понял
Millstream,
деньги можно сделать через переменную.
создаешь новую локацию и пишешь в окне доп описания:
деньги = 100
теперь можно их отнимать.
добавляешь действие “Купить булочку” и в окне действия пишешь:
if деньги > 24:
addobj 'Булочка!'
деньги = деньги - 25
gt $curloc
else
'А денег больше нет!'
end
здесь указано, что если значение переменной “деньги” больше 24, то добавить в инвентарь предмет “Булочка!”, если же денег не хватает, то не добавлять. С репутацией почти то же самое - через переменные.
А вообще, тут все прекрасно объяснено, кстати)
Спасибо, но в QGen у меня нет окна доп описания. Где оно?