Как сделать?
…
К тому же игра и складывается из всяких проработанных мелочей.
Как правило, нет.
о чистоте кода вопрос. Это заметно и ощутимо на мобильных устройствах? Имею в виду разницу между 20 грамотными строчками, выполняющими несколько циклов и 100 строчками делающими то же самое через кучу if, да всяких костылей?
Разницы нет. Описание локации выводится только по завершению обработки всего кода локации. Исключение может составлять лишь принудительный вызов REFINT, но им никто не пользуется.
По быстродействию: библиотека написана на чистом C и глубоко оптимизирована. Так что быстродействие обработки кода максимально.
Понял, спасибо. Это очень хорошо, что си и оптимизация.
Значит качество кода — это в основном для себя и коллег, читающих код или пользующихся методами, а для пользователя лишь бы правильно (по логике) работало.
Для себя, я уже понял, стоит, ибо хорошую процедуру/шаблон написал — ей потом просто пользоваться, экономит время.
Возможно ли присвоить массив части другого массива. То есть двумерный массив в строку трёхмерного?
Если нельзя, то как эффективнее сделать такую копию в условиях, когда неизвестно, какие ячейки заняты и как называются/пронумерованы? arrsize — узнал длину, а дальше? Как узнать максимальную размерность массива? Как узнать индекс 5й ячейки в примере, чтобы его скопировать?
$a[0]='A'
$a[1][0]='B'
$a[1][1]='Bb'
$a[3]='C'
$a['no']='NO'
$as=arrsize('a')
*nl 'size='+$as
i=0
:loop
*nl $a[i]
if i<$as: i=i+1 & jump 'loop'
И просто любопытный пример:
$a[0]=''
$a[1]=''
*nl 'size='+arrsize('a')
Выдаст 2. Удалить эти пустые ячейки в конце нельзя. Разумеется, нужно программировать так, чтобы оные не создавать.
Хитрый Пряник,
двумерный массив в строку трёхмерного
все массивы одномерные. Многомерность можно только имитировать, например с помощью строковых индексов.
Примеры массивов, многомерные массивы
Как узнать индекс 5й ячейки в примере, чтобы его скопировать?
Индекс 5й ячейки будет 5.
Если же тебе нужно вычислить числовой индекс, соответствующий известному строковому индексу, делается так:
1. Сохраняем текущее значение ячейки с указанным строковым индексом во вспомогательную переменную.
2. Записываем в эту ячейку какое-нибудь уникальное значение, которое точно не встречается в массиве.
3. Ищем числовой индекс с помощью функции ARRPOS по уникальному значению.
4. Возвращаем на место оригинальное значение.
При желании, в этот алгоритм можно добавить проверку на то, была ли изначально заполнена ячейка массива.
Возможно ли присвоить массив части другого массива
Удалить эти пустые ячейки в конце нельзя
Можно.
KILLVAR '$a'
Nex:
Индекс 5й ячейки будет 5.
Мне нужно узнать строковый индекс, соответствующий числовому
Этот код
KILLVAR '$a'
Убъёт весь массив, а не только пустые ячейки в конце него.
За CopyArr спасибо, что-то я в старую справку глядел, там не было.
Но оно же заменяет значения первого массива а не дополняет их.
Однако, раз массив одномерный, значит можно просто циклом пройтись? Но как тогда выудить элементы array1 для случая, когда нет нормы, как в указанном примере? Брать по максимальной размерности? Да и после цикла же в массиве приёмнике текстовые индексы не сохранятся, раз я их не узнал.
Почему сей код выводит в окно «8»?
a=7
b=dyneval("a+1")
функция же только возвращать должна, то есть присвоение должно быть, не?
Мне нужно узнать строковый индекс, соответствующий числовому
Приведи практический пример. Не абстрактный, а реальную задачу.
Этот код … Убъёт весь массив, а не только пустые ячейки в конце него.
С помощью этого же оператора ты можешь очистить выборочно ячейки по любым индексам. Загляни в справку.
За CopyArr спасибо, что-то я в старую справку глядел, там не было.
Но оно же заменяет значения первого массива а не дополняет их.Однако, раз массив одномерный, значит можно просто циклом пройтись? Но как тогда выудить элементы array1 для случая, когда нет нормы, как в указанном примере? Брать по максимальной размерности? Да и после цикла же в массиве приёмнике текстовые индексы не сохранятся, раз я их не узнал.
Сформулируй внятно вопрос. Я уже сказал, что многомерных массивов по сути не существует в QSP.
Хитрый Пряник,
функция же только возвращать должна, то есть присвоение должно быть, не?
Нет. Всё сложнее. Сначала выполняется переданный код. Так, как будто он бы выполнился в коде локации. Т.о. выполняется вычисление выражения и вывод результата на экран.
В переменную “b” ничего не запишется, так как возвращать вычисленное выражение нужно через переменную “RESULT”.
Правильный код выглядит так:
a = 7
b = DYNEVAL("RESULT = a + 1")
В документации это подробно описано.
Чтобы понять принцип, можно представить DYNAMIC и DYNEVAL “динамическими” аналогами операторов GOSUB и FUNC соответственно.
Понял, спасибо. Я пользовался функцией и там возвращал всё, выводя в result
Тут как-то невкурил из документации, что result нужно задействовать.
Но это рвёт мои шаблоны, ибо просто строчка в коде локации 2+3 не должна выводить ничего (или ошибку), ибо никто не командовал делать вывод же! Посчитал и молодец, сиди молчи :) Ровно так же, как не выводит текст, вписанный в код напрямую.
Хитрый Пряник,
2+3
'абырвалг'
выведет на экран
5
абырвалг
Хоть в “обычном” коде локации, хоть в динамическом. Выражение, стоящее “само по себе”, по умолчанию выводится в основное описание.
Мда, с одномерными массивами печаль (настолько неожиданно, что я сразу и не понял), даже для плоской карты уже костыль нужен с имитацией двухмерного. Ну да ладно.
Про убийство элемента массива нашёл, странный синтаксис вместо кристально понятного killvar ’$a[1]’, ну да ладно, зато проще чистить в цикле через killvar ‘$a’,i
Про выражение учту. Тоже не ясно было, ибо существует оператор *p, да и смешивание мух с котлетами кода с прямым текстом по-моему.
Всем привет и с новым годом!
Можно ли настроить фиксированный размер рабочих окошек? А то каждый раз приходится вручную раздвигать.
Еще раз здрасьте! :cool:
Как можно привязывать события к времени? Например, ГГ говорят прийти завтра, или на следующей неделе, а сделать это без танцев с бубном как-то не выходит. Ведь должен же быть адекватный способ. Время у меня представлено так:
Spoiler
!Время
if hour >= 24:
hour -= 24
weekday += 1
number += 1
end
if minutes > 5:
hour += 1
minutes = 0
end
:loop_weekday
if weekday >= 8:
weekday -= 7
jump ‘loop_weekday’
end
:loop_number
if number >= 31:
number -= 30
month += 1
penaltyPoints-=10
if penaltyPoints<0: penaltyPoints=0
jump ‘loop_number’
end
:loop_year
if month >= 13:
month -= 12
year += 1
jump ‘loop_year’
end
!Дни недели
if weekday = 1: $weekday = ‘Понедельник’
if weekday = 2: $weekday = ‘Вторник’
if weekday = 3: $weekday = ‘Среда’
if weekday = 4: $weekday = ‘Четверг’
if weekday = 5: $weekday = ‘Пятница’
if weekday = 6: $weekday = ‘Суббота’
if weekday = 7: $weekday = ‘Воскресенье’