Что нового

Помогите разобраться с скриптом автоматизации Сапёра

martiniFresh

Новичок
Сообщения
10
Репутация
1
Здравствуйте!
Подскажите мне пожалуйста, что делает вот эта строка:
If PixelChecksum(0, 0, 0, 0) <> $GameFieldPixCheckSumMask Then _fail('20')
в коде:
Код:
Dim Const $GameFieldPixCheckSumMask = 16777215 ; маска-хэш игровой области


; тело скрипта
$rRun = Run(@ScriptDir&'\winmine.exe') ; запуск сапера
If $rRun = 0 Then _fail('16') ; проверка запуска сапера, если 0 то вызов функции фиксирования результата
Sleep(9000) ; ожидание конца анимации

WinActivate('Сапер') ; берем в фокус сапера
If PixelChecksum(254, 170, 344, 250) <> $GameFieldPixCheckSumMask Then _fail('20')

А именно знак <>?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Re: Вопрос по коду Autoit3

martiniFresh [?]
А именно знак <>?
больше или меньше. другими словами
Код:
If Not PixelChecksum(254, 170, 344, 250) = $GameFieldPixCheckSumMask Then _fail('20')

вроде бы из школьной арифметики :smile:
OffTopic:
за название темы наверное пожурят тебя
 
Автор
M

martiniFresh

Новичок
Сообщения
10
Репутация
1
Из школьной то из школьной, но вот в справке вот что нашла:
<> - Истинно, если значения не равны между собой.
А про название темы если пожурят, тогда я вообще не пойму как надо и какие критерии. У меня фантазии видимо не хватает на правильные названия. :smile:


Добавлено:
Сообщение автоматически объединено:

Так. Уже 4 день разбираюсь, но увы кое что всё же не понятно.
Вот основной код:
Код:
; подключение библиотек
#Include <ScreenCapture.au3>
#Include <WinAPI.au3>

; определение опций скрипта
opt('MouseCoordMode',0) ; установка отсчета координат указателя мыши относительно координат активного окна
opt('PixelCoordMode',0) ; установка отсчета координат пиксель-функций относительно координат активного окна

; инициализация констант
Dim Const $testName = 'Открыть ячейку' ; название тесткейса
Dim Const $GameFieldPixCheckSumMask = 1763188368 ; маска-хэш игровой области


; тело скрипта
$rRun = Run(@ScriptDir&'\MineSweeper.exe') ; запуск сапера
If $rRun = 0 Then _fail('16') ; проверка запуска сапера, если 0 то вызов функции фиксирования результата
Sleep(2000) ; ожидание конца анимации

WinActivate('Сапер') ; берем в фокус сапера
If PixelChecksum(47,88,190,235) <> $GameFieldPixCheckSumMask Then _fail('20') ; проверка целостности игрового поля
$x = Random(45,194); вычисление случайной х
$y = Random(85,194); вычисление случайной у
$origPixCol = PixelGetColor($x,$y) ; запись цвета пикселя по вычисленным координатам
MouseClick('',$x,$y) ; симуляция клика мыши
If PixelGetColor($x,$y) = $origPixCol Then _fail('25') ; если пиксель не изменился значит что-то не так


;функции
Func _fail($nFailString)
	$hWnd = _WinAPI_GetForegroundWindow() ; получаем хэндл активного окна
	_ScreenCapture_CaptureWnd(@ScriptDir & "\fail_"&$testName&'_'&$nFailString&".jpg", $hWnd) ; делаем скриншот
	Exit ; завершение скрипта
EndFunc

Но проблема вот в чём. У меня win xp а скрипт по сапёру win 7 и у меня не получается сопоставить во первых расположение PixelChecksum с расположением в сапёре win xp. Помогите разобраться пожалуйста. Не понятно, какие это всё же координаты? Я пыталась задать координаты найдя ху точки левого верхнего угла поля, и ху точки правого нижнего угла точки. Преобразовала цвет в переменной $GameFieldPixCheckSumMask под цвет сапёра в хр, но у меня всё равно делает скрин 20 на целостность поля и скрипт завершает работу. В чём ошибка?
А ведь скрипт должен щёлкать по клеткам эмитируя действия игрока.


Добавлено:
Сообщение автоматически объединено:

И как ещё получить маска-хэш игровой области для переменной - $GameFieldPixCheckSumMask в сапёре win xp?


Добавлено:
Сообщение автоматически объединено:

Так. Маску вроде нашла как получить.
Скрипт для получения маски области -
Код:
$checksum = PixelChecksum(37, 101, 295, 359)
MsgBox(0,"маска", $checksum )
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Вопрос по коду Autoit3

Код:
WinWaitActive('Сапер')

$aPos = WinGetPos('Сапер')
MsgBox(0, "WinGetPos активного окна", "Координаты:" &@LF&@Tab& "X=" & $aPos[0] &@LF&@Tab& "Y=" & $aPos[1] &@LF&@LF& "Размеры:" &@LF&@Tab& "ширина =  " & $aPos[2] &@LF&@Tab& "высота  =  " & $aPos[3])

$checksum = PixelChecksum($aPos[0], $aPos[1], $aPos[0] + $aPos[2], $aPos[1] + $aPos[3])
MsgBox(0,"маска", $checksum )
 
Верх