Как сделать?
…
Всем большое спасибо! Ваща помощь мне очень помогла!:D
Nex, а какая разница?
Dark,
в приведенном тобой коде проверка осуществляется в момент вывода текста: соответственно, ссылка либо будет выведена, и тогда, нажимая на нее, можно будет взять сколько угодно однотипных предметов, либо не будет выведена вообще.
В приведенном мной коде - ссылка будет выведена в любом случае, но при выполнении кода ссылки (этот код выполняется когда игрок ткнул в ссылку) будет каждый раз производиться проверка - предмет добавится только один раз.
Nex, спасибо за разъяснение)
Уважаемые форумчане ) есть вопрос по поводу реализации системы координат для перемещения героя. Хочется сделать на подобии wayPoints реализованых в ранней стадии CS для PODботов.
Для чего нужно: Есть мир с более чем 15 городами. Герой находясь в одном городе может ,почти, беспрепятственно добраться до любого из них. Прописывать пути от каждого к каждому это лишний код.
Попытка реализации: Назначить каждому городу и ключевым точкам пути координаты.
Возникшая проблема: как заставить его считывать промежуточные координаты пути
Пример
Путь от локации А до локации Б проходит через горный перевал.Локация А
$loc='ЛокацияА' $cord1=35 !Ось Х $cord2=101 !Ось УЛокация Б
$loc='ЛокацияБ' $cord1=45 $cord2=140Перевал
$loc='перевал' $cord1=49 $cord2=120
Построить путь от локации А до Б несложно и привязать его ко времени. Но как заставить его считать промежуточные координаты и выдать длину “кривого” пути.
Да и вообще возможно ли это ?
Для вычисления “расстояния между точками”, в общем случае, требуется извлечь квадратный корень(пример) - но QSP не поддерживает операции с дробными числами, в QSP все числа целые.
gr1mm3r:
Построить путь от локации А до Б несложно и привязать его ко времени. Но как заставить его считать промежуточные координаты и выдать длину “кривого” пути.
Да и вообще возможно ли это ?
Если привязать координаты к квадратной сетке, то длину пути по прямой можно просто определить как сумму смещений по двум осям dx+dy и считать каждый ход смещением по одной из координат.
В другом случае можно учитывать перемещение по диагонали то есть +1 по двум координатам. Тогда длина пути будет max(dx, dy).
Промежуточные точки можно считать точно в дробях, а потом округлять, либо сразу взять за основу целочисленный алгоритм Брезенхейма.
Для обсчета пути с обходом препятствий нужно сначала вычислить кратчайший маршрут, это можно сделать например “волновым алгоритмом”.
Ntropy, Nex
Моск взорван приступаю к собиранию его в единое целое. Спасибо за полезную информацию
============upd====================
Ntropy:
Если привязать координаты к квадратной сетке, то длину пути по прямой можно просто определить как сумму смещений по двум осям dx+dy и считать каждый ход смещением по одной из координат.
Сетка готова как и система координат. тут проблема не в том чтобы проставить отрезок и просчитать его проблема сделать волну через поставленную, так называемую, абсолютную точку пути. Т.Е. пройти не по прямому отрезку а по кривой из минимум 3 точек. Алгоритм Бейзенхейма хорош тем что позволяет просчитать конкретный отрезок или отдельные отрезки. Но вот как задать генерацию этих отрезков по заданным точкам ? “Остальное дело техники (с) Ajenta”
gr1mm3r:
Сетка готова как и система координат. тут проблема не в том чтобы проставить отрезок и просчитать его проблема сделать волну через поставленную, так называемую, абсолютную точку пути. Т.Е. пройти не по прямому отрезку а по кривой из минимум 3 точек. Алгоритм Бейзенхейма хорош тем что позволяет просчитать конкретный отрезок или отдельные отрезки. Но вот как задать генерацию этих отрезков по заданным точкам ? “Остальное дело техники (с) Ajenta”
Похоже на задачу поиска кратчайшего пути. Стоит заполнить табличку расстояний между городами и возможности добраться (с учетом перевалов) и по табличке список точек считать, а по ним уже ломанные пути из отрезков.
…мир с более чем 15 городами… Прописывать пути от каждого к каждому это лишний код.
На мой взгляд, хитромудрые алгоритмы перемещений в данном случае - это и есть лишний код.
По-моему, оптимальный в данном случае вариант - представление маршрутов графом. Поиск пути можно реализовать через алгоритм Дейкстры с некоторыми вариациями (например, с некоторой вероятностью NPC сбивается с верного пути).
Ntropy:
Похоже на задачу поиска кратчайшего пути. Стоит заполнить табличку расстояний между городами и возможности добраться (с учетом перевалов) и по табличке список точек считать, а по ним уже ломанные пути из отрезков.
Именно это и есть, только проблема в том что есть конкретные координаты и требуется построение кривой по нескольким точкам, через отрезки заданные минимально возможной длинной пути. Сейчас подготовленны координаты всех необходимых локаций, и попробую их подвязать через алгоритм Брезенхема.
Byte:
По-моему, оптимальный в данном случае вариант - представление маршрутов графом. Поиск пути можно реализовать через алгоритм Дейкстры с некоторыми вариациями (например, с некоторой вероятностью NPC сбивается с верного пути).
+++++++++++++++++++++++UPD+++++++++++++++++++++++++
BYTE
Я это прочитал. Это то что хотел. осталось перенести на QSP.
=======================UPD=========================
Пересмотрел еще раз карты и понял, что слишком я перегибаю. Более чем в 4 города из одного попасть неполучается в виду ландшафтных особенностей. НО спасибо за помощь. Теория Графов помогла грамотно организовать торные пути. Свобода передвижения ГГ остается движением по координатной сетке а-ля Fallout(только не ромбом, а квадратом).
Большая просьба помочь.
Имеется n комнат. В части из них никто не живет, из других недавно только ушли люди. Это определяется рандомно, когда герой в них заходит (через вспомогательную лoкацию ‘комната’). Вопрос: как сделать, чтобы когда герой заходит в комнату, она рандомно выбирает статус и фиксирует его (то есть при заходе именно в эту комнату, уже выдается ранее известная информация, а не рандом).
Рандом сделала так:
IF nloc<=10:
‘Здесь давно никто не проживает’
else
‘Тут кто-то был, но сейчас его нет’
END
nloc=RAND(1,15)
!то есть это дает нам рандом описание комнаты, чтобы не описывать каждую в отдельности. Но при заходе в нее же, рандом может поменяться, а нужно этого избежать. И можно ли вообще так сделать?
Спасибо за внимание )
evetaell,
во-первых тебе нужно привязаться к конкретной локации, чтобы статус комнаты хранился для каждой локации. Имя текущей локации хранится в переменной $CURLOC.
Используя выражение nloc[$CURLOC], мы получаем значение nloc для текущей локации.
Если nloc[$CURLOC] равно 0, значит, значение еще не записано - записываем в него новое значение.
IF nloc[$CURLOC]=0: nloc[$CURLOC] = RAND(1,15)
IF nloc[$CURLOC]<=10:
'Здесь давно никто не проживает'
else
'Тут кто-то был, но сейчас его нет'
END
Спасибо. Но получается для каждой из n комнат надо создавать свою локацию? В одной это сделать не получается, потому что в этом коде он во всех комнатах фиксирует один и тот же результат, который первым выпал.