Page 1 of 1

Отход от заданной цели

Posted: 08.09.2010 15:14
by Venom
Подскажите плс, как прописать следующий алгоритм.
Есть чар Х и есть чар Y.
Когда "Х" приближается к "Y", то "Y" - должен отходить, но не на заданную координату, а просто на несколько тайлов в зависимости от того, с какой стороны (W,S,N,E), подит чар "Х".
Т.е., если подходит со стороны W, то мы бежим на S или N или E и тд.


С подходом все выходит, а вот с отходом - нет (

Хелп.

Posted: 08.09.2010 15:51
by Vizit0r
определяешь направление на цель (4 четверти, 8 направлений - исходя из координат своих и цели), потом отходишь на полученное направление -4, что и даст тебе провоположную сторону

Re: Отход от заданной цели

Posted: 08.09.2010 16:29
by Macks
Venom wrote:Подскажите плс, как прописать следующий алгоритм.
Есть чар Х и есть чар Y.
Когда "Х" приближается к "Y", то "Y" - должен отходить, но не на заданную координату, а просто на несколько тайлов в зависимости от того, с какой стороны (W,S,N,E), подит чар "Х".
Т.е., если подходит со стороны W, то мы бежим на S или N или E и тд.


С подходом все выходит, а вот с отходом - нет (

Хелп.
Прописать фиксированные координаты и не мучатся.

Каждый отходит в свой угол.

Как в боксе.

Posted: 09.09.2010 15:47
by Venom
Vizit0r wrote:определяешь направление на цель (4 четверти, 8 направлений - исходя из координат своих и цели), потом отходишь на полученное направление -4, что и даст тебе провоположную сторону
А набросать козу скрипта, если не затруднит ?
Буду премного благодарен.

Posted: 09.09.2010 16:39
by Macks
Venom wrote:
Vizit0r wrote:определяешь направление на цель (4 четверти, 8 направлений - исходя из координат своих и цели), потом отходишь на полученное направление -4, что и даст тебе провоположную сторону
А набросать козу скрипта, если не затруднит ?
Буду премного благодарен.
Благодарности Vizit0r в перед.

Posted: 09.09.2010 16:41
by Vizit0r
примерный алгоритм я тебе и так набросал.
писать скрипт - нет.

Posted: 09.09.2010 22:20
by Vizit0r
хы, все уже сделано оказывается. спустя год уже и не помнишь, что было сделано.

Code: Select all

CalcDir(Xfrom,Yfrom,Xto,Yto: integer): byte;

Posted: 09.09.2010 23:09
by MeLFiS
Vizit0r wrote:хы, все уже сделано оказывается. спустя год уже и не помнишь, что было сделано.

Code: Select all

CalcDir(Xfrom,Yfrom,Xto,Yto: integer): byte;

а как работает можна поподробнее ?

Posted: 10.09.2010 7:15
by Vizit0r
вычисляет направление от одной точки к другой. что ж сложного-то?

Posted: 10.09.2010 9:30
by Macks
Vizit0r wrote:вычисляет направление от одной точки к другой. что ж сложного-то?
Они же не знают протокол.

Не знают что смена направления и движения это одна и та же команда.

Для них координаты на карте это максимум.

Попробую рассказать.

1. Есть две координаты X и Y
2. Есть 8 направлений от 0 до 7
3. У любого направления есть противоположное направление.
4. При смене направления координаты не меняются.
5. При движении в существующем направлении, для каждого направления координаты меняются по разному.

Примеры:

1.
Направление 0 - чар лицом к началу координат Y
При движение координата Y уменьшается на 1 с каждым шагом, координата X не изменяется.

2.
Направление 1 - чар повернулся на 45 градусов по часовой стрелке.
При движение координата Y уменьшается на 1 с каждым шагом, координата X увеличивается на 1 с каждым шагом.

Posted: 10.09.2010 10:33
by Vizit0r
все гораздо проще - вокруг чара 8 клеток - 4 прямых направления, 4 диагональных. шагнуть можно в любом (если свободна клетка), но если направление чара не совпадает с тем, куда надо идти, то потребуется 2 шага - один для поворота в заданном направлении, второй - для шага.

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

Posted: 10.09.2010 16:45
by Macks
Vizit0r wrote:Macks - вот для этого-то и существуют поиски пути с беганием, чтобы избавить пользователей от таких не нужных подробностей
Это понятно, но что бы вычислить координаты куда двигаться в обратном от другого чара направлении, нужно понимать что такое направление и как оно коррелирует с координатами.

Кстати проблема решается гораздо проще.

Допустим Xm Ym - мои координаты, Xc Yc - координаты чара от которого нужно отойти, X Y - искомые координаты.

if Xm > Xc then X = Xm + 2 else X = Xm - 2;
if Ym > Yc then Y = Ym + 2 else Y = Ym - 2;

Примерно так.