RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2425992 views

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 смоожет. Если это так вопрос исчерпан.

Aleks Versus Moderator 16.02.2016 19:05 (10 years ago)

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'">

В Навигаторе, конечно.

Белый Шарик #100 17.02.2016 02:54 (10 years ago)

evp:

Кстати, если убрать эту и похожие конструкции, “мега”-игры похудеют процентов так на 30, думаю. А если над ними еще поработать, так от первоначального объема кода останется треть

При создании игры, лично меня, меньше всего волнует объем кода и его компоновка. Лишь бы игра получилась хорошей (:

А совет интересный. Надо будет взять на вооружение.

Вроде бы уже был этот вопрос (я вроде бы и задавал): как осуществить ascii графику на куспе?

Hungry,
моноширинный шрифт ставь, и выводи что хочешь.

evp,
Ну извини, я так делаю.
В ЭТО не играл, Альбедо, в коде не особо сидел. Все дошло самостоятельно, без просмотра чужого кода.

Oliver, не надо извиняться. Ты меня ничем не обидел. И я тебя обидеть не хотел.

Надеюсь, теперь, прежде чем написать 100500 строк кода, ты подумаешь как сделать проще. Обычно, первое пришедшее в голову решение не бывает оптимальным.

Aleks Versus Moderator 17.02.2016 14:25 (10 years ago)

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 по распарсиванию списка и выбору случайного файла предоставляю честь написать тебе :) Ты на этом собаку съел.

Log in or Register to post comments.