Author Topic: Замена свича  (Read 4403 times)

0 Members and 1 Guest are viewing this topic.

Artsakh

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Замена свича
« on: December 21, 2016, 07:27:39 AM »
Дратути всем. Я столкнулся с большим неудобством в виде пары сотен кейсов.)) Подскажите пожалуйста, как можно заменить свитч?

Code: [Select]
INC($var,1)
SWITCH($var)
CASE(1)
   $rx = 1410
   $ry = 690
   $rx1 = 1405
   $ry1 = 685
   $rx2 = 1415
   $ry2 = 695
CASE(2)
   $rx = 1415
   $ry = 690
   $rx1 = 1410
   $ry1 = 685
   $rx2 = 1430
   $ry2 = 695
CASE(3)
   $rx = 1420
   $ry = 690
   $rx1 = 1415
   $ry1 = 685
   $rx2 = 1425
   $ry2 = 695
CASE(4)
   $rx = 1425
   $ry = 690
   $rx1 = 1420
   $ry1 = 685
   $rx2 = 1430
   $ry2 = 695
CASE(5)
   $rx = 1430
   $ry = 690
   $rx1 = 1420
   $ry1 = 685
   $rx2 = 1430
   $ry2 = 695
CASE(6)
   $rx = 1435
   $ry = 690
   $rx1 = 1430
   $ry1 = 680
   $rx2 = 1440
   $ry2 = 695
CASE(7)
   $rx = 1440
   $ry = 690
   $rx1 = 1435
   $ry1 = 680
   $rx2 = 1445
   $ry2 = 695
CASE(8)
   $rx = 1445
   $ry = 690
   $rx1 = 1440
   $ry1 = 680
   $rx2 = 1450
   $ry2 = 695
CASE(9)
   $rx = 1450
   $ry = 690
   $rx1 = 1445
   $ry1 = 680
   $rx2 = 1460
   $ry2 = 695
CASE(10)
   $rx = 1455
   $ry = 690
   $rx1 = 1450
   $ry1 = 680
   $rx2 = 1460
   $ry2 = 695
   //----------////////////
CASE(11)
   $rx =  1465
   $ry =  700
   $rx1 = 1460
   $ry1 = 690
   $rx2 = 1470
   $ry2 = 705
CASE(12)
   $rx =  1465
   $ry =  710
   $rx1 = 1460
   $ry1 = 700
   $rx2 = 1470
   $ry2 = 715
CASE(13)
   $rx =  1455
   $ry =  715
   $rx1 = 1445
   $ry1 = 705
   $rx2 = 1460
   $ry2 = 720
   //----------////////////
CASE(14)
   $rx = 1450
   $ry = 715
   $rx1 = 1445
   $ry1 = 705
   $rx2 = 1455
   $ry2 = 720
CASE(15)
   $rx = 1445
   $ry = 715
   $rx1 = 1440
   $ry1 = 705
   $rx2 = 1450
   $ry2 = 720
CASE(16)
   $rx = 1440
   $ry = 715
   $rx1 = 1435
   $ry1 = 705
   $rx2 = 1445
   $ry2 = 720
CASE(17)
   $rx = 1435
   $ry = 715
   $rx1 = 1430
   $ry1 = 705
   $rx2 = 1440
   $ry2 = 720
CASE(18)
   $rx = 1430
   $ry = 715
   $rx1 = 1425
   $ry1 = 705
   $rx2 = 1435
   $ry2 = 720
CASE(19)
   $rx = 1425
   $ry = 715
   $rx1 = 1420
   $ry1 = 705
   $rx2 = 1430
   $ry2 = 720
CASE(20)
   $rx = 1420
   $ry = 715
   $rx1 = 1415
   $ry1 = 705
   $rx2 = 1425
   $ry2 = 720
CASE(21)
   $rx = 1415
   $ry = 715
   $rx1 = 1410
   $ry1 = 705
   $rx2 = 1420
   $ry2 = 720
CASE(22)
   $rx = 1410
   $ry = 715
   $rx1 = 1405
   $ry1 = 705
   $rx2 = 1415
   $ry2 = 720
   //----------
CASE(23)
   $rx = 1395
   $ry = 705
   $rx1 = 1390
   $ry1 = 695
   $rx2 = 1400
   $ry2 = 710
CASE(24)
   $rx =  1395
   $ry =  695
   $rx1 = 1390
   $ry1 = 685
   $rx2 = 1400
   $ry2 = 700
   //----------
   $var = 0
END_SWITCH
MOVE($rx,$ry)
LCLICK($rx,$ry)
WAITMS(300)
IF(($var!1)&($var!2)&($var!10)&($var!11)&($var!12)&($var!13)&($var!14)&($var!23)&($var!24))
   GETSCREEN
   PXLREPLACE($xShip_hp1,$yShip_hp1,$xShip_hp2,$yShip_hp2, $hp_nps, $hp_ship)
   IF_PIXEL_IN(0,0, $_xmax,$_ymax, $hp_nps)
   ELSE
      GETSCREEN
      IF_PIXEL_IN(0,0, $_xmax,$_ymax, $nps)
         IF(($_return1>$xm1)&($_return1<$xm2)&($_return2>$ym1)&($_return2<$ym2))
            $_return1 = 0
            $_return2 = 0
         END_IF
         LCLICK($_return1, $_return2)
         WAITMS(180)
         KEYPRESS(#1)
         WAITMS(25)
         MOVE($rx,$ry)
         LCLICK($rx,$ry)
      ELSE
         WAITMS(25)
      END_IF
   END_IF
END_IF
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN($rx1,$ry1, $rx2,$ry2, $red)
      $check = 1
   ELSE
      WAITMS(25)
   END_IF
END_CYC
« Last Edit: April 18, 2018, 12:14:07 PM by Artsakh »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Замена свитча
« Reply #1 on: December 21, 2016, 09:47:16 AM »
А что именно смущает? Размер кода? Ну вынести его в инклюд и все дела.
А можно заменить на массивы, только задавать будет не так наглядно.
Или файлы ini - никакой выгоды, те же строки, то же количество, только вынесены в ini.
Или в файлы txt. Тут 2 варианта в одном файле или с разделением. Нужно выбрать по ситуации, смотря как удобней заносить и редактировать данные в конкретной задаче.

Если у тебя координаты это последовательности, можно их вычислять на лету.
« Last Edit: December 21, 2016, 09:53:16 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Замена свитча
« Reply #2 on: December 21, 2016, 10:10:29 AM »
Code: (clickermann) [Select]
// массив, всё в одной куче
STRSEPARATE("1410,690,1405,685,1415,695,1415,690,1410,685,1430,695,1420,690,1415,685,1425,695", ",", $data)
FOR($i=0, $i < ARRSIZE($data), 6)
    $rx = $data[$i]
    $ry = $data[$i+1]
    $rx1 = $data[$i+2]
    $ry1 = $data[$i+3]
    $rx2 = $data[$i+4]
    $ry2 = $data[$i+5]
END_CYC

// массив, каждые данные в своём массиве
STRSEPARATE("1410,1415,1420", ",", $a_rx)
STRSEPARATE("690,690,690", ",", $a_ry)
STRSEPARATE("1405,1410,1415", ",", $a_rx1)
STRSEPARATE("685,685,685", ",", $a_ry1)
STRSEPARATE("1415,1430,1425", ",", $a_rx2)
STRSEPARATE("695,695,695", ",", $a_ry2)
FOR($i=0, $i < ARRSIZE($a_rx))
    $rx = $a_rx[$i]
    $ry = $a_ry[$i]
    $rx1 = $a_rx1[$i]
    $ry1 = $a_ry1[$i]
    $rx2 = $a_rx2[$i]
    $ry2 = $a_ry2[$i]
END_CYC


// то же самое из файла/ов
//всё в куче
TFREADARR("data.txt", $data)
FOR($i=0, $i < ARRSIZE($data), 6)
    $rx = $data[$i]
    $ry = $data[$i+1]
    $rx1 = $data[$i+2]
    $ry1 = $data[$i+3]
    $rx2 = $data[$i+4]
    $ry2 = $data[$i+5]
END_CYC

// каждые данные в своём файле-массиве
TFREADARR("a_rx.txt", $a_rx)
TFREADARR("a_ry.txt", $a_ry)
TFREADARR("a_rx1.txt", $a_rx1)
TFREADARR("a_ry1.txt", $a_ry1)
TFREADARR("a_rx2.txt", $a_rx2)
TFREADARR("a_ry2.txt", $a_ry2)
FOR($i=0, $i < ARRSIZE($a_rx))
    $rx = $a_rx[$i]
    $ry = $a_ry[$i]
    $rx1 = $a_rx1[$i]
    $ry1 = $a_ry1[$i]
    $rx2 = $a_rx2[$i]
    $ry2 = $a_ry2[$i]
END_CYC

// или комбинации. Что можно вычислить вычисляем, что нельзя задаём в массивах
« Last Edit: December 21, 2016, 10:13:45 AM by Vint »


Artsakh

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Замена свитча
« Reply #3 on: December 21, 2016, 10:24:48 AM »
Информация полезная в заметки, но я имел ввиду другое. Я хотел избежать ручного вбивания координат, что то вроде наращивания переменных может быть, и так же, что бы на некоторых координатах как в кейсах условие не срабатывало.)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Замена свитча
« Reply #4 on: December 21, 2016, 10:53:24 AM »
Да кто ж его знает что тебя не устраивало. Проблема была заменить свитч, а не заменить ввод данных
...как можно заменить свитч?

Про данные...
Если у тебя координаты это последовательности, можно их вычислять на лету.
Нужно проанализировать цикличность и вычислять если можно. Смотрю там всё подвержено странной логике и, наверно, без объяснения что это за координаты и как они формируются не понять или очень долго разбираться.
Было бы гораздо понятней с объяснением типа. Сетка ячеек n на m так-то и так-то по ним проходимся в таких направлениях... Такие-то пропускаем. И прочие нюансы.


Artsakh

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Замена свитча
« Reply #5 on: December 21, 2016, 11:07:58 AM »
https://www.youtube.com/watch?v=-ll8UIjg-No
Не знаю как объяснить, скрипт прокликивает в игре овальную траекторию по миникарте. На поворотах мобы исчезают из поля зрения, на видео этого нету, но видно как они отдаляются

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Замена свитча
« Reply #6 on: December 21, 2016, 12:07:03 PM »
Ну вот что нарисовало.
Чёрным - rx, ry
зелёным - rx1, ry1
красным - rx2, ry2

Что за смещение в зелёной области слева вверху?
Красный в начале вообще мечется беспорядочно, возможно координаты напутаны.
Если они все будут одинаковые просто со смещением задать будет не сложно.


Artsakh

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Замена свитча
« Reply #7 on: December 21, 2016, 12:19:55 PM »
Всё должно быть ровно, это скорее я напутал. Расстояние между чёрными точками 5 пикселей, на повороте 10. У каждой чёрной точки есть своя зона поиска 15 на 15 в которой анализируется миникарта на красный пиксель, что бы дистанцию между мобами контролировать.
« Last Edit: December 21, 2016, 12:25:55 PM by my_account »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Замена свитча
« Reply #8 on: December 21, 2016, 12:55:35 PM »
Всё хорошо, только нижний ряд на повороте вверху 10, внизу 5.
И зона не 15х15, а 10х10.
Так в твоих данных.


Artsakh

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Замена свитча
« Reply #9 on: December 21, 2016, 01:11:51 PM »
ну смысл ясен)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Замена свитча
« Reply #10 on: December 21, 2016, 01:53:53 PM »
Вот как у тебя было... так и сделал, только правильно.
Code: (clickermann) [Select]
// левая точка в верхнем ряду (из 10) - базовая. Её смещение 0/0.
// Её номер 1. Нумерация по часовой стрелке (так и было).
//

INC($var,1)

IF($var < 11)              // верхний ряд
    $dx = ($var-1) * 5  // дельта значения X
    $dy = 0                   // дельта значения Y
END_IF
IF(($var > 12) & ($var < 23))  // нижний ряд
    $dx = (9 - ABS($var - 13)) * 5
    $dy = 25
END_IF
IF(($var = 11) | ($var = 12))  // правые точки
    $dx = 55
    $dy = ($var - 10) * 10
END_IF
IF(($var = 23) | ($var = 24))  // левые точки
    $dx = -15
    $dy = 25 - ($var - 22) * 10
END_IF

$rx = 1410 + $dx
$ry = 690 + $dy
$rx1 = $rx - 5
$ry1 = $ry - 5
$rx2 = $rx + 5
$ry2 = $ry + 5

MOVE($rx,$ry)
LCLICK($rx,$ry)
WAITMS(300)
// и т.д.
« Last Edit: December 26, 2016, 10:26:48 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Замена свитча
« Reply #11 on: December 21, 2016, 01:55:39 PM »
Смотри слева поворот отстоит на 15, а не 10.
Овал чуть наклонён, правые ниже, левые выше.


Artsakh

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Замена свитча
« Reply #12 on: December 21, 2016, 10:32:48 PM »
Это то, что мне было нужно. Спасибо.

Artsakh

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Замена свитча
« Reply #13 on: December 24, 2016, 08:42:10 AM »
Это то, что мне было нужно. Спасибо.

Я не смог в нём разобраться и всё исправить, закоменти код пожалуйста).