Author Topic: Движение синей точки в противоположную от карасной  (Read 2043 times)

0 Members and 1 Guest are viewing this topic.

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Есть прямоугольная 2D карта, на ней есть одна синяя точка с ограниченной квадратной областью видимости и неизвестное кол-во красных точек.

Цель задачи:
Если в радиус синей точки попала красная, то совершать клики на N количество пикселей в противоположную сторону от красной точки, что бы красная точка вышла из радиуса видимости синей. Т.е. образно говоря, что бы синяя точка убегала от красных.

В чем, собственно, сама проблема.
Область карты ограниченна и это тоже нужно как то учитывать перед кликами. Не ясно как быть с красными точками, брать одну ближайшую или как то учитывать все, применять какие то шаблонны? 

В общем, я буду рад, если мне кто-то составит компанию в решении данной задачи...

« Last Edit: September 20, 2018, 09:59:01 PM by Космич »
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
лучше  сразу честно признаться для какой это игры и выложить скрины,
а то окажется что это очередной давно и многократно написанный DarkOrbit или ещё что-то уже готовое.
да, и код выкладывайте сразу, на код компания быстрее составится.

Игру угадал, но я решил не акцентировать внимание на игре, что бы не усложнять тему игровыми особенностями и не привязывать тему к самой игре, но, видимо, получился обратный эффект.  ;D
Кода касающегося данной темы у меня еще нету. Есть пустышка, в которой всё должно происходить.
Code: (clickermann) [Select]
IF( ( ($flee_from_enemy & $pvp_maps) == 1) & ( ($actual_map & $work_map) == STRCONCAT(4, $id_company) ) )
   #include "data\include\ship_position.cms" // Получение координат корабля на миникарте
   IF(PXLCOUNT($_xpos - 15, $_ypos - 15, $_xpos + 15, $_ypos + 15, 204) > 0)
      SCANPXL($array_coord, $_xpos - 15, $_ypos - 15, $_xpos + 15, $_ypos + 15, 204)
      $check_out = 0
      $len = ARRSIZE($array_coord)
      IF($len > 0)
         FOR($i = 0, ($i < $len, 2) & ($check_out = 0))
            IF( ($_xpos - $array_coord[$i])*($_xpos - $array_coord[$i])+($_ypos - $array_coord[$i+1])*($_ypos - $array_coord[$i+1]) <= (8*8) ) // тут совершенно другая история
               $check_out = 1
            END_IF
         END_CYC
         UNDEFINE($array_coord)
      END_IF
   END_IF
END_IF


P.S. что то вроде такого если для одного пикселя, но как тогда избежать выхода за пределы карты, т.е. сделать смещение, что бы кликал вдоль/поперёк границы?
Code: (clickermann) [Select]
$X_run = INT($_xpos - $array_coord[$i]) * 2
$Y_run = INT($_ypos - $array_coord[$i+1]) * 2
MOVE($_xpos + $X_run, $_ypos + $Y_run)
« Last Edit: September 20, 2018, 08:30:03 PM by Космич »
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
а зачем от красных убегать, этож мобы их фармят?
 а убегают только от вражеских игроков и ещё отсиживаются пока они карту не покинут.
Или я уже, что-то забыл?  :)
на обычных картах да, но на пвп картах только живые враги
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
не убежит так бот от игроков, поверь моему опыту,
 только сразу к телепортироваться на другую карту и пережидать пока улетят или в невидимости фармить.

На обычных картах у меня сразу же бежит на порт и телепортируется, но на пвп можно сделать похитрее. Смысл в том, что радиус поражения пушек ниже чем радиус видимости на миникарте. Соответственно, мы еще можем себе позволить отлететь в сторону, пока красная точка не вошла в указанный радиус. Если всё же красная точка вошла в радиус, то можно использовать Ультра камуфляж и спокойно сменить карту.  :)
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»