Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #351
01.11.2013 17:50

NeoMatrix777
Участник
Зарегистрирован: 01.11.2013
Сообщений: 2

Re: Как сделать что-то или "я вот не понимаю"

То, что требуется система координат - достаточно естественно. Однако каким более конкретным образом она пилиться? Я вот думал как-нибудь через массивы, но чего-то ни к чему толковому не пришел...

Неактивен

0    0    #352
01.11.2013 19:33

Flash
Участник (+10, -9)
Зарегистрирован: 12.05.2012
Сообщений: 203
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

NeoMatrix777 написал:

Господа, а есть ли возможность на этом движке запилить рогалик? Я в программирование не силен, поэтому у меня даже нет особых идей по алгоритму передвижения героя-символа по пустому полю.

Подводных камней слишком много, если делать это на АСМе.

Max написал:

Morych написал:

Попробуй просто перед матчем рассчитывать общую "силу" команды. А вот сила в данном случае уже зависит от атаки, защиты, и морали (дома играем или в гостях).

тогда каждый раз выбирая команду, нужно в ручную прописывать влияние Ат, Защ, Мор на СИЛУ???

Нет, если я правильно понял вопрос.

Неактивен

0    0    #353
02.11.2013 16:29

alfa10
Участник (+1, -1)
Зарегистрирован: 29.10.2013
Сообщений: 84

Re: Как сделать что-то или "я вот не понимаю"

В параграфе StoryAuthor вставка картинок запрещена чтоли? Хотел вставить туда текст красивого шрифта, а нифига...

Неактивен

0    0    #354
02.11.2013 16:44

DoubleDragon
Модератор (+391, -32)
Откуда: Москва
Зарегистрирован: 07.04.2012
Сообщений: 1760
Вебсайт

Разработчик "AXMA Story Maker"

Re: Как сделать что-то или "я вот не понимаю"

Там может быть только текст. Вставляйте в параграф Start.

Неактивен

0    0    #355
02.11.2013 17:03

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Max написал:

тогда каждый раз выбирая команду, нужно в ручную прописывать влияние Ат, Защ, Мор на СИЛУ???

Морыч категорически одобряет параметр "Мор" smile
Вручную не надо, формула же будет. Только нужно определиться с диапазоном изменения Атк, Защ и Мор. Например, от 1 до 10.
Тогда можно, к примеру, так:

Код:

<<if команда1_играет_дома>>
    <<set $K = 1>> (коэф. влияния морали)
<<else>>
    <<set $K = 0.5>>
<<endif>>
<<set $Сила1 = Math.round(Math.max(1, $Атк1 - $Защ2 + $Мор1 * $К))>> (при помощи max ограничиваем силу, чтобы не получилась меньше 1, round - округление до целого)
<<set $Сила2 = Math.round(Math.max(1, $Атк2 - $Защ1 + $Мор2 * (1.5 - $К)))>> (если первая команда играет у себя, то вторая в гостях, и наоборот)

Получается, Сила может принимать значения от 1 до 19, а разница сил от -18 до 18. Значит условие для определения победителя немного изменится:

<<random $rnd = 99>>
<<if $rnd lt 50 + ($Сила1 - $Сила2) * 2.6>>

Т.о. при самом лучшем раскладе шанс победы 96.8%, оставшиеся проценты - шанс критической неудачи. То же самое и с критическим успехом при наихудшем раскладе.

Неактивен

0    0    #356
02.11.2013 17:22

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

NeoMatrix777 написал:

То, что требуется система координат - достаточно естественно. Однако каким более конкретным образом она пилиться? Я вот думал как-нибудь через массивы, но чего-то ни к чему толковому не пришел...

Через массивы, всё верно, массивы строк. Например, в цикле вывести все строки массива карты до координаты Y гг. Затем выводим часть строки до координаты X, рисуем @ (гг), выводим оставшуюся часть строки, затем выводим оставшиеся строки карты.

Неактивен

0    0    #357
03.11.2013 19:17

alfa10
Участник (+1, -1)
Зарегистрирован: 29.10.2013
Сообщений: 84

Re: Как сделать что-то или "я вот не понимаю"

Фух, загрузил свою первую интерактивную книгу в библиотеку. Правда, почему-то, при загрузке ругалось на музыкальный файл формата OGG. Пришлось музыку исключить из книги sad

Неактивен

0    0    #358
03.11.2013 21:28

DoubleDragon
Модератор (+391, -32)
Откуда: Москва
Зарегистрирован: 07.04.2012
Сообщений: 1760
Вебсайт

Разработчик "AXMA Story Maker"

