RU 📌 Pinned

Как сделать?

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

Всем большое спасибо! Ваща помощь мне очень помогла!:D

Dark[Ol(U23)leneri] #34 25.05.2010 13:47 (15 years ago)

Nex, а какая разница?

Dark,
в приведенном тобой коде проверка осуществляется в момент вывода текста: соответственно, ссылка либо будет выведена, и тогда, нажимая на нее, можно будет взять сколько угодно однотипных предметов, либо не будет выведена вообще.

В приведенном мной коде - ссылка будет выведена в любом случае, но при выполнении кода ссылки (этот код выполняется когда игрок ткнул в ссылку) будет каждый раз производиться проверка - предмет добавится только один раз.

Dark[Ol(U23)leneri] #34 27.05.2010 05:44 (15 years ago)

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 комнат надо создавать свою локацию? В одной это сделать не получается, потому что в этом коде он во всех комнатах фиксирует один и тот же результат, который первым выпал.

Log in or Register to post comments.