Что нового

[Автоматизация] Собиралка для пазлов

Feeze

Новичок
Сообщения
18
Репутация
1
Версия AutoIt: 3.3
Описание: Нужен скрипт который соберет пазл.
Скажем есть пазл размером 12 Х 9 пазлов, все 108 пазлов заранее известны и лежат в папке с соответсвующими названиями.
У каждого пазла есть координаты куда он должен быть помещен.

Логика такая:
1. Берем 1й пазл из папки и ищем его расположение на экране ,
2. если не найден берем следующий (пропущеные пазлы нужно будет искать повторно по окончанию цикла - дабы не пропустить. Пазлы лежат один на одном- т.е из 108 пазлов изначально различимо 20). Запоминаем найденый пазл и ищем его на Целой картинке подвев курсор к координатам Х:У.
3. Перетаскиваем найденый пазл на экране на свое место на картинке, возвращаемся к пункту 1, ищем следующий.

Приму и Ваш вариант
 

Вложения

  • paz2.jpg
    paz2.jpg
    98 КБ · Просмотры: 29
  • paz.jpg
    paz.jpg
    93.8 КБ · Просмотры: 24
Автор
F

Feeze

Новичок
Сообщения
18
Репутация
1
Код:
#include <screencapture.au3>
#include <array.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include "BmpSearch.au3"


_Example()


Func _Example()

;~ 	Local $hHighlight_Capture = GUICreate('', 20, 20, -1, -1, $WS_POPUPWINDOW, $WS_EX_CONTROLPARENT)

	Local $hHighlight_Capture = GUICreate('', 20, 20, -1, -1, $WS_POPUPWINDOW, $WS_EX_CONTROLPARENT)

	GUISetState(@SW_SHOW)
	WinSetOnTop($hHighlight_Capture, '', 1)
	GUISetBkColor(0x0000FF, $hHighlight_Capture)
	WinSetTrans($hHighlight_Capture, '', 150)
	Local $aPos = WinGetPos($hHighlight_Capture)
	WinMove($hHighlight_Capture, '', $aPos[0] - 100, $aPos[1] - 100)

	MsgBox($MB_TOPMOST, 'Capture Sample', 'Move window over capture')

	$aPos = WinGetPos($hHighlight_Capture)
	GUIDelete($hHighlight_Capture)
	Sleep(500)
	ConsoleWrite($aPos[2] & ',' & $aPos[3] & ',' & $aPos[0] & ',' & $aPos[1] & @LF)

	Local $hFind = _ScreenCapture_Capture('', $aPos[0], $aPos[1], $aPos[0] + $aPos[2], $aPos[1] + $aPos[3])

	MouseMove(1103,176,0)
	Sleep(500)

	Local $hSource = _ScreenCapture_Capture('')

	Local $aCords = _BmpSearch($hSource, $hFind)


	If Not @error Then
		$iTime = @extended / 1000

		If $aCords[0][0] > 100 Then ; thats quite a few gui's. Just show result
			_ArrayDisplay($aCords)
		Else
			;highligh matches
			Local $aGUI[$aCords[0][0] + 1]
			For $i = 1 To $aCords[0][0]
				ConsoleWrite($aCords[$i][0] & ',' & $aCords[$i][1] & ',' & $aCords[$i][2] & ',' & $aCords[$i][3] & @LF)
				$aGUI[$i] = GUICreate("", $aCords[$i][0], $aCords[$i][1], $aCords[$i][2], $aCords[$i][3], $WS_POPUPWINDOW, $WS_EX_TRANSPARENT)
				GUISetBkColor(0xFFFF00, $aGUI[$i])
				WinSetTrans($aGUI[$i], '', 200)
				GUICtrlSetPos("",$aCords[$i][0], $aCords[$i][1], $aCords[$i][2], $aCords[$i][3])
				GUISetState()

			Next
              Sleep(3000)


				For $i = 1 To UBound($aGUI) - 1
				GUIDelete($aGUI[$i])
			Next
		EndIf

	Else
		MsgBox(0, 'NO MATCHES', 'No Matches Found!')
	EndIf

	_WinAPI_DeleteObject($hSource)
	_WinAPI_DeleteObject($hFind)

EndFunc   ;==>_Example


взял все в цикл и приклеил кнопки на пуск, тема решена :IL_AutoIt_1:
 

Вложения

  • Y-XTdy_ODIY.jpg
    Y-XTdy_ODIY.jpg
    68.2 КБ · Просмотры: 20
Верх