Что нового

Алгорим превратить в код

Aspro

Новичок
Сообщения
3
Репутация
0
Как будет алгоритм снизу в коде?
Пример:

найти цвет1 и кликнуть по нему
и осуществить действия
если нету такого цвета, то найти цвет2 и кликнуть по нему
и осуществить действия
если нету такого цвета, то найти цвет3 и кликнуть по нему
и осуществить действия

Заранее спасибо.

Или вот помогите мне исправить код.. :smile: где что лишнее или не хватает?

Код:
$eda = 0xFF0000
	$trava = 0x00FF00
	$kamni = 0x002AFF
	$zhelezo = 0xF600FF
	$derevo = 0x0600FF
	$reka = 0xFFF600
	$tablo = 0xF8EABB
	$bel = 0xFFFFFF
	$Color9 = 0xA10E25

While 999
$coord = 0
$coord=PixelSearch(0, 0, 600,1000, $eda, 1)
If Not @error Then
  Sleep(1000)
  MouseClick("left", $coord[0], $coord[1], 1)
  _t()
Else
$coord=PixelSearch(0, 0, 600,1000, $trava, 1)
If Not @error Then
  Sleep(1000)
  MouseClick("left", $coord[0], $coord[1], 1)
  _t()
Else
$coord=PixelSearch(0, 0, 600,1000, $kamni, 1)
If Not @error Then
  Sleep(1000)
  MouseClick("left", $coord[0], $coord[1], 1)
  _t()
Else
$coord=PixelSearch(0, 0, 600,1000, $zhelezo, 1)
If Not @error Then
  Sleep(1000)
  MouseClick("left", $coord[0], $coord[1], 1)
  _t()
Else
$coord=PixelSearch(0, 0, 600,1000, $derevo, 1)
If Not @error Then
  Sleep(1000)
  MouseClick("left", $coord[0], $coord[1], 1)
  _t()
Else
$coord=PixelSearch(0, 0, 600,1000, $reka, 1)
If Not @error Then
  Sleep(1000)
  MouseClick("left", $coord[0], $coord[1], 1)
  _t()
WEnd

Func _t()
   While 1
If PixelGetColor (224, 516) = $bel Then
Sleep(1000)
Send ("{Enter}")
EndIf

If PixelGetColor (224, 516) = $tablo Then
Sleep(500)
Send ("{Enter}")
Sleep(700)
EndIf
WEnd
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Я бы сделал как-то так:
Код:
Local $col1 = 
Local $col2 = 
Local $col3 = 
Local $var
While 1
   $var = PixelSearch(0,0,0,0,$col1,10)
   If Not @error Then
	  ;action
	  ContinueLoop
   EndIf
   
   $var = PixelSearch(0,0,0,0,$col2,10)
   If Not @error Then
	  ;action
	  ContinueLoop
   EndIf
   
   $var = PixelSearch(0,0,0,0,$col3,10)
   If Not @error Then
	  ;action
	  ContinueLoop
   EndIf
WEnd
 
Автор
A

Aspro

Новичок
Сообщения
3
Репутация
0
Вот я подправил под себя.
Код:
Local $eda = 0xFF0000
	Local $trava = 0x00FF00
	Local $kamni = 0x002AFF
	Local $zhelezo = 0xF600FF
	Local $derevo = 0x0600FF
	Local $reka = 0xFFF600
	Local $tablo = 0xF8EABB
	Local $bel = 0xFFFFFF
    Local $coord

While 1
   $coord = PixelSearch(0, 0, 600,1000, $eda, 10)
   If Not @error Then
      Sleep(1000)
      MouseClick("left", $coord[0], $coord[1], 1)
	  _t()
      ContinueLoop
   EndIf
   
   $coord = PixelSearch(0, 0, 600,1000, $trava, 10)
   If Not @error Then
      Sleep(1000)
      MouseClick("left", $coord[0], $coord[1], 1)
	  _t()
      ContinueLoop
   EndIf
   
   $coord = PixelSearch(0, 0, 600,1000, $kamni, 10)
   If Not @error Then
      Sleep(1000)
      MouseClick("left", $coord[0], $coord[1], 1)
	  _t()
      ContinueLoop
   EndIf
WEnd

Func _t()
   While 1
If PixelGetColor (224, 516) = $bel Then
Sleep(1000)
Send ("{Enter}")
EndIf

If PixelGetColor (224, 516) = $tablo Then
Sleep(500)
Send ("{Enter}")
Sleep(700)
EndIf
WEnd
EndFunc


Первое Если должно выполняться пока цвет не найдет. Правильно код написан?
И вот ещё. Цвет найден, действие выполнено и снова клик происходит по найденным прежде координатам? Почему не по новым найденным?
UPD: сорри, не знал..
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Первое - исправь тэг обрамляющий код с code на autoit. Будь это тема в моём разделе я бы уже несколько предупреждений выкатил.
А по поводу тычка на ранее найденные координаты, могу предположить что скрипт после выполнения действия на первую сработку, до того как целевое приложение успевает убрать цвет из места поиска, успевает найти там предыдущую сработку и нова на неё ткнуть. Поставь слип, если слип не поможет, насильно обнули переменную с координатами результата передувающего поиска и посмотри что будет.
 
Автор
A

Aspro

Новичок
Сообщения
3
Репутация
0
Что-то в функции не так..
Два интера должны нажаться.
Сделал вот так, и всё заработало.
Код:
Func _t()
   While 1
If PixelGetColor (224, 516) <> $bel Then
Sleep(1000)
Send ("{Enter}")
ExitLoop
EndIf
WEnd
While 1
If PixelGetColor (224, 516) = $tablo Then
Sleep(500)
Send ("{Enter}")
ExitLoop
EndIf
WEnd
EndFunc

В общем всё получилось. Спасибо.
 
Верх