Author Topic: Логика работы с программой  (Read 7992 times)

0 Members and 4 Guests are viewing this topic.

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Логика работы с программой
« on: February 21, 2016, 08:31:46 AM »
Доброго времени суток.
Опыт в программировании у меня закончился ещё на Бейсике (то есть линейное исполнение программ, нет переменных Итак далее), но желание научится есть давно],а вот сейчас по прошествии лет так 30 понадобилось написать бота для игрушки (браузерка).
Начал думать как это сделать но возник вопрос по принципу работы логики.
Так вот после прочтения кучи тем понял что принцип построения программы такой :
1) Есть ядро которое постоянно висит и мониторит состояние игры
2) В зависимости от происходящего начинают выполнятся какие либо действия.
3) После выполнения подпрограмм состояние возвращается в п.1

Состояния которые надо постоянно мониторить (например потеря соединения) надо включать в пункт 1, но тут же вопрос, а что если это состояние наступит при выполнении любой подпрограммы пункта 2? Значит надо добавлять проверку и в п.2? Или п.1 постоянно мониторит не зависимо от того что выполняется в данный момент и может отменить выполнение п.2?

P.S. Как то сумбурно получилось, но тяжело сформулировать свои мысли когда не занимался ООП даже Паскаль в руках не держал:)

P.S.S А что происходит с проектом в данный момент ?
« Last Edit: February 21, 2016, 08:41:44 AM by Pronin »

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Логика работы с программой
« Reply #1 on: February 21, 2016, 09:08:33 AM »
да уж, сумбурно.

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

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

ты спросить то что хотел? ))

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Логика работы с программой
« Reply #2 on: February 21, 2016, 09:12:16 AM »
Quote
P.S.S А что происходит с проектом в данный момент ?

вялотекущее развитие, направленное скорее на подчищение хвостов, чем какие то революционные решения.
я повторюсь, сейчас функционал позволяет решить наверное 90% задач пользователя, поэтому особого смысла что то радикально курочить нет.

из следующих обозримых целей - выпуск 64 битной версии. изза ограничений ОС, взаимодействие 32 и 64 битных приложений друг с другом весьма ограничено.

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #3 on: February 21, 2016, 10:30:21 AM »
да уж, сумбурно.

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

Нет, мне не надо тупо лупить по кнопкам:) Это можно сделать и на матросах к мышке и клаве.

Мне нужна логика в действиях:)

Ну значит будем изучать с нуля.

P.S Вопрос был в том что правильно ли я понимаю принцип построения программы

Кликермен

  • Активный участник
  • ***
  • Posts: 112
    • View Profile
Re: Логика работы с программой
« Reply #4 on: February 21, 2016, 11:11:00 AM »
есть основное тело скрипта, есть дочерние(потоки)
Можешь дочерними потоками проверять сбои,  менять флаги, которые будут выключать выполнение скрипта, переходя на исправление сбоев

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #5 on: February 21, 2016, 02:20:47 PM »
Так как мою тему посетил САМ Джонни то это судьба, и надо начинать осваивать данную программу:)

Итак, так как Hello World в бейсике я написал ещё лет 30 назад то решено было начать с другого, а именно с GETSCREEN и дальнейшем сохранением скриншота в папочку:)
Вот он мой эпохальный первый код:
Code: [Select]
1 GETSCREEN(1,155,1602,1035)
2 SCREENSHOT
3 print ("ОМГ получилось")
4 HALT
Далее я наслаждался свежесделанной картинкой минут 5.
Ну думаю с почином:)

Теперь задача сложнее:

Есть 8 мест (жестко привязанных по координатам) где может появится 1 из цветов пикселя и в зависимости от цвета мне нужно выполнить разные действия.

Логику я же правильно понимаю:
В основном теле программы делаем GETSCREEN , далее смотрим по координатам цвет пикселя и если он (допустим) 100 то выполняется действие LCLICK по этим координатам, а если (допустим) 200 то надо загрузить подпрограмму со скриптом.

При этом надо проводить проверку на потерю соединения путём сравнения картинки или подсчёт пикселей в определённой зоне на экране (ну это я думаю можно вывести в ядро программы и при совпадении прерывать скрипт)


Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #6 on: February 22, 2016, 03:46:29 PM »
Итак появилось время на продолжение попыток работ по созданию мегасупербота.

Прочитал про массивы и примерно понял как они работают и решил попробовать использовать их в программе:

Code: [Select]
GETSCREEN (0,153,1602,1035)
COLORMODE(8)
SCANPICTURE($var, 164,853,1447,1023, "take.bmp",5026082,95)
 while (arrsize($var) > 0)
  $y = arrpop($var)
  $x = arrpop($var)
  PRINT(""$x,":"$y)
  end_cyc
  WAIT(5)

На выходе я получил 4 координаты из 4 возможных:) Это был кусок из нужного мне ядра..

Теперь вопрос знатокам:
GETSCREEN глобальная команда и доступна в из любого места программы,потока,подпрограммы?

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #7 on: February 23, 2016, 01:00:02 AM »
А как мне модифицировать мой код что бы по одному скану можно было просканировать 3 области и с разными картинками?


« Last Edit: February 23, 2016, 02:59:53 AM by Pronin »

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #8 on: February 23, 2016, 03:24:17 AM »
Пока смотрел телевизор придумал как можно такое осуществить.

Code: [Select]
GETSCREEN (0,153,1602,1035)
COLORMODE(8)
SCANPICTURE($var1, 100,100,100,100, "take1.bmp",5026082,95)
SCANPICTURE($var2, 200,200,200,200, "take2.bmp",5026082,95)
SCANPICTURE($var3, 300,300,300,300, "take3.bmp",5026082,95)
 while (arrsize($var1) > 0)
  $y = arrpop($var1)
  $x = arrpop($var1)
  PRINT("Найдено совпадений:", arrsize($var1))
 end_cyc
