Как сделать?
…
Chaos Legion:
Aleks Versus,
я в qsp новичек, может есть возможность зафигачить все в функцию и делать проверку null через возврат аргумента или еще чего там есть в программировании…
Вариант с
rand 1,3
if 1 img 1
if 2 img 2
так же эффективен, как и не элегантен, громоздок не гибокстоп, а в “<img src=“/img/loc/3.jpg”>” переменную же можно вставить ?
Для начала точно определись с тем, сколько имгов у тебя будет в папке. Сомневаюсь, что более 1000, поэтому можешь использовать цикл и делать проверку как в прошлом примере.
И да, можно запихать переменную:
“<img src=“/img/loc/<<rand.value>>.jpg”>”
(Но, на самом деле, только мороки добавишь и возможных багов. Крепко подумай для начала, надо ли?)
Лучше определись с кол-вом файлов, пронумеруй их и задай рандом в их диапазоне.
“Лучше определись с кол-вом файлов” - это слишком просто :D я хочу упороться :DDDD
p.s. поразмыслил. Если qsp, как например и PHP сначала,основываясь на коде генерит страницу HTML, а потом браузерная часть ее обрабатывает и выводит,то проверка невозможна. Значит только Aeroqsp через java смоожет. Если это так вопрос исчерпан.
Chaos Legion,
ты имеешь ввиду javascript? Теоретически в QuestNavigator можно, конечно, проверять предзагрузкой наличие картинки, onerror там или как ещё. Но можешь, например, воспользоваться таким способом, который можно использовать в твоём алгоритме:
Создаёшь функцию типа:
!#prv_img
if instr($desc('prv_img'),$args[0])!0:
$result='true'
else
$result='false'
end
Поскольку эта функция будет создана отдельной локацией, к этой локации можно применять команды для локаций ($desc в нашем случае). При добавлении файла в папку, его адрес добавляешь и в базовое описание локации (в которой написана эта функция).
Теперь в твоём алгоритме можно использовать эту функцию:
:ImgRoll
img = rand (1,10000)
if $func('prv_img','<<img>>.jpg')='true':
вставляем изображение
else
jump 'ImgRoll'
end
во-во. Одна голова хорошо, а две ногам покоя не дают ))
Oliver:
Chaos Legion,
Я делаю так:randImg = rand(1,3) IF randImg = 1: "<img src="/img/loc/1.jpg">" IF randImg = 2: "<img src="/img/loc/2.jpg">" IF randImg = 3: "<img src="/img/loc/3.jpg">"
Откуда вы такие беретесь? :)
Хотя, зачем я спрашиваю, если знаю, что такой “код” использовался в ЭТО, потом перекочевал в Альбедо, а уже оттуда “поклонники” стянули его в свои игры. И вот это чудо с легкой руки дилетантов - авторов изначального ЭТО стало для вас стандартом :)
Кстати, если убрать эту и похожие конструкции, “мега”-игры похудеют процентов так на 30, думаю. А если над ними еще поработать, так от первоначального объема кода останется треть :)
*nl '<img src="/img/loc/<<rand(1,3>>.jpg">'
Aleks Versus,
<img src = "img/loc/1.jpg" onerror = "this.style.display = 'none'">
В Навигаторе, конечно.
evp:
Кстати, если убрать эту и похожие конструкции, “мега”-игры похудеют процентов так на 30, думаю. А если над ними еще поработать, так от первоначального объема кода останется треть
При создании игры, лично меня, меньше всего волнует объем кода и его компоновка. Лишь бы игра получилась хорошей (:
А совет интересный. Надо будет взять на вооружение.
Вроде бы уже был этот вопрос (я вроде бы и задавал): как осуществить ascii графику на куспе?
Hungry,
моноширинный шрифт ставь, и выводи что хочешь.
evp,
Ну извини, я так делаю.
В ЭТО не играл, Альбедо, в коде не особо сидел. Все дошло самостоятельно, без просмотра чужого кода.
Oliver, не надо извиняться. Ты меня ничем не обидел. И я тебя обидеть не хотел.
Надеюсь, теперь, прежде чем написать 100500 строк кода, ты подумаешь как сделать проще. Обычно, первое пришедшее в голову решение не бывает оптимальным.
evp:
Aleks Versus,
Код:
<img src = “img/loc/1.jpg” onerror = “this.style.display = ‘none’”>
Тут мы просто не выводим картинку на экран. Но, как я понял, задача чуть сложнее: проверить наличие картинки и дать понять QSP-коду, что картинки нет.
Aleks Versus, если я не ошибаюсь, то взаимодействие QSP и JS это дорога с односторонним движением. Можно передать параметры из QSP в JS, но наоборот нельзя.
Например, можно написать функцию типа
function GetFolderList(folderaddress)
Но передать результат ее работы в QSP не вижу возможности. Поэтому, начав в QSP логику работы с изображениями, а продолжив в JS, вернуться в QSP не получится. Придется продолжать в JS. Но это не выход, так как в этой ситуации мы приходим к выводу, что всю игру проще будет написать на JS и QSP становится лишним.
А что касается оригинального вопроса, то вывод случайной картинки из определенной папки, вполне решается средствами JS. Вкратце, алгоритм следующий: [*] получаем список файлов в папке;
Spoiler
//функция написана не для этого случая и не мной, привожу ее как пример принципиальной возможности
function GetFolderList(folderaddress)
{
var fso, f, fc, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(folderaddress);
fc = new Enumerator(f.files);
s = "";
for (; !fc.atEnd(); fc.moveNext())
{
TestFile(fc.item());
s += fc.item();
s += "\n"; }
return(s);
}
[*] выбираем случайный и отображаем его, “не выходя” из JS.
Хотя, если еще подумать…
Задачка оказалась настолько интересной, что пришла идея использовать вот такой “хак”:
*clr
$folderaddress = 'img/pic'
*nl"<div style='display:none'>"
*p EXEC('JS:GetFolderList(<<$folderaddress>>);')
*p</div>
$imglist = $MAINTXT
*clr
*nl $func('randimg',$imglist)
Функцию randimg по распарсиванию списка и выбору случайного файла предоставляю честь написать тебе :) Ты на этом собаку съел.