Всем привет. Разрешите несколько вопросов от новичка (пока разбираюсь с программированием):
1. Разъясните пожалуйста на примере полезности и необходимость использования массивов.
2. Где-то в блоге (не помню где) обмолвились о недокументированных многомерных массивах, больше ни где этого не видел. Есть ли такое, можно ли это использовать, если да, то где?
3. Можно ли сохранить рассказ, т.е. нельзя ли вывести линейный рассказ, полученный во время прочтения пользователем, т.е. прочитать то, что получилось от начала до конца во время чтения?
4. Можно ли, и если да, то как протестировать выполняются ли все участки кода (т.е. есть ли теоретическая возможность того, что все параграфы будут воспроизведены или наоборот есть пути с тупиками)? Подобный тест был бы полезен в виду появления в программе динамических ссылок.
Неактивен
Отвечаю
1. Не используйте массивы, пока не почувствуете необходимость в них.
2. Такого нет и не планируется.
3. Такого пока нет.
4. Не представляю, как сделать это
Неактивен
Нет, пока так сделать нельзя. В планах.
Неактивен
Flash написал:
А почему же у меня тогда это работает?
А как? Пример в студию
Неактивен
Ого, а я не знал
Морыч, я сделал это
Неактивен
Очень может быть Flash, спасибо!
Неактивен
Помогите с кодом:
Условие: есть три навыка (Навык Тяжелого оружия ближнего боя, Легкого оружия ближнего боя и Оружия дальнего боя). Есть один дар и два таланта, которым можно придать значение навыка. Дар и талант не могут быть обозначены одним навыком, как и два таланта. Если обозначить навык как дар, то возможность выбрать как талант исчезнет. Однако если выбрать даром другой навык, то возможность опять появится. С талантами то же самое. Если выбрать один для навыка, возможность выбрать этот навык вторым талантом должна исчезнуть.
Я разобралась с даром, однако проблема с талантами. Как сделать так, чтобы выбрав один, исчезала возможность выбрать второй и дар? (если выбрать сначала дар, возможность выбрать талант все таки исчезала.... раньше)
Параграф "анкета8":
[[Тяжёлое оружие ближнего боя|анкета9 {$0001=1}]] [[Лёгкое оружие ближнего боя|анкета9 {$0001=2}]] [[Оружие дальнего боя|анкета9 {$0001=3}]]
(Не буквеннык объекты, так как нажимая на ссылки сверху, играющий лишь попадает на страницу с описанием навыка, а не выбирает его)
Параграф "анкета9":
<<if $0001 eq 1>> Описание навыка "Тяжелое оружие". <<if !$дар >>[[Выбрать как дар|анкета9{$дар = 'тяжелое оружие'}]]<<elseif $дар neq 'тяжелое оружие'>>[[Выбрать этот дар вместо прежнего|анкета9{$дар = 'тяжелое оружие'}]]<<endif>> <<if $дар neq 'тяжелое оружие' and (!$талант1 or $талант1 neq 'тяжелое оружие')>>[[Выбрать как талант|анкета9 {$талант1 eq 'тяжелое оружие'}]] <<elseif $дар neq 'тяжелое оружие' and (!$талант2 or $талант2 neq 'тяжелое оружие' and $талант1>>[[Выбрать как талант|анкета9 {$талант2 eq 'тяжелое оружие'}]] <<endif>> <<elseif $0001 eq 2>> Описание навыка "Легкое оружие". <<if !$дар>>[[Выбрать как дар|анкета9{$дар = 'легкое оружие'}]]<<elseif $дар neq 'легкое оружие'>>[[Выбрать этот дар вместо прежнего|анкета9{$дар = 'легкое оружие'}]]<<endif>> <<if $дар neq 'легкое оружие' and (!$талант1 or $талант1 neq 'легкое оружие')>>[[Выбрать как талант|анкета9 {$талант1 eq 'легкое оружие'}]] <<elseif $дар neq 'легкое оружие' and (!$талант2 or $талант2 neq 'легкое оружие' and $талант1>>[[Выбрать как талант|анкета9 {$талант2 eq 'легкое оружие'}]] <<endif>> <<elseif $0001 eq 3>> Описание навыка "Дальнее оружие". <<if !$дар>>[[Выбрать как дар|анкета9{$дар = 'дальнее оружие'}]]<<elseif $дар neq 'дальнее оружие'>>[[Выбрать этот дар вместо прежнего|анкета9{$дар = 'дальнее оружие'}]]<<endif>> <<endif>> <<if $дар neq 'дальнее оружие' and (!$талант1 or $талант1 neq 'дальнее оружие')>>[[Выбрать как талант|анкета9 {$талант1 eq 'дальнее оружие'}]] <<elseif $дар neq 'дальнее оружие' and (!$талант2 or $талант2 neq 'дальнее оружие' and $талант1>>[[Выбрать как талант|анкета9 {$талант2 eq 'дальнее оружие'}]] <<endif>> ---- [[Вернуться|анкета8]]
Без добавления условного оператора с $талант1 и $талант2, объект $дар работает как нужно, однако при нынешнем коде вообще ничего не отображается. Почему?
Неактивен
Delakha написал:
Условие: есть три навыка (Навык Тяжелого оружия ближнего боя, Легкого оружия ближнего боя и Оружия дальнего боя). Есть один дар и два таланта, которым можно придать значение навыка. Дар и талант не могут быть обозначены одним навыком, как и два таланта. Если обозначить навык как дар, то возможность выбрать как талант исчезнет. Однако если выбрать даром другой навык, то возможность опять появится. С талантами то же самое. Если выбрать один для навыка, возможность выбрать этот навык вторым талантом должна исчезнуть.
Я тут покрутил немного, и получилось вот что:
:: Start <<display 'Объекты'>> [[Навыки]] :: Объекты <<set $навык = "">> <<set $нет = "нет">> <<set $дар = $нет>> <<set $талант1 = $нет>> <<set $талант2 = $нет>> <<set $выбрано = 0>> :: Навыки <<if ($выбрано neq 1) and ($дар eq $навык)>> <<set $дар = $нет>> <<endif>> <<if ($выбрано neq 2) and ($талант1 eq $навык)>> <<set $талант1 = $нет>> <<endif>> <<if ($выбрано neq 3) and ($талант2 eq $навык)>> <<set $талант2 = $нет>> <<endif>> Дар: <<print $дар>> Талант первый: <<print $талант1>> Талант второй: <<print $талант2>> [[Тяжёлое оружие ближнего боя|ОписаниеНавыков {$навык = "тяжёлое оружие"}]] [[Лёгкое оружие ближнего боя|ОписаниеНавыков {$навык = "лёгкое оружие"}]] [[Оружие дальнего боя|ОписаниеНавыков {$навык = "дальнее оружие"}]] :: ОписаниеНавыков <<if $навык eq "тяжёлое оружие">> Описание навыка «Тяжёлое оружие». <<elseif $навык eq "лёгкое оружие">> Описание навыка «Лёгкое оружие». <<else>> Описание навыка «Дальнее оружие». <<endif>> <<if $навык neq $дар>> [[Выбрать как дар|Навыки {$дар = $навык} {$выбрано = 1}]] <<endif>> <<if ($навык neq $талант1) and ($навык neq $талант2)>> <<if ($талант1 eq $нет) or ($талант2 neq $нет)>> [[Выбрать как талант|Навыки {$талант1 = $навык} {$выбрано = 2}]] <<else>> [[Выбрать как талант|Навыки {$талант2 = $навык} {$выбрано = 3}]] <<endif>> <<endif>> [[Назад|Навыки {$навык = ""}]]
Посмотрите, правильно ли работает.
У вас, я заметил, отсутствует закрывающая скобка в таких условиях:
<<elseif $дар neq 'тяжелое оружие' and (!$талант2 or $талант2 neq 'тяжелое оружие' and $талант1>>
Неактивен
Начал изучать ASM и в третьем уроке http://hyperbook.ru/blog.php?id=13628097918637 какие-то нелады с разнообразием описаний. Если сделать все по уроку, то получается, то первое описание совсем не выводится, а остальные чередуются. В чем загвоздка? Спасибо.
Неактивен
Из учебника:
В самом начале истории мы создадим объект «$селение», в котором будем запоминать номер описания сцены «Старое селение». Первоначально значение объекта «$селение» будет равно 1.
Т.е. в параграфе Start нужно написать:
<<set $селение = 1>>
Этой командой мы явно задаём начальное значение объекта. Если этого не сделать, значение объекта будет неопределённым (undefinied).
В учебнике все начальные значения объектов задаются в специальном параграфе "Создание объектов", который вызывается во вступлении. Смотрите главу "Инициализация объектов" в четвёртой части.
Неактивен
Как из своего (скачанного) конструктора перенести игру в онлайновый? Путем копирование исходного кода (кнопой "Новая", затем "Из буфера обмена") не выходит , "ок" жмется, но увы, игра не появляется (окно, также, не закрывается).
Неактивен
Да, только так. А размер большой? Может просто тормозит и надо подождать? А вы копируете sm файл или исходник из режима редактора?
Неактивен
Собственно, дело именно в этом. Если копировать из редактора, то не выходит, а если открыть файл sm в блокноте и скопировать оттуда, то все отлично.
(В окошке онлайн конструктора так и написано: скопируйте исходный текст из файла *.sm)
Неактивен
Кстати, в грядущем обновлении я это уже поправил и можно будет вставлять и оттуда и оттуда.
Неактивен
Здравствуйте! Я здесь человек новый, уж простите. если что не так. А вопрос у меня вот какой: можно ли сделать так, чтобы числовые переменные из одного параграфа прочитывались при нажатии на ссылку в другом параграфе.
Допустим, мы создаем примитивный симулятор жизни, где у героя есть 3 параметра: возраст. сила и интеллект. И вот наш герой размышляет над выбором профессии: кузнец или библиотекарь. Если станет кузнецом - то будет прокачивать силу, а если библиотекарем - то интеллект. Параграф Установка объектов выглядит так:
спойлер…
Вступление выглядит вот так:
спойлер…
А Основной параграф - так:
спойлер…
Как ни странно, если нажимать ссылку "дальше", то увеличивается лишь возраст героя, а его сила и интеллект не обсчитываются!. Можно, конечно, прописать кусок:
<<If $кузнец eq true>>
<<set $сила = $сила + 1>>
<<elseIf $библиотекарь eq true>>
<<set $интеллект = $интеллект + 1>>
<<endIf>>
...прямо в основном параграфе, но для меня это не вариант (ведь таких кусков будет очень много). Как же быть? Как заставить их работать? Пробовал и так и эдак, но ничего не выходит, так что я уже в полной прострации... Помогите!
Файл с игрой здесь:
http://yadi.sk/d/W-aW_tn0Hnchj
Отредактировано Atoll2 (12.02.2014 23:24)
Неактивен
Привет! Просить прощения не нужно, это специальная тема для вопросов и ответов Программа работает совсем не странно, а вполне себе логично. Параграф «Установка объектов» выполнился один раз и всё. Чтобы какой-то код выполнился ещё раз, соответствующий параграф нужно вызвать (макросом <<display>>, <<goto>> или перейти в параграф по ссылке). Предлагаю перенести проверку профессии в новый параграф «Увеличение возраста», и написать там так:
<<set $время = $время + 1>> <<If $кузнец>> <<set $сила = $сила + 1>> <<elseIf $библиотекарь>> <<set $интеллект = $интеллект + 1>> <<endIf>> <<goto 'Основной параграф'>>
Конечно же из параграфа «Установки объектов» этот кусок кода надо убрать, т.к. ни одна из проверок там не работает (и $кузнец и $библиотекарь = false).
А в «Основном параграфе» внизу напишем так:
[[Повзрослеть|Увеличение возраста]]
П.С. И ещё один момент, относящийся к стилю программирования. Если мы проверяем логическую переменную на истинность, то пишем просто <<if $объект>>, если на ложность, то <<if not $объект>> или <<if !$объект>>.
Неактивен
П.С. И ещё один момент, относящийся к стилю программирования. Если мы проверяем логическую переменную на истинность, то пишем просто <<if $объект>>, если на ложность, то <<if not $объект>> или <<if !$объект>>.
Кстати есть один подводный камень при такой проверке. <<if $объект>> не будет истиной, если $объект = "" (пустая строка) или $объект = 0. Такое поведение ASM унаследовал от Javascript.
P.S. Наверное ещё стоит написать, что соответственно <<if $объект>> будет истиной, если $объект имеет любое значение, кроме 0, "" и false
Неактивен