Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #326
30.10.2013 15:30

Oldrik
Участник
Зарегистрирован: 12.11.2012
Сообщений: 35

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

мне кажется, что здесь

<<set $random $a0 = 3>> - выбирается с кем играли.  ---->>> ошибка

ни как не могу врубиться в следующее:
- что означает объект и рядом с ним []. например - $match[3]
- если возможно для чайника объясните по -шагово... я не понимаю, почему ставятся те или иные числа (((

Да, разумеется ошибка. Надо было хоть разок глазами пробежать.
<<random $a0 = 3>> - Так правильно.

Неактивен

0    0    #327
30.10.2013 15:36

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

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

alfa10,  эта строчка ничего не делает. Переменная приравнивпется сама себе.

Неактивен

0    0    #328
30.10.2013 15:41

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

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

Flash написал:

alfa10,  эта строчка ничего не делает. Переменная приравнивпется сама себе.

а как тогда сделать, чтобы в текущем параграфе переменная брала то значение, которое она имела до этого параграфа? Может так тогда?

Код:

<<set $удача1 = $удача>>

Неактивен

0    0    #329
30.10.2013 15:54

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

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

Max написал:

что означает объект и рядом с ним []. например - $match[3]

Это означает, что объект $match является списком (одномерным массивом), а $match[3] - это элемент списка с индексом 3. Как верно подметил Flash, можно почитать в руководстве пользователя про списки.
Вообще мне кажется, в примере Oldrik'а можно вполне обойтись без списков, заменив их на простые объекты. Например, вместо $match[3] --> $сколькоЗабилГГ

Неактивен

0    0    #330
30.10.2013 15:59

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

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

alfa10 написал:

Flash написал:

alfa10,  эта строчка ничего не делает. Переменная приравнивпется сама себе.

а как тогда сделать, чтобы в текущем параграфе переменная брала то значение, которое она имела до этого параграфа? Может так тогда?

Код:

<<set $удача1 = $удача>>

Все переменные глобальные. Т.е. если задать значение переменной на одном параграфе, на всех следующих параграфах переменная сохранит это значение. До тех пор пока ты не перезапустишь игру.

Неактивен

0    0    #331
30.10.2013 16:00

Oldrik
Участник
Зарегистрирован: 12.11.2012
Сообщений: 35

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

Можно и без них. Но так проще - всё в одном месте.
Можно сделать несколько списков, и потом смотреть результат нескольких прошедших игр.

Неактивен

0    0    #332
30.10.2013 20:45

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

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

Вопросов у меня много, так что сорри. Я начинающий интерактивовод smile
Музыка работает если файл OGG. Разобрался. Спасибо за помощь. Теперь вопрос - а как сделать так, чтобы мелодии игрались по-очереди по ходу книги?

Еще вопрос. Вот фрагмент кода:

Код:

<<set $ясила = 3>>
<<set $врагсила = 6>>
<<set $жизнь = 10>>
<<set $жизнь1 = 5>>
<<random $кубик = 10>>
<<if $кубик > ($врагсила-$ясила)>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1-1>>    
<<else>>
<<print $я>> - <<print $жизнь-1>>
<<print $враг>> -<<print $жизнь1>>    
<<endif>>

Как я его вижу:
даю значение силы мне - 3
даю значение силы врагу - 6
даю значение жизни себе - 10
даю значение жизни врагу - 5
даю рендомное значение кубику от 0 (или все-таки 1) до 5
если значение кубика больше значения (сила врага - моя сила) то
выводится имя переменной $я (вводил в прошлом параграфе) - выводится значение (моя жизнь) // например, Сергей - 10
выводится имя переменной $враг (вводил в прошлом параграфе) - выводится значение (жизнь врага минус 1)// например, Сергей - 4
иначе
выводится имя переменной $я (вводил в прошлом параграфе) - выводится значение (моя жизнь минус 1)
выводится имя переменной $враг (вводил в прошлом параграфе) - выводится значение (жизнь врага)
закрытие кода

Но, почему то, у меня ничего не выводится. Пишется NaN. Где моя ошибка?

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

Неактивен

0    0    #333
31.10.2013 05:45

Oldrik
Участник
Зарегистрирован: 12.11.2012
Сообщений: 35

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

<<set $ясила = 3>>
<<set $врагсила = 6>>
<<set $жизнь = 10>>
<<set $жизнь1 = 5>>
<<random $кубик = 10>>
<<if $кубик gte ($врагсила-$ясила)>>
<<set $жизнь1 = $жизнь1 - 1>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>>   
<<else>>
<<set $жизнь = $жизнь - 1>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>>   
<<endif>>

Так должно работать.
Ошибка в <<print $жизнь-1>>. Print служит для вывода значения объекта, а не его изменения.

Неактивен

0    0    #334
31.10.2013 10:52

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

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

Отлично! Все работает! Спасибо!
А что означает gte ? Значение "больше"?

Как можно сделать так, чтобы при значении параметра $жизнь - 0 бой заканчивался?

Неактивен

0    0    #335
31.10.2013 10:54

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

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

alfa10 написал:

Теперь вопрос - а как сделать так, чтобы мелодии игрались по-очереди по ходу книги?

Если есть несколько мелодий и нужно, чтобы они игрались друг за другом независимо от параграфа, можно соединить их в один файл. Правда он будет загружаться некоторое, возможно, продолжительное время.

Неактивен

0    0    #336
31.10.2013 11:04

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

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

alfa10 написал:

А что означает gte ? Значение "больше"?

gte = Greater Than or Equals - больше либо равно. Лучше используй в макросах if именно такие, буквенные операторы.

alfa10 написал:

Как можно сделать так, чтобы при значении параметра $жизнь - 0 бой заканчивался?

Ещё один макрос if. Попробуй так:

<<if $жизнь lte 0>> (меньше либо равно)
<<goto 'ГеймОвер'>> (переход на другой параграф)
<<endif>>

Неактивен

0    0    #337
31.10.2013 11:17

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

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

Ну, вот, получается видимо так:

Код:

<<set $жизнь = 1>>
<<set $жизнь1 = 1>>
<<random $кубик = 10>>
<<if $кубик gte 3>>
<<set $жизнь1 = $жизнь1 - 1>>
<<if $жизнь1 lte 0>>
<<goto 'GameOver1'>>
<<else>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>>   
<<endif>>
<<else>>
<<set $жизнь = $жизнь - 1>>
<<if $жизнь lte 0>>
<<goto 'GameOver'>>
<<else>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>> 
<<endif>>
<<endif>>

А как зациклить код? Чтобы значения уменьшались до того момента, пока переменная жизнь не примет нулевое значение?

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

Неактивен

0    0    #338
31.10.2013 12:02

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

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

alfa10 написал:

А как зациклить код? Чтобы значения уменьшались до того момента, пока переменная жизнь не примет нулевое значение?

Допустим, сражение у нас в параграфе "Битва". Начальное значение жизней нужно установить до этого параграфа:

Код:

:: Параграф_до_битвы
<<set $жизнь = 7>>
<<set $жизнь1 = 6>>
Внезапно путь преграждает <<print $враг>>!
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>>   
[[Начать битву|Битва]]
[[Убежать|Бегство]]

:: Битва
<<random $кубик = 10>>
<<if $кубик gte 3>>
    <<print $я>> наносит удар!
    <<set $жизнь1 = $жизнь1 - 1>>
<<else>>
    <<print $враг>> наносит удар!
    <<set $жизнь = $жизнь - 1>>
<<endif>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>>
<<if $жизнь lte 0>>
    <<print $я>> падает на землю без чувств...
    [[Это конец|GameOver]]
<<elseif $жизнь1 lte 0>>
    <<print $враг>> падает на землю, путь свободен!
    [[Праздновать победу|Победа]]
<<else>>
    [[Продолжать битву|Битва]]
    [[Убежать|Бегство]]
<<endif>>

Лучше зацикливать так, на ссылках, чтобы у игрока создавалось ощущение, что он на что-то влияет.

Неактивен

0    0    #339
31.10.2013 12:18

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

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

Спасибо тебе большое! очень сильно помогаешь мне smile И всем вам ребята - большое спасибо

А есть ли при создании книги ограничение в количестве параграфов? А то, у меня тут глобальная книга намечается smile

Еще вопрос - можно ли сделать, чтобы во время боя страница автоматически обновлялась, а не клацать каждый раз на продолжить?

Отредактировано alfa10 (31.10.2013 13:23)

Неактивен

0    0    #340
31.10.2013 14:48

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

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

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

Ограничений на количество параграфов нет.
А для автообновления параграфа рекомендую использовать макрос <<repeat>> (см. мануал).

Неактивен

0    0    #341
31.10.2013 15:07

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

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

alfa10 написал:

Спасибо тебе большое! очень сильно помогаешь мне smile И всем вам ребята - большое спасибо

Пожалуйста smile

alfa10 написал:

Еще вопрос - можно ли сделать, чтобы во время боя страница автоматически обновлялась, а не клацать каждый раз на продолжить?

Как заметил DD, можно через макрос repeat:

Код:

:: Параграф_до_битвы
...
[[Начать битву|НачалоБитвы]] (всё то же самое кроме этой строчки)

:: НачалоБитвы
<<repeat 'Битва' 2>> (здесь число - это время обновления в секундах)
<<display 'Битва'>> (сразу показываем параграф "Битва", чтобы не ждать первый раз)

:: Битва
<<clrscr>> (в самом начале очищаем экран, если не очищать - будет "лог" битвы)
<<random $кубик = 10>>
<<if $кубик gte 3>>
    <<print $я>> наносит удар!
    <<set $жизнь1 = $жизнь1 - 1>>
<<else>>
    <<print $враг>> наносит удар!
    <<set $жизнь = $жизнь - 1>>
<<endif>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>>
<<if $жизнь lte 0>>
    <<print $я>> падает на землю без чувств...
    <<stop 'Битва'>> (битва окончена - останавливаем авто обновление)
    [[Это конец|GameOver]]
<<elseif $жизнь1 lte 0>>
    <<print $враг>> падает на землю, путь свободен!
    <<stop 'Битва'>> (и в этом случае тоже останавливаем)
    [[Праздновать победу|Победа]]
<<endif>>

И да, Руководство пользователя AXMA Story Maker - очень хорошая вещь, рекомендую! wink

Неактивен

0    0    #342
31.10.2013 17:49

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

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

Зачем запутывать еще сильнее человека, если можно вместо "gte" использовать ">=", а вместо "lte" - "<="?

Неактивен

0    0    #343
01.11.2013 08:24

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

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

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

Неактивен

0    0    #344
01.11.2013 10:12

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

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

NeoMatrix777 написал:

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

Ну а что, списки и циклы есть, моноширинный шрифт есть - значит теоретически возможно smile Только карта будет монохромной, разве что некоторые объекты на карте будут ссылками. Ещё один нюанс: на мелких экранах мобильных устройств карта может отображаться неверно из-за переносов строк (но в меню можно попробовать изменить размер шрифта). А идея алгоритма передвижения проста: у героя есть координаты X и Y. Если герой идёт на север или юг, изменяем вертикальную координату, на запад или восток - горизонтальную. Заодно с изменением координаты проверяем границы окна и карты, наличие на пути непроходимых объектов, затем перерисовываем карту.

Неактивен

0    0    #345
01.11.2013 11:37

Max
Участник (+1)
Зарегистрирован: 25.10.2013
Сообщений: 8

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

Вот ковырялся ковырялся, пытаясь сгенерировать футбольный матч и получилось так:

:: матч
<<set $ком_ГГ = ['Барса',20]>>
<<set $ком = ['Атлетико',15]>>
<<random $гол1 = 2>>
<<random $гол2 = 2>>
<<random $rnd = 99>>
<<if $rnd lt 50 + ($ком_ГГ[1] - $ком[1]) * 5>>
    <<set $гол1 = $гол1 + $гол2>>
<<else>>
    <<set $гол2 = $гол2 + $гол1>>
<<endif>>
''===результат матча===''
===<<print $гол1>> : <<print $гол2>>===
===<<print $ком_ГГ[0]>> : <<print $ком[0]>>===

<<if $гол1 gt $гол2>>
Победили хозяева
<<elseif $гол1 eq $гол2>>
у нас ничья
<<elseif $гол1 lt $гол2>>
Хозяева проиграли
<<endif>>

[[узнать результаты ГГ|забил гг]]



:: забил гг
<<set $ГГ = 10>>
<<random $игра_ГГ = 9>>
<<if $ГГ lte 9 and $игра_ГГ lte 7>>
    <<set $голГГ = 0>>
<<elseif $ГГ gte 9 and $ГГ lte 7 and $ком_ГГ[1] eq 1>>
<<set $голГГ = 0>>
<<elseif $ГГ gte 9 and $ГГ gt 8 and $ком_ГГ[1] gt 1>>
    <<set $голГГ = $гол1>>
<<endif>>
''===результат игрока===''
<<if $голГГ eq 0>>
игрок не забил
<<elseif $голГГ eq $гол1>>
игрок забил <<print $голГГ>> голов
<<endif>>

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

Неактивен

0    0    #346
01.11.2013 12:31

Oldrik
Участник
Зарегистрирован: 12.11.2012
Сообщений: 35

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

А ещё ТриДэ, стотыщь полигонов только на мяч, фото текстуры и Лондонский Симфонический на подпевке. Начинай с малого, с чем-то большим ты перегоришь раньше времени.

Неактивен

0    0    #347
01.11.2013 12:43

Max
Участник (+1)
Зарегистрирован: 25.10.2013
Сообщений: 8

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

Oldrik написал:

А ещё ТриДэ, стотыщь полигонов только на мяч, фото текстуры и Лондонский Симфонический на подпевке. Начинай с малого, с чем-то большим ты перегоришь раньше времени.

все таки хочется сделать игру от первого лица и чтобы именно он влиял на игру, а не из результатов игры высчитывать сколько он забил...
А так согласен - лучше начинать с малого)))

Неактивен

0    0    #348
01.11.2013 15:40

Max
Участник (+1)
Зарегистрирован: 25.10.2013
Сообщений: 8

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

подскажите, как понимать эту запись

<<random $гол1 = 2>>
<<random $гол2 = 2>>
<<random $rnd = 99>>
<<if $rnd lt 50 + ($ком_ГГ[1] - $ком[1]) * 5>>

особенно последняя строчка...

я хочу использовать силу атаки и силу защиты, так, чтобы атака слабее имела меньше вероятности пробиться через сильную защиту
пробую так, но все равно криво(((

<<set $ком_ГГ = ['Барса',90,70]>>
<<set $ком = ['Атлетико',70,60]>>
<<random $гол1 = 2>>
<<random $гол2 = 2>>
<<random $rnd = 99>>
<<if $rnd lt 50 + ($ком_ГГ[1] - $ком[2]) * 5>>
<<set $гол_ком_ГГ = $гол1 + $гол2>>
<<else>>
<<set $гол_ком_ГГ = 0>>
<<endif>>
<<random $rnd1 = 99>>
<<if $rnd1 lt 50 + ($ком[1] - $ком_ГГ[2]) * 5>>
<<set $гол_ком = $гол1 + $гол2>>
<<else>>
<<set $гол_ком = 0>>
<<endif>>

почему-то не получается ((( вообще ничего не высвечивается(((

Отредактировано Max (01.11.2013 16:03)

Неактивен

0    0    #349
01.11.2013 17:24

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

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

Max написал:

подскажите, как понимать эту запись

<<random $гол1 = 2>>
<<random $гол2 = 2>>
<<random $rnd = 99>>
<<if $rnd lt 50 + ($ком_ГГ[1] - $ком[1]) * 5>>

особенно последняя строчка...

Ну <<random $rnd = N>> означает случайное целое число от 0 до N включительно.
Рандом от 0 до 99 я использую, когда известна вероятность какого-то события, и надо определить, произошло ли событие:

<<random $rnd = 99>>
<<if $rnd lt M>>
    # Событие произошло!
<<endif>>

где M - это вероятность события в процентах (от 0 до 100).

Теперь, допустим, если силы команд равны, то вероятность победы первой команды = 50%. Иначе разница в силе команд на 1 изменяет вероятность победы/поражения на 5%. Соответственно, если первая команда сильнее хотя бы на 10, вероятность её победы = 100%.

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

Неактивен

0    0    #350
01.11.2013 17:38

Max
Участник (+1)
Зарегистрирован: 25.10.2013
Сообщений: 8

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

Morych написал:

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

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

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru