Если у Вас есть вопросы, как сделать что-то в программе или Вы не понимаете чего-то (то ли это ошибка, то ли фича и т.д.), то спрашивайте в этой теме.
Неактивен
Вроде не нашла тут подобный вопрос.
Столкнулась с проблемой в циклах.
У меня есть некий массив, список одежды в гардеробе. Он не постоянный, меняется при получении новой вещи или выбрасывания старой.
При заходе в шкаф хочу сделать возможность одеть эту вещь.
Следующий код по логике выглядит рабочим
$одежда[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 ...>>
Пойду в предложения писать ![]()
Неактивен
Я не тормоз. я не тормоз, я умею читать.... но ни фига не вижу!
Где и как делать вывод информации в другие окошки в третьей версии? ![]()
Неактивен