waitms(50)
 while (arrsize($var2) > 0)
  $y = arrpop($var2)
  $x = arrpop($var2)
  PRINT("Найдено совпадений:", arrsize($var2))
 end_cyc
 while (arrsize($var3) > 0)
  $y = arrpop($var3)
  $x = arrpop($var3)
  PRINT("Найдено совпадений:", arrsize($var3))
 end_cyc
  WAIT(5)

Будет работать?

И есть ли какие то более продуктивные способы сделать эти действия?

« Last Edit: February 23, 2016, 03:25:54 AM by Pronin »

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #9 on: February 23, 2016, 02:23:05 PM »
Code: (clickermann) [Select]
SUB(способ, ($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7) // подпрограмма с параметрами
GETSCREEN ($par1, $par2, $par3, $par4) // сканируется только сектор поиска, это быстрее чем сканировать большой общий сектор
COLORMODE(8)
SCANPICTURE($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7)
 while (arrsize($par0) > 0)
  $y = arrpop($par0)
  $x = arrpop($par0)
  PRINT("Найдено совпадений:", arrsize($par0))
 end_cyc
waitms(50)   
END_SUB

способ($var1, 100,100,100,100, "take1.bmp",5026082,95) // вызов подпрограммы (обязательно ниже подпрограммы)
способ($var2, 200,200,200,200, "take2.bmp",5026082,96) // число вызовов с различными параметрами, число используемых параметров должно соответствовать описанным в подпрограмме.
способ($var2, 300,300,300,300, "take2.bmp",5026082,97)


Уважаемый Кирилл, объясните мне как Ваш код работает по пунктам... просто у меня опыта совсем нет и смотрю на него как баран на новые ворота:) Понять не могу....

Да кстати а как вставлять код как у вас с подсветкой лексики?

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #10 on: February 23, 2016, 04:20:10 PM »
SUB(способ, ($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7) <---- Эта строчка означает что мы создаём подпрограмму с именем "способ" и параметрами в виде переменных?
А значения значения переменных где объявляются?
Вернее даже как мне присвоить им значения?

$par0=100  <-- так?



P.S. Вы меня извините что приходится разжёвывать такие простые для Вас вещи...
« Last Edit: February 23, 2016, 04:22:41 PM by Pronin »

Кликермен

  • Активный участник
  • ***
  • Posts: 112
    • View Profile
Re: Логика работы с программой
« Reply #11 on: February 23, 2016, 04:27:37 PM »
SUB(способ, ($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7) <---- Эта строчка означает что мы создаём подпрограмму с именем "способ" и параметрами в виде переменных?
А значения значения переменных где объявляются?
Вернее даже как мне присвоить им значения?

$par0=100  <-- так?


Code: (clickermann) [Select]
способ($var1, 100,100,100,100, "take1.bmp",5026082,95) // вызов подпрограммы (обязательно ниже подпрограммы) вот здесь мы передаем координаты

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #12 on: February 23, 2016, 05:21:08 PM »
SUB(способ, ($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7) <---- Эта строчка означает что мы создаём подпрограмму с именем "способ" и параметрами в виде переменных?
А значения значения переменных где объявляются?
Вернее даже как мне присвоить им значения?

$par0=100  <-- так?


Code: (clickermann) [Select]
способ($var1, 100,100,100,100, "take1.bmp",5026082,95) // вызов подпрограммы (обязательно ниже подпрограммы) вот здесь мы передаем координаты



То есть после вызова подпрограммы переменным в ней будут присвоены такие данные: $par0 = $var1 , $par1 = 100, $par2 = 100, $par3 = 100, $par4 = 100, $par5 = "take1.bmp" , $par6 = 5026082, $par7 = 95

Вот это поворот:)

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #13 on: February 23, 2016, 07:24:19 PM »
Хмммм выдаёт ошибку ( не найден 0)


Сделал логирование после каждого пункта и получилось что ошибка в передачи имени файла.. то есть он передаёт в подпрограмму вместо take1.bmp   --> 0

Pronin

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Логика работы с программой
« Reply #14 on: February 23, 2016, 07:56:17 PM »
ну значит картинки с таким названием, в папке в которой сохранён скрипт ненайдено.

Не не не .. Сделал вывод лога значений переменных ... он вернул 0 на все
Code: (clickermann) [Select]
SUB(get_items,($get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7))
   LOGWRITE ("Ïåðåìåííûå ïîëó÷èíû:", $get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   GETSCREEN( $get1, $get2, $get3, $get4)
      LOGWRITE ("Êàðòèíêà ïîëó÷åíà")
      COLORMODE(8)
      LOGWRITE ("Êàðòèíêà îáðàáîòàíà")
      WAITMS(50)
     
   SCANPICTURE($get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   LOGWRITE ("Ñêàíèðîâàíèå îáëàñòè âûïîëíåíî")
      WHILE (arrsize($get0) > 0)
         PRINT ("Íàéäåíî ñâîáîäíûõ ñëîòîâ :", arrsize($get0)/2)
      END_CYC
END_SUB
     
     
 
 LOGWRITE ("Ïîäïðîãðàììà Çàïóñêàåòñÿ")
get_items( $var, 168, 867, 1437, 1015, "take.bmp", 5026082, 99)
 LOGWRITE ("Ïîäïðîãðàììà Çàâåðøåíà")

 WAIT(10)
   

Что то тут не так....