Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
09.07.2012 11:12

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

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

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

Если у Вас есть вопросы, как сделать что-то в программе или Вы не понимаете чего-то (то ли это ошибка, то ли фича и т.д.), то спрашивайте в этой теме.

Неактивен

0    0    #2
30.07.2014 11:17

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

Вроде не нашла тут подобный вопрос.

Столкнулась с проблемой в циклах.
У меня есть некий массив, список одежды в гардеробе. Он не постоянный, меняется при получении новой вещи или выбрасывания старой.
При заходе в шкаф хочу сделать возможность одеть эту вещь.

Следующий код по логике выглядит рабочим

$одежда[0]  - то, что прямо сейчас надето.

Код:

<<set $i=0>>
<<if $гардероб.length > 0>>
<<loop $гардероб.length>>
    <<set $вещь = $гардероб[$i]>>
    <<if $вещь != $одежда[0] >>
        [[-надеть|шкаф {$одежда[0] = $вещь}]]
        вещь = <<print $вещь>>, i = <<print $i>>, гардероб = <<print $гардероб[$i]>>
    <<endif>>
    <<set $i++>>
<<endloop>>
<<endif>>

Но в реальности оказывается, что {$одежда[0] = $вещь} в ссылке в любом случае получается равной последнему элементу списка, хотя выводимые значения под ссылкой показаны верны.
Получается, что при создании ссылок с изменением величин на используется последнее значение этой величины.

Или это я тормоз и что-то не то делаю и не так понимаю, или это и вправду не очень удобный косяк sad

Неактивен

0    0    #3
30.07.2014 12:23

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

Да я так же вышла из положения - при выводе информации о вещи выставляю типа "если зашли из шкафа, то выводим возможность надеть", "если зашли из магазина, то выводим информацию о возможности купить".

Просто так получается множество однотипных лишних строк, которые можно было бы уместить в одну. Двадцать вещей - двадцать строк вида [[надеть|шкаф {$одежда = ...}]] и ещё двадцать на покупку. И ещё двадцать на выброс...   

Никакой оптимизации кода и уважения к ресурсам big_smile

Неактивен

1    0    #4
02.08.2014 10:00

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

А как сделать слияние строк в переменную?  Чтобы можно было выводить в ссылке типа [[согласиться на $money|agree1 ]] ? А то вариант [[согласиться на <<print $money>> |agree1 ]]  выводит вместо переходной ссылки только это: <>
А [[согласиться на $money |agree1 ]]  выводит "согласиться на asm_var0"


Ложная тревога.

Нашла big_smile 

перед выводом ссылки сделать
<<set $i = "согласиться на  " + $i >>
и в ссылке просто [[$i | agree1]]

Не привыкла складывать текст с числами big_smile

Отредактировано Aruny (02.08.2014 10:37)

Неактивен

0    0    #5
02.08.2014 19:18

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

А как сделать, чтобы нормально моноширинный был? А то {{{}}} не очень-то помогает, всё равно символы разной ширины получаются и из-за этого не могу выстроить лабиринт sad Немного, но сдвигаются ряды.

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

И можно ли сделать, чтобы множественные пробелы не заменялись на один, а выводилось сколько их надо., или это ограничение HTML не обходится?

Неактивен

0    0    #6
04.08.2014 11:12

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

Спасибо smile Но добавить символы типа этого ▒  (альт+177) почему-то не получилось big_smile и на  &nbsp; тоже что-то "компилятор" ругается big_smile

И моноширинный текст на самом деле не моноширинный.

Вышла из положения чисто по женски - подобрала символы, совпадающие по ширине. То есть в заглавной букве "Ш" умещается четыре точки подряд (....), а значок человечка - три символа: .о.   


Зато теперьу меня есть двумерный лабиринт big_smile

Неактивен

0    0    #7
04.08.2014 12:44

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

Поиграть конкретно в пишущуюся вряд ли получится... очень большие сомнения, что у меня хватит усидчивости, творческого порыва и фантазии закончить, а во вторых, рейтинг 18++ и гарантированно не пройдёт цензуру.

Что поменьше, по своим рассказам, может и буду делать, но уже позже.

И да, там именно в выводе присутствуют макросы <if>

Код выкладываю не кодом из файла, а как в редакторе.
Предварительно устанавливаем переменные

Код:

задаем переменные

# список "открытых" мест на карте - куда можно пойти (маг, трущобы, ворота - открыты по умолчанию)
# [0] - начальная локация. 0 - не открыта.
#таверна[0] - известно ли о таверне (0 нет, 1 да)
<<set $таверна = [0, 0]>>
<<set $дом_константина = []>>
<<set $дом_константина[0] = 0>>
<<set $ночлежка = []>>
<<set $ночлежка[0] = 0>>
<<set $бордель = []>>
<<set $бордель[0] = 0>>
<<set $рынок = []>>
<<set $рынок[0] = 0>>
<<set $больница = []>>
<<set $больница[0] = 0>>

# для гуляния по городу
#[0] - персонаж, [1] - ворота, 2 - маг, 3 - Константин, 4 - рынок 5 -ночлежка 6 - бордель 7-таверна
<<set $координаты = [0, 59, 325, 111, 165, 294, 183, 288]>>
#ширина города
<<set $xmax=20>>

#сам город, задаём только карту. 0 - прохода нет, 'x' - проход есть
<<set $город=[0,0,0,0,0,'x',0,0,'x',0,0,0,'x',0,0,0,'x',0,0,0,0,0,0,0,0,'x',0,0,'x',0,0,0,'x',0,0,0,'x',0,0,0,0,0,0,0,0,'x',0,0,'x','x','x','x','x','x','x','x','x','x','x','x',0,0,0,0,0,'x',0,0,'x',0,0,'x',0,0,'x',0,0,'x',0,0,0,0,0,0,0,'x',0,0,'x',0,0,'x',0,0,'x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x',0,0,0,'x',0,0,0,0,'x',0,0,'x',0,0,'x',0,0,'x',0,'x','x','x',0,'x',0,0,0,0,'x',0,0,'x',0,0,'x',0,0,'x',0,'x',0,0,0,'x',0,0,0,0,'x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x',0,0,'x',0,0,'x',0,'x',0,'x',0,'x',0,0,0,0,'x','x','x','x',0,0,'x','x','x','x',0,'x','x','x',0,'x',0,0,0,0,'x','x','x','x',0,0,'x',0,0,0,0,'x',0,0,0,'x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x',0,'x',0,0,'x',0,0,'x',0,0,'x',0,0,0,'x',0,'x',0,0,'x',0,'x',0,0,'x',0,0,'x',0,0,'x',0,0,'x','x',0,'x',0,0,'x',0,'x',0,0,'x',0,0,'x',0,0,'x',0,0,'x',0,0,'x','x','x','x',0,'x','x','x','x','x','x','x','x','x','x','x','x','x',0,0,'x',0,0,'x',0,'x',0,0,'x',0,0,'x',0,0,'x',0,0,'x','x','x','x','x','x','x',0,'x',0,0,'x',0,0,'x',0,0,'x','x','x','x',0,0,'x','x','x','x',0,'x',0,0,'x',0,0,'x',0,0,'x',0,0,0,0,0,'x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x']>>

#задаём места в городе
<<set $город[59]=1>>
<<set $город[325]=2>>
<<set $город[111]=3>>
<<set $город[165]=4>>
<<set $город[294]=5>>
<<set $город[183]=6>>
<<set $город[288]=7>>

<<set $flag = false>>

<<set $откуда='ворота в город 1'>>

<<if $откуда=='ворота в город 1'>>
    <<set $координаты[0] = 59>>
<<elseif $откуда=='дом мага 1'>>
    <<set $координаты[0] = 325>>
<<elseif $откуда=='дом Константина 1'>>
    <<set $координаты[0] = 111>>
<<elseif $откуда=='рынок 1'>>
    <<set $координаты[0] = 165>>
<<elseif $откуда=='ночлежка 1'>>
    <<set $координаты[0] = 183>>
<<elseif $откуда=='бордель 1'>>
    <<set $координаты[0] = 288>>
<<endif>>

[[погулять по городу|гулять город 1]]

теперь сам параграф гуляния

Код:

<<set $flag=0>>
<<set $flag2=0>>
вы начали от <<print $откуда>>

<<nop>>
<<set $w="Ш">>
<<set $q="....">>
<<set $me=".ö.">>
­<<set $i=0>>
<<set $j=0>>
­
<<loop $город.length>>
    <<if $i==$координаты[0]>>
        <<print $me>>
        <<if $город[$i] > 0>>
            <<set $flag=1>>
            <<set $flag2=$город[$i]>>
        <<endif>>
    <<else>>
        <<if $город[$i] == 0 >> 
            <<print $w>>
        <<elseif $город[$i] == 'x'>>
            <<print $q>>
        <<else>>
            <<if $город[$i] == 1>>
                .<<print ($город[$i])>>.    
            <<endif>>
            <<if $город[$i] == 2>>
                .<<print ($город[$i])>>.    
            <<endif>>
            <<if $город[$i] == 3>> <<if $дом_Константина[0]>0 >>
                .<<print ($город[$i])>>.    
                <<else>><<print $q>><<endif>><<endif>>
            <<if $город[$i] == 4 >> <<if $рынок[0]>0 >>
                .<<print ($город[$i])>>.    
                <<else>><<print $q>><<endif>><<endif>>
            <<if $город[$i] == 5 >><<if $ночлежка[0]>0 >>
                .<<print ($город[$i])>>.    
                <<else>><<print $q>><<endif>><<endif>>
            <<if $город[$i] == 6 >><<if $бордель[0]>0 >>
                .<<print ($город[$i])>>.    
                <<else>><<print $q>><<endif>><<endif>>
            <<if $город[$i] == 7 >><<if $таверна[0]>0 >>
                .<<print ($город[$i])>>.    
                <<else>><<print $q>><<endif>><<endif>>
        <<endif>>
    <<endif>>
    <<set $i++>>
    <<set $j++>>
    <<if $j == $xmax>>
        <<set $j=0>><<br>>
    <<endif>>
<<endloop>>

<<if $город[$координаты[0]-1] != 0>>
    [[-влево|гулять город 1{$координаты[0] = $координаты[0]-1}{$flag=0}{$flag2=0}]]
    <<else>>
    влево
<<endif>> 
<<if $город[$координаты[0]+1] != 0>>
    [[-вправо|гулять город 1{$координаты[0] = $координаты[0]+1}{$flag=0}{$flag2=0}]]
    <<else>>
    вправо
<<endif>> 
<<if $город[$координаты[0]+$xmax] != 0>>
    [[-вниз|гулять город 1{$координаты[0] = $координаты[0]+$xmax}{$flag=0}{$flag2=0}]]
    <<else>>
    вниз
<<endif>> 
<<if $город[$координаты[0]-$xmax] != 0>>
    [[-вверх|гулять город 1{$координаты[0] = $координаты[0]-$xmax}{$flag=0}{$flag2=0}]]
    <<else>>
    вверх
<<endif>> 
<<br>>
#выводим "легенду"
1 - ворота в город, 2 - дом мага
    <<if $дом_Константина[0]>0 >>, 3 - дом Константина<<endif>>
    <<if $рынок[0]>0 >>, 4 - рынок<<endif>>
    <<if $ночлежка[0]>0 >>, 5 - ночлежка<<endif>>
    <<if $бордель[0]>0 >>, 6 - бордель<<endif>>
    <<if $таверна[0]>0 >>, 7 - таверна<<endif>>
<<endnop>>

<<if $flag == 1>>
    <<if     $flag2==1>>
        === вы вышли к воротам в город ===
#        [[перейти к воротам|ворота в город 1]]
    <<endif>>
    <<if     $flag2==2>>
        === вы вышли к дому мага ===
#        [[перейти к дому мага|дом мага 1]]
    <<endif>>
    <<if     $flag2==3>>
        === вы вышли к дому Константина ===
#        [[перейти к дому Константина|дом Константина 1]]
    <<endif>>
    <<if     $flag2==4>>
        === вы вышли к рынку ===
        <<set $рынок[0]=1>>
#        [[перейти к рынку|рынок 1]]
    <<endif>>
    <<if     $flag2==5>>
        === вы вышли к ночлежке ===
        <<set $ночлежка[0]=1>>
#        [[перейти к ночлежке|ночлежка 1]]
    <<endif>>
    <<if     $flag2==7>>
        === вы вышли к таверне ===
        <<set $таверна[0]=1>>
#        [[перейти к таверне|ночлежка 1]]
    <<endif>>
<<endif>>
[[-вернуться в начальную точку|$откуда]]

для удобства задания карты города сначала рисую типа такого и потом убрать комментарии, перевод строк и сменить 1 на 'x':

Код:

# матрица для рисования города
#0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
#0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
#0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
#0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,
#0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,1,
#1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,
#1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,1,0,
#1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,
#1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
#1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,
#1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,
#1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,
#1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
#1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,0,
#1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,0,
#1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,
#1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,
#1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,1,
#1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,1,1,
#1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,1,
#1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,

Неактивен

0    0    #8
04.08.2014 14:10

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

Я её изначально не собиралась выводить, это для отладки работы алгоритма сделала. Хотела вслепую гонять персонажа, без карты.
Но с таким вариантом, как у вас получился, точно засяду за визуализацию. ;-)

Ну, раз не боитесь жёсткой порнографии, то как доделаю первую главу, выложу big_smile

Отредактировано Aruny (04.08.2014 14:11)

Неактивен

0    0    #9
26.08.2014 07:49

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

А есть какой-нибудь простой, "встроенный", способ проверить число на чётность?
Или конструкция вида
<< if Math.round($Х/2) <= $Х/2 >> чётное! <<else>>нечетное<<endif>>
и так нормальная?


И можно ли передавать параметры в <<display 'параграф'>>, или только сетами перед выводом?

Неактивен

0    0    #10
08.09.2014 09:16

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

А можно ли сделать передачу адреса изображения через переменную?

Пока вижу только прямое указание адреса вида [[File: 01-02.jpg]]

А мне бы хотелось сделать вида [[File: $картинка]], где $картинка = '01' + '-' + '02' + '.jpg'

Неактивен

0    0    #11
08.09.2014 11:59

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

Спасибо, но я обойдусь и одним параграфом с кучей ифов big_smile
типа
<<set $img='01-02'>>
<<display 'image'>>

::image
<<if $img='01-02'>>[[file: 01-02.jpg]]
<<elseif ...>>


Пойду в предложения писать big_smile

Неактивен

0    0    #12
05.11.2014 15:50

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

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

Я не тормоз. я не тормоз, я умею читать.... но ни фига не вижу!

Где и как делать вывод информации в другие окошки в третьей версии? smile

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru