Автор Тема: помогите облегчить код  (Прочитано 1199 раз)

0 Пользователей и 1 Гость просматривают эту тему.

abbatlus

  • Зашел в гости
  • *
  • Сообщений: 2
    • Просмотр профиля
помогите облегчить код
« : Январь 30, 2017, 11:21:49 am »
Короч код для игры Небеса
поиск и бой с нужным монстром
 собственно код работает но... очень долго
Просьба людей понимающих помочь поставить правильно условие что бы не запускать весь код
Итак алгоритм такой:
1. клик на новый остров
2. сканирование нужного монстра
Код: Clickermann
  1. LCLICK(970,393)  // новый остров
  2. wait(3)
  3.  
  4. GETSCREEN
  5. IF_PICTURE_IN (0,0, $_xmax,$_ymax, "джига.bmp", -1, 100)
  6.   LCLICK($_return1, $_return2)
  7.   WAITMS(100)
  8. END_IF
  9.  
  10. GETSCREEN
  11. IF_PICTURE_IN (0,0, $_xmax,$_ymax, "тузик.bmp", -1, 100)
  12.   LCLICK($_return1, $_return2)
  13.   WAITMS(100)
  14. END_IF
  15.  
  16. GETSCREEN
  17. IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кура.bmp", -1, 100)
  18.   LCLICK($_return1, $_return2)
  19.   WAITMS(100)
  20. END_IF
  21.  
Если монстры не найдены тогда на круг(заново) если найдены то включаем следующий код
Код: Clickermann
  1. GETSCREEN
  2. IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопка напасть.bmp", -1, 100)
  3.   LCLICK($_return1, $_return2)
  4.   WAIT(1)
  5. END_IF
  6.  
  7. GETSCREEN
  8. IF_PICTURE_IN (373,606, $_xmax,$_ymax, "ZIP.bmp", -1, 100)
  9.   LCLICK($_return1, $_return2)
  10.   WAIT(2)
  11. end_if
  12.  
  13. move(595,468)  // 1798000
  14. wait(5)
  15.  
  16. GETSCREEN
  17. IF_PICTURE_IN (0,0, $_xmax,$_ymax, "стрелка.bmp", -1, 100)
  18.   LCLICK($_return1, $_return2)
  19.   WAITMS(100)
  20. END_IF
  21.  
  22.  
  23. GETSCREEN
  24. IF_PICTURE_IN (0,0, $_xmax,$_ymax, "забрать.bmp", -1, 100)
  25.   LCLICK($_return1, $_return2)
  26.   WAIT(8)
  27. END_IF
  28.  
  29. GETSCREEN
  30. IF_PICTURE_IN (0,0, $_xmax,$_ymax, "верн.bmp", -1, 100)
  31.   LCLICK($_return1, $_return2)
  32.   WAITMS(100)
  33. END_IF
  34.  
  35. GETSCREEN
  36. IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопка выйти.bmp", -1, 100)
  37.   LCLICK($_return1, $_return2)
  38.   WAIT(5)
  39. END_IF
жду вашей помощи коморады

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3074
  • Лечу куда хочу. cman 4.11.003, xp32
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #1 : Январь 30, 2017, 11:47:00 am »
По размеру
[spoiler]
Код: Clickermann
  1. SUB(attack) //=========================================================
  2.    GETSCREEN
  3.    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопка напасть.bmp")
  4.        LCLICK($_return1, $_return2)
  5.        WAIT(1)
  6.    END_IF
  7.  
  8.    GETSCREEN
  9.    IF_PICTURE_IN (373,606, $_xmax,$_ymax, "ZIP.bmp")
  10.        LCLICK($_return1, $_return2)
  11.        WAIT(2)
  12.    end_if
  13.  
  14.    move(595,468)  // 1798000
  15.    wait(5)
  16.  
  17.    GETSCREEN
  18.    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "стрелка.bmp")
  19.        LCLICK($_return1, $_return2)
  20.        WAITMS(100)
  21.    END_IF
  22.  
  23.  
  24.    GETSCREEN
  25.    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "забрать.bmp")
  26.        LCLICK($_return1, $_return2)
  27.        WAIT(8)
  28.    END_IF
  29.  
  30.    GETSCREEN
  31.    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "верн.bmp")
  32.        LCLICK($_return1, $_return2)
  33.        WAITMS(100)
  34.    END_IF
  35.  
  36.    GETSCREEN
  37.    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопка выйти.bmp")
  38.        LCLICK($_return1, $_return2)
  39.        WAIT(5)
  40.    END_IF
  41. END_SUB
  42.  
  43. SUB(monstr, $name_m) //=========================================================
  44.    IF_PICTURE_IN (0,0, $_xmax,$_ymax, $name_m)
  45.        LCLICK($_return1, $_return2)
  46.        WAITMS(100)
  47.        attack()
  48.        GETSCREEN
  49.    END_IF
  50. END_SUB
  51.  
  52. //==============================================================================
  53.  
  54.  
  55. LCLICK(970,393)  // новый остров
  56. wait(3)
  57.  
  58. GETSCREEN
  59. monstr("джига.bmp")
  60. monstr("тузик.bmp")
  61. monstr("кура.bmp")
[/spoiler]

А по скорости работы... Сейчас в коде боя только чистых задержек на 21.2 сек, + ещё время выполнения кода.
Нужно строить скрипт не просто на паузах, а на анализе результатов или анализе доступности действий. Не тупо, череда GETSCREEN - IF_PICTURE_IN.

Конкретней можно подсказать только зная, что точно нужно делать.
Например, вместо 5 секундного ожидания
Код: Clickermann
  1.   wait(5)
  2.    GETSCREEN
  3.    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "стрелка.bmp")
  4.        LCLICK($_return1, $_return2)
  5.        WAITMS(100)
  6.    END_IF

использовать шаблон "ожидание картинки
Код: Clickermann
  1. WAITMS(100)    
  2. $check = 0
  3. WHILE($check = 0)
  4.    GETSCREEN
  5.    IF_PICTURE_IN(0,0, $_xmax,$_ymax, "трелка.bmp")
  6.        $check = 1
  7.        LCLICK($_return1, $_return2)
  8.        WAITMS(100)
  9.    ELSE
  10.        WAITMS(50)
  11.    END_IF
  12. END_CYC

Получается не ждём полные 5 сек для уверенного появления чего нужно, а ищем каждые 50-100 мс. Как только найдёт, выполнится действие сразу.

Ну и так везде. Что нужно обязательно дождаться -  ждать. Если картинка может появится, а может нет - здесь тоже ожидание, но с ограничением по времени. Время подобрать в разумных пределах.

Ну конечно же везде, где можно указать область поиска. А то сейчас весь экран (0,0, $_xmax,$_ymax) слишком расточительно.
« Последнее редактирование: Январь 30, 2017, 11:53:05 am от Vint »


kiril

  • Герой форума
  • *****
  • Сообщений: 997
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #2 : Январь 30, 2017, 12:33:34 pm »
Продолжаем утрамбовывать по размеру  ;)
[spoiler]
Код: Clickermann
  1.  
  2. SUB(attack,$par1,$par2,$par3,$par4,$par5,$par6)// подпрограмма с параметрами
  3.   GETSCREEN ($par1, $par2, $par3, $par4)
  4.   IF_PICTURE_IN ($par1,$par2,$par3,$par4,STRCONCAT($par5,".bmp"))
  5.      LCLICK($_return1,$_return2)
  6.      WAIT($par6)
  7.   END_IF
  8. END_SUB
  9.  
  10. SUB(monstr,$name_m)// подпрограмма с параметрами
  11.   GETSCREEN (0,0,$_xmax,$_ymax)
  12.   IF_PICTURE_IN (0,0,$_xmax,$_ymax,STRCONCAT($name_m,".bmp"))
  13.      LCLICK($_return1,$_return2)
  14.      WAITMS(100)
  15.      attack(0,0,$_xmax,$_ymax,"кнопка напасть",1)// вызов подпрограммы (обязательно ниже подпрограммы)
  16.      attack(373,606,$_xmax,$_ymax,"ZIP",2)
  17.      move(595,468) // 1798000
  18.      wait(5)
  19.      attack(0,0,$_xmax,$_ymax,"стрелка",0.1)
  20.      attack(0,0,$_xmax,$_ymax,"забрать",8)
  21.      attack(0,0,$_xmax,$_ymax,"верн",0.1)
  22.      attack(0,0,$_xmax,$_ymax,"кнопка выйти",5)      
  23.   END_IF
  24. WAITMS(10)  
  25. END_SUB
  26.  
  27. LCLICK(970,393)  // новый остров
  28. wait(3)
  29. monstr("джига")
  30. monstr("тузик")
  31. monstr("кура")
  32.  
[/spoiler]

kiril

  • Герой форума
  • *****
  • Сообщений: 997
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #3 : Январь 30, 2017, 01:00:53 pm »
продолжаем ускорение выполнения скрипта и утрамбовку его кода.  ;)
[spoiler]
Код: Clickermann
  1. SUB(клик,$par7,$par8,$par9)
  2.   LCLICK($par7,$par8)
  3.   WAIT($par9)
  4. END_SUB
  5. SUB(attack,$par1,$par2,$par3,$par4,$par5,$par6)// подпрограмма с параметрами
  6.   $time = $_time_t + $par6
  7.   WHILE($time > $_time_t)
  8.      GETSCREEN ($par1, $par2, $par3, $par4)
  9.      IF_PICTURE_IN ($par1,$par2,$par3,$par4,STRCONCAT($par5,".bmp"))
  10.         $time = 0
  11.         клик($_return1,$_return2,0.1)
  12.      ELSE
  13.         WAITMS(50)
  14.      END_IF
  15.   END_CYC
  16. END_SUB
  17. SUB(monstr,$name_m)// осторожно монстры!!!
  18. IF($var=0)// искать если монстер не найден
  19.   GETSCREEN (0,0,$_xmax,$_ymax)
  20.   IF_PICTURE_IN (0,0,$_xmax,$_ymax,STRCONCAT($name_m,".bmp"))
  21. $var=1  //монстер найден    
  22.      клик($_return1,$_return2,0.1)
  23.      attack(0,0,$_xmax,$_ymax,"кнопка напасть",10)// 10 - настройка максимального времени ожидания картинки
  24.      attack(373,606,$_xmax,$_ymax,"ZIP"10)
  25.      клик(595,468,5) // 1798000 внимание, в экспериментальных целях наведение курсора заменено на клик!
  26.      attack(0,0,$_xmax,$_ymax,"стрелка",10)
  27.      attack(0,0,$_xmax,$_ymax,"забрать",10)
  28.      attack(0,0,$_xmax,$_ymax,"верн",10)
  29.      attack(0,0,$_xmax,$_ymax,"кнопка выйти",10)
  30.      WAIT(5)
  31.   END_IF
  32. END_IF  
  33.   WAITMS(10)
  34. END_SUB  
  35. клик(970,393,5)  // новый остров
  36. UNDEFINE($var) //обновление монстров острова
  37. monstr("джига")
  38. monstr("тузик")
  39. monstr("кура")
  40.  
[/spoiler]
« Последнее редактирование: Январь 30, 2017, 01:04:48 pm от kiril »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3074
  • Лечу куда хочу. cman 4.11.003, xp32
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #4 : Январь 30, 2017, 01:48:52 pm »
Я не стал "утрамбовывать" саму атаку, т.к. код там скорее всего нужно переделывать. В таком виде он у него и будет долго работать.
Пусть решит что там на лету можно искать, что ждать, а что проверять n секунд вдруг появилось. Потом уже трамбовать.


abbatlus

  • Зашел в гости
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #5 : Январь 30, 2017, 02:31:58 pm »
парни спс за ваши старания но... не много не то мне не надо сокращать атаку по времени меня все устраивает проблема в поиске. я хотел что бы он передвигался от острова к острову в поисках монстра минуя атаку пока не найдет нужного монстра... поэтому если можно просто связать условием два моих кода. алгоритм: если монстр найден включаем атаку если нет идем дальше сокращать не надо (не было бы класно но все ваши варианты не робят... сори

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3074
  • Лечу куда хочу. cman 4.11.003, xp32
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #6 : Январь 30, 2017, 06:20:18 pm »
... проблема в поиске. я хотел что бы он передвигался от острова к острову в поисках монстра минуя атаку пока не найдет нужного монстра...
.. но все ваши варианты не робят... сори


Прям все не робят? А это?
Ну конечно же везде, где можно указать область поиска. А то сейчас весь экран (0,0, $_xmax,$_ymax) слишком расточительно.
Самый прямой путь к ускорению. Задать область для GETSCREEN и поиска.

И мой же вариант под спойлером из ответа #1, где не выполняются ненужные GETSCREEN.


У тебя случайно заготовки не 400х300?


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3074
  • Лечу куда хочу. cman 4.11.003, xp32
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #7 : Январь 30, 2017, 06:31:09 pm »
И туда же описанное ожидание 3 сек. Что не так?

Кликнул "новый остров" и ждёшь(ищешь) по характерным признакам прогрузки и появления монстра.
Проверяешь своих нужных.


CarpeDiem

  • Зашел в гости
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #8 : Февраль 01, 2017, 01:26:35 pm »
Это браузерная флеш игра к которой можно сделать привязку. Область сканирования уменьшиться значительно. Кнопка следующего острова и местонахождение мобов находятся на одном месте, так что достаточно кликать просто по координатам

kiril

  • Герой форума
  • *****
  • Сообщений: 997
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #9 : Февраль 01, 2017, 02:51:58 pm »
Это браузерная флеш игра к которой можно сделать привязку. Область сканирования уменьшиться значительно. Кнопка следующего острова и местонахождение мобов находятся на одном месте, так что достаточно кликать просто по координатам
Поздравляю с получением очередного звания - КАПИТАН ОЧЕВИДНОСТЬ! ;D

CarpeDiem

  • Зашел в гости
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #10 : Февраль 01, 2017, 09:25:00 pm »
Это браузерная флеш игра к которой можно сделать привязку. Область сканирования уменьшиться значительно. Кнопка следующего острова и местонахождение мобов находятся на одном месте, так что достаточно кликать просто по координатам
Поздравляю с получением очередного звания - КАПИТАН ОЧЕВИДНОСТЬ! ;D

А можно процедуре SUB(клик) использовать переменные не  $par7,8,9  а $par1,2,3 ?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3116
  • Котэ
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #11 : Февраль 01, 2017, 09:32:04 pm »
А можно процедуре SUB(клик) использовать переменные не  $par7,8,9  а $par1,2,3 ?

Нет, так как это собъет данные в подпрограмме attack.

kiril

  • Герой форума
  • *****
  • Сообщений: 997
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #12 : Февраль 01, 2017, 09:33:30 pm »
это плохая идея, возможны ситуации когда это приведёт к ошибкам, например вызов одной подпрограммы внутри  другой и затем обращение к параметрам в первой подпрограмме.

admix

  • Зашел в гости
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #13 : Март 11, 2018, 07:48:02 pm »
Здравствуйте....У вас в скрипте сперва осуществляется клик на остров, а потом поиск моба....как сделать наоборот...сперва поиск а потом клик на новый остров...заранее спасибо...

kiril

  • Герой форума
  • *****
  • Сообщений: 997
    • Просмотр профиля
Re: помогите облегчить код
« Ответ #14 : Март 11, 2018, 08:59:28 pm »
Здравствуйте....У вас в скрипте сперва осуществляется клик на остров, а потом поиск моба....как сделать наоборот...сперва поиск а потом клик на новый остров...заранее спасибо...
очевидно, что вам нужно просто поменять местами, строки команд осуществляющих эти действия.