Re: Как сделать что-то или "я вот не понимаю"

Надо было и ogg и mp3 - оба файла сделать.
А так - поздравляю с успешным дебютом!

Неактивен

0    0    #359
03.11.2013 22:04

alfa10
Участник (+1, -1)
Зарегистрирован: 29.10.2013
Сообщений: 84

Re: Как сделать что-то или "я вот не понимаю"

DoubleDragon написал:

Надо было и ogg и mp3 - оба файла сделать.
А так - поздравляю с успешным дебютом!

Спасибо! А насколько он успешный - покажет время и участие в конкурсе 31 wink

Неактивен

0    0    #360
04.11.2013 13:19

alfa10
Участник (+1, -1)
Зарегистрирован: 29.10.2013
Сообщений: 84

Re: Как сделать что-то или "я вот не понимаю"

Просьба помочь разобраться в ошибке кода:

Код:

<<set $жизнь = $жизнь>>
<<set $жизнь1 = $жизнь1>>
Мое здоровье - ''<<print $жизнь>>''
Здоровье вора - ''<<print $жизнь1>>''

Вор поворачивается ко мне. Его лицо скрывает балахон.  Не говоря ни слова, гость направляется на меня...
<<if $успех eq 1>>  [b]----------------------------------------возврат сюда[/b]
[[Ударить в лицо|БойВорНеус {$успех = 2}]]
[[Ударить в живот|БойВорНеус {$успех = 3}]]
[[Кинуть в вора стул|БойВорНеус {$успех = 4}]]
<<endif>>
<<if $успех eq 2>>
<<clrscr>>
<<random $кубик = 6>>
<<if $кубик gte 5>>
Я ударяю вора в голову. Великолепный удар!
<<set $жизнь1 = $жизнь1 - 3>>
Мое здоровье - ''<<print $жизнь>>''
Здоровье вора - ''<<print $жизнь1>>''
<<else>>
Вор ставит блок и проводит ответный удар!
<<set $жизнь = $жизнь - 1>>
Мое здоровье - ''<<print $жизнь>>''
Здоровье вора - ''<<print $жизнь1>>''
<<endif>>
<<if $жизнь1 lte 0>>
<<goto 'ОсмотретьсяЖив'>>    
<<else>>
<<goto 'БойВорНеус' {$успех = 1}>>    
<<elseif $жизнь lte 0>>
<<goto 'Конец1'>>    
<<else>>
<<goto 'БойВорНеус' {$успех = 1}>>    
<<endif>>
<<endif>>

Почему-то у меня назад не возвращает. Как можно сделать так, чтобы если жизни остаются, параграф продолжался заново с начала?

Неактивен

0    0    #361
05.11.2013 10:18

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

alfa10 написал:

Просьба помочь разобраться в ошибке кода:
Почему-то у меня назад не возвращает. Как можно сделать так, чтобы если жизни остаются, параграф продолжался заново с начала?

Давай попробуем разобраться, но сначала небольшая работа над ошибками smile Читай закомментированные строки (после символа #)

Код:

<<set $жизнь = $жизнь>>
<<set $жизнь1 = $жизнь1>>

# Две верхние строчки не нужны

Мое здоровье - ''<<print $жизнь>>''
Здоровье вора - ''<<print $жизнь1>>''
Вор поворачивается ко мне. Его лицо скрывает балахон.  Не говоря ни слова, гость направляется на меня...
<<if $успех eq 1>>
    [[Ударить в лицо|БойВорНеус {$успех = 2}]]
    [[Ударить в живот|БойВорНеус {$успех = 3}]]
    [[Кинуть в вора стул|БойВорНеус {$успех = 4}]]
<<endif>>

# Советую выделять внутренности блока if-endif
# при помощи табуляции, код будет легче читать

<<if $успех eq 2>>
    <<clrscr>>
    <<random $кубик = 6>>
    <<if $кубик gte 5>>
        Я ударяю вора в голову. Великолепный удар!
        <<set $жизнь1 = $жизнь1 - 3>>
        Мое здоровье - ''<<print $жизнь>>''
        Здоровье вора - ''<<print $жизнь1>>''
    <<else>>
        Вор ставит блок и проводит ответный удар!
        <<set $жизнь = $жизнь - 1>>
        Мое здоровье - ''<<print $жизнь>>''
        Здоровье вора - ''<<print $жизнь1>>''
    <<endif>>

    # Выше дважды написано одно и то же (про жизни гг и противника)
    # такого быть не должно. Лучше вынести эти две строки за endif,
    # вот прям сюда

    <<if $жизнь1 lte 0>>
        <<goto 'ОсмотретьсяЖив'>>    
    <<else>>
        <<goto 'БойВорНеус' {$успех = 1}>>    
    <<elseif $жизнь lte 0>>
        <<goto 'Конец1'>>
    <<else>>
        <<goto 'БойВорНеус' {$успех = 1}>>    
    <<endif>>

    # Программа никогда не дойдёт до двух нижних goto,
    # поскольку при истинности первого условия выполнится первый goto,
    # а второй goto выполнится во всех остальных случаях.
    # В блоке if-endif внутри может быть сколько угодно elseif,
    # но всегда только один else, причём стоять он должен самым последним!

<<endif>>

Неактивен

0    0    #362
07.11.2013 18:50

alfa10
Участник (+1, -1)
Зарегистрирован: 29.10.2013
Сообщений: 84

Re: Как сделать что-то или "я вот не понимаю"

Вот есть код:

Код:

:: Пещера
<<display 'Инвентарь0'>>
Здоровье охотника - <<print $жизнь1>>
Здоровье охотницы - <<print $жизнь2>>
# Начало цикла
<<if $жизнь lte 0>>
<<goto 'Конец'>>
<<elseif $жизнь1 lte 0>>
<<display 'Пещера'>>
<<elseif $жизнь2 lte 0>>
<<display 'Пещера'>>
<<elseif $жизнь1 + $жизнь2 lte 0>>
<<goto 'пещера2'>>
<<else>>
''Выберите действие против охотника:''
# Магия огня 
<<if $мана gte 3>>
[[Огонь I (шанс 50%, урон 20, мана - 3)|Пещера1 {$действие = 2}]]    
<<endif>>
# Магия огня
[[Бросить камень (шанс 20%, урон - 30)|Пещера1 {$действие = 3}]]
[[Ударить рукой (шанс 50%, урон - 10)|Пещера1 {$действие = 4}]]
[[Бросить ногой (шанс 50%, урон - 10)|Пещера1 {$действие = 5}]]    
<<endif>>
# Начало цикла

Получается так: мой герой бьется против двух врагов. Хочу, чтобы при гибели первого врага шло сражение с другим врагом. Но при гибели одного из врагов игра виснет. Полагаю, что из-за:

вот этой записи в коде

Код:

<<if $жизнь lte 0>>
<<goto 'Конец'>>
<<elseif $жизнь1 lte 0>>
<<display 'Пещера'>>
<<elseif $жизнь2 lte 0>>
<<display 'Пещера'>>
<<elseif $жизнь1 + $жизнь2 lte 0>>
<<goto 'пещера2'>>
<<else>>

Я вижу ее так: если моя жизнь меньше или равна 0, то идем в параграф "Конец". Если жизнь противника1 меньше или равна 0, то продолжаем бой. Если жизнь противника2  меньше или равно 0, то продолжаем бой. Если жизни соперников 1 и 2 вместе меньше или равны 0 (т.е. обо уничтожены), то переходим в параграф "Пещера 2"

Неактивен

0    0    #363
08.11.2013 19:55

Flash
Участник (+10, -9)
Зарегистрирован: 12.05.2012
Сообщений: 203
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Есть ли параграф "Пещера"? Если есть, то, скорее всего, в нем и содержится ошибка. А тут две ошибки:

Код:

<<if $жизнь lte 0>>
<<goto 'Конец'>>
<<elseif $жизнь1 lte 0>>
<<display 'Пещера'>>
<<elseif $жизнь2 lte 0>>
<<display 'Пещера'>>
<<elseif $жизнь1 + $жизнь2 lte 0>> (1)
<<goto 'пещера2'>> (2)
<<else>>

(2) никогда не выполнится, ибо до него тупо никогда не доберется очередь.
(1) неправильно производится проверка. Если значение одной из переменных будет отрицательным, а другой положительным, то их сумма может оказаться равной либо меньше нуля. Правильно будет:

Код:

<<if $жизнь lte 0>>
<<goto 'Конец'>>
<<elseif ($жизнь1 lte 0) and ($жизнь2 lte 0)>>
<<goto 'пещера2'>>
<<elseif $жизнь1 lte 0>>
<<display 'Пещера'>>
<<elseif $жизнь2 lte 0>>
<<display 'Пещера'>>
<<else>>

Неактивен

0    0    #364
08.11.2013 22:17

alfa10
Участник (+1, -1)
Зарегистрирован: 29.10.2013
Сообщений: 84

Re: Как сделать что-то или "я вот не понимаю"

Не, чет не то... если прописываю так:

Код:

<<if $жизнь lte 0>>
<<goto 'Конец'>>
<<elseif ($жизнь1 lte 0) and ($жизнь2 lte 0)>>
<<goto 'пещера2'>>
<<elseif $жизнь1 lte 0>>
<<display 'Пещера'>>
<<elseif $жизнь2 lte 0>>
<<display 'Пещера'>>
<<else>>

то игра виснет... Да и получается, если убивают врага (жизнь1, например), а второй жив, то получается первый опять ходит, даже если он мертв уже

P.S. Все, разобрался в коде... Пришлось упростить боевку (хотел, чтобы по очереди  атаковался сперва первый враг, затем второй). Сделал, что сам выбираю кого атаковать

Отредактировано alfa10 (08.11.2013 22:42)

Неактивен

0    0    #365
13.11.2013 12:01

alfa10
Участник (+1, -1)
Зарегистрирован: 29.10.2013
Сообщений: 84

Re: Как сделать что-то или "я вот не понимаю"

Хочу сделать программу, где при вводе улицы и номера дома выдается наименование района. Получается, в одном параграфе нужно ввести нечто типа:

Код:

<<input '0' $адрес>>

В параграфе 0 нужно прописать некий код:

Код:

<<if $адрес eq '12марта130'>>
<<set $адрес = 1>>
<<elseif $адрес eq 'калинина215'>>
<<set $адрес = 2>>    
<<endif>>
<<goto '2'>>

где на выводе (параграф 2) уже есть код:

Код:

<<if $адрес eq 1>>
Черемушки    
<<elseif $адрес eq 2>>
Вокзал
<<else>>
Район не определен!    
<<endif>>

Так все работает! А как сделать, чтобы не прописывать каждый номер дома на улице, а сделать например, чтобы улица Калинина от 1 до 50 автоматически попадала под район Возкал?

Отредактировано alfa10 (13.11.2013 12:28)

Неактивен

0    0    #366
14.11.2013 00:08

Flash
Участник (+10, -9)
Зарегистрирован: 12.05.2012
Сообщений: 203
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Код:

:: vvod
Введите адрес:
<<input '0' $адрес>>
Пример: Калинина, 155

:: 0
<<set $адрес = $адрес.replace(/ /g,"").toLowerCase()>>
<<set $улица = "">>
<<set $дом = "">>
<<set $зап = 0>>
<<set $i = -1>>
<<loop $адрес.length>>
<<set $i++>>
<<if $адрес[$i] eq ",">>
    <<set $зап = 1>>
    <<continue>>
<<endif>>
<<if $зап eq 0>>
    <<set $улица = $улица + $адрес[$i]>>
<<else>>
    <<set $дом = $дом + $адрес[$i]>>
<<endif>>
<<endloop>>

<<if $улица eq "калинина" and $дом gte 1 and $дом lte 50>>
Вокзал
<<elseif $улица eq "калинина" and $дом gte 51 and $дом lte 200>>
Черемушки
<<elseif $улица eq "красныхпартизан" and $дом gte 1 and $дом lte 100>>
Центральный район
<<else>>
Район не определен!    
<<endif>>

Неактивен

0    0    #367
14.11.2013 10:11

alfa10
Участник (+1, -1)
Зарегистрирован: 29.10.2013
Сообщений: 84

Re: Как сделать что-то или "я вот не понимаю"

Спасибо! Еще б расшифровал бы код - вообще круто было бы smile

Неактивен

0    0    #368
14.11.2013 11:58

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

alfa10 написал:

Спасибо! Еще б расшифровал бы код - вообще круто было бы smile

Этот код разбивает введённую строку $адрес на две строки: $улица и $дом. Разделение строк происходит в цикле посимвольно: до запятой - собирается название улицы, после запятой - номер дома.

Есть другой способ сделать то же самое:

Код:

:: vvod
Введите адрес:
<<input '0' $адрес>>

:: 0
<<set $адрес = $адрес.replace(/ /g,"").toLowerCase()>> ---- удалить все пробелы из строки $адрес, преобразовать в нижний регистр
<<set $улица = "">>
<<set $дом = "">>
<<set $i = $адрес.indexOf(",")>> ---- индекс первой запятой в строке $адрес
<<if $i gt -1>> ---- если есть запятая
    <<set $улица = $адрес.substr(0, $i)>> ---- название улицы - это часть строки до запятой
    <<set $дом = $адрес.substr($i + 1)>> ---- номер дома - часть строки после запятой
<<endif>>
Улица: <<print $улица>>;
Дом: <<print $дом>>;

Неактивен

0    0    #369
14.11.2013 18:47

Flash
Участник (+10, -9)
Зарегистрирован: 12.05.2012
Сообщений: 203
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Поясню тогда из своего примера, чего нет в примере Морыча:

Код:

<<set $зап = 0>> ---- переменная дающая понять попалась уже запятая в цикле или нет. 0 - не попадалась, 1 - попадалась
<<set $i = -1>> ---- эта переменная будет обозначать индекс символа в строке $адрес
<<loop $адрес.length>> ---- объявление цикла, цикл будет выполняться столько раз, сколько символов в строке $адрес
<<set $i++>> ---- увеличиваем $i, таким образом в первый раз $i будет равен 0, а индекс в строке как раз и начинается с нуля
<<if $адрес[$i] eq ",">> ---- проверяем не является ли символ в строке $адрес с индексом $i запятой и если да, то
    <<set $зап = 1>> ---- устанавливаем значение переменной $зап = 1
    <<continue>> ---- не выполняем все что ниже идет по циклу, а снова возвращаемся на его начало. Еще существует полезная штукенция как <<break>>, которая вообще полностью прекращает цикл. О ней и вообще о всем остальном можно прочитать в справке
<<endif>>
<<if $зап eq 0>> ---- если $зап равен 0, то
    <<set $улица = $улица + $адрес[$i]>> ---- прибавляем к строке $улица символ с индексом $i из строки $адрес
<<else>> ---- иначе
    <<set $дом = $дом + $адрес[$i]>> ---- прибавляем к строке $дом символ с индексом $i из строки $адрес
<<endif>>
<<endloop>> ---- конец цикла

Изменение регистра нужно по причине того, что, например, строка "Каланина" не равна строке "каланина", а пробелы я удалил для удобства. Кстати, также тут

Код:

<<if $улица eq "калинина" and $дом gte 1 and $дом lte 50>>
Вокзал
<<elseif $улица eq "калинина" and $дом gte 51 and $дом lte 200>>
Черемушки
<<elseif $улица eq "красныхпартизан" and $дом gte 1 and $дом lte 100>>
Центральный район
<<else>>
Район не определен!    
<<endif>>

можно увидеть что переменная $дом, где хранится номер дома в виде строки, сравнивается с числами. Так можно делать далеко не во всех языках программирования, но тут так делать можно.

Отредактировано Flash (14.11.2013 20:24)

Неактивен

0    0    #370
14.11.2013 19:05

DoubleDragon
Модератор (+391, -32)
Откуда: Москва
Зарегистрирован: 07.04.2012
Сообщений: 1760
Вебсайт

Разработчик "AXMA Story Maker"

Re: Как сделать что-то или "я вот не понимаю"

Flash, ты уже достиг достаточного уровня просветления wink
Когда же, наконец, мы увидим твою работу в библиотеке?

Неактивен

0    0    #371
14.11.2013 20:55

Flash
Участник (+10, -9)
Зарегистрирован: 12.05.2012
Сообщений: 203
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Постараюсь до конца этого года кое-что показать.

Неактивен

0    0    #372
15.11.2013 00:03

Flash
Участник (+10, -9)
Зарегистрирован: 12.05.2012
Сообщений: 203
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Кстати, в примере выше есть баг: если ввести в поле ввода число и нажать enter, то произойдет вылет на стартовый параграф. Это можно вылечить, если перед

Код:

<<set $адрес = $адрес.replace(/ /g,"").toLowerCase()>>

добавить строку

Код:

<<set $адрес = $адрес + "">>

Таким приемом мы преобразуем число в строку.

Неактивен

0    0    #373
15.11.2013 09:50

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Отличный баг выловил! Спасибо!

Неактивен

0    0    #374
18.12.2013 21:33

aleksander
Участник
Зарегистрирован: 18.12.2013
Сообщений: 1

Re: Как сделать что-то или "я вот не понимаю"

Подскажите пожайлуста, можно ли в книгу-игру вставлять видео ролики. Без участия интернета, тоесть можно ли вставлять ролики кроме ютуба. Если ролик будет лежать в папке с игрой например. Как это сделать?

Неактивен

0    0    #375
18.12.2013 23:13

DoubleDragon
Модератор (+391, -32)
Откуда: Москва
Зарегистрирован: 07.04.2012
Сообщений: 1760
Вебсайт

Разработчик "AXMA Story Maker"

Re: Как сделать что-то или "я вот не понимаю"

Нет, нельзя. Дело в том, что в этом случае размер файлов становится слишком большим для публикации в библиотеке.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru