Если у Вас есть вопросы, как сделать что-то в программе или Вы не понимаете чего-то (то ли это ошибка, то ли фича и т.д.), то спрашивайте в этой теме.
Неактивен
Вроде не нашла тут подобный вопрос.
Столкнулась с проблемой в циклах.
У меня есть некий массив, список одежды в гардеробе. Он не постоянный, меняется при получении новой вещи или выбрасывания старой.
При заходе в шкаф хочу сделать возможность одеть эту вещь.
Следующий код по логике выглядит рабочим
$одежда[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] = $вещь} в ссылке в любом случае получается равной последнему элементу списка, хотя выводимые значения под ссылкой показаны верны.
Получается, что при создании ссылок с изменением величин на используется последнее значение этой величины.
Или это я тормоз и что-то не то делаю и не так понимаю, или это и вправду не очень удобный косяк
Неактивен
Да я так же вышла из положения - при выводе информации о вещи выставляю типа "если зашли из шкафа, то выводим возможность надеть", "если зашли из магазина, то выводим информацию о возможности купить".
Просто так получается множество однотипных лишних строк, которые можно было бы уместить в одну. Двадцать вещей - двадцать строк вида [[надеть|шкаф {$одежда = ...}]] и ещё двадцать на покупку. И ещё двадцать на выброс...
Никакой оптимизации кода и уважения к ресурсам
Неактивен
А как сделать слияние строк в переменную? Чтобы можно было выводить в ссылке типа [[согласиться на $money|agree1 ]] ? А то вариант [[согласиться на <<print $money>> |agree1 ]] выводит вместо переходной ссылки только это: <>
А [[согласиться на $money |agree1 ]] выводит "согласиться на asm_var0"
Ложная тревога.
Нашла
перед выводом ссылки сделать
<<set $i = "согласиться на " + $i >>
и в ссылке просто [[$i | agree1]]
Не привыкла складывать текст с числами
Отредактировано Aruny (02.08.2014 10:37)
Неактивен
А как сделать, чтобы нормально моноширинный был? А то {{{}}} не очень-то помогает, всё равно символы разной ширины получаются и из-за этого не могу выстроить лабиринт Немного, но сдвигаются ряды.
Или можно ли вывести символы из расширенной таблицы ASCII, там, где закрашенные прямоугольники?
И можно ли сделать, чтобы множественные пробелы не заменялись на один, а выводилось сколько их надо., или это ограничение HTML не обходится?
Неактивен
Спасибо Но добавить символы типа этого ▒ (альт+177) почему-то не получилось и на тоже что-то "компилятор" ругается
И моноширинный текст на самом деле не моноширинный.
Вышла из положения чисто по женски - подобрала символы, совпадающие по ширине. То есть в заглавной букве "Ш" умещается четыре точки подряд (....), а значок человечка - три символа: .о.
Зато теперьу меня есть двумерный лабиринт
Неактивен
Поиграть конкретно в пишущуюся вряд ли получится... очень большие сомнения, что у меня хватит усидчивости, творческого порыва и фантазии закончить, а во вторых, рейтинг 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,
Неактивен
Я её изначально не собиралась выводить, это для отладки работы алгоритма сделала. Хотела вслепую гонять персонажа, без карты.
Но с таким вариантом, как у вас получился, точно засяду за визуализацию. ;-)
Ну, раз не боитесь жёсткой порнографии, то как доделаю первую главу, выложу
Отредактировано Aruny (04.08.2014 14:11)
Неактивен
А есть какой-нибудь простой, "встроенный", способ проверить число на чётность?
Или конструкция вида
<< if Math.round($Х/2) <= $Х/2 >> чётное! <<else>>нечетное<<endif>>
и так нормальная?
И можно ли передавать параметры в <<display 'параграф'>>, или только сетами перед выводом?
Неактивен
А можно ли сделать передачу адреса изображения через переменную?
Пока вижу только прямое указание адреса вида [[File: 01-02.jpg]]
А мне бы хотелось сделать вида [[File: $картинка]], где $картинка = '01' + '-' + '02' + '.jpg'
Неактивен
Спасибо, но я обойдусь и одним параграфом с кучей ифов
типа
<<set $img='01-02'>>
<<display 'image'>>
::image
<<if $img='01-02'>>[[file: 01-02.jpg]]
<<elseif ...>>
Пойду в предложения писать
Неактивен
Я не тормоз. я не тормоз, я умею читать.... но ни фига не вижу!
Где и как делать вывод информации в другие окошки в третьей версии?
Неактивен