9
« on: April 27, 2017, 11:26:37 PM »
Добра этому дому.
Вот такой код:
[spoiler]
while(1)
logwrite("cyc1")
keypress(75)
while(1)
getscreen
$l = pxlxor(1023, 1008, 1045, 1010)
if($l ! 5921370)
keypress(76)
WAIT(2)
goto(lDone)
end_if
WAITMS(30)
end_cyc
lDone:
logwrite("lDone")
getscreen
$Q = pxlxor (850,1006, 852, 1008)
$E = pxlxor (897, 1012, 899, 1014)
$R = pxlxor (935, 1006, 937, 1008)
logwrite($Q) // 3552822
logwrite($E) // 2960685
logwrite($R) // 2763306
if( ($Q ! 3552822) & ($E ! 2960685) & ($R ! 2763306) ) // åñëè áóòûëü
logwrite("QER")
QERsub()
end_if
$check = 0
while($check = 0)
logwrite("cyc2 ", $check)
getscreen
$Q = pxlxor (850,1006, 852, 1008)
$E = pxlxor (897, 1012, 899, 1014)
$R = pxlxor (935, 1006, 937, 1008)
logwrite($Q) // 3552822
logwrite($E) // 2960685
logwrite($R) // 2763306
if($Q ! 3552822)
logwrite("Q")
Qsub()
logwrite("Qen")
getscreen
$1 = pxlxor (908, 940, 910, 942)
logwrite($1)
if($1 ! 5658198)
logwrite("1")
keypress(76)
$check = 1
goto(Ret)
end_if
else
if($E ! 2960685)
logwrite("E")
Esub()
logwrite("Een")
getscreen
$1 = pxlxor (908, 940, 910, 942)
logwrite($1)
if($1 ! 5658198)
logwrite("1")
keypress(76)
$check = 1
goto(Ret)
end_if
else
if($R ! 2763306)
logwrite("R")
Rsub()
logwrite("Ren")
getscreen
$1 = pxlxor (908, 940, 910, 942)
logwrite($1)
if($1 ! 5658198)
logwrite("1")
keypress(76)
$check = 1
goto(Ret)
end_if
end_if
end_if
end_if
WAITMS(30)
Ret:
logwrite("yeah ", $check)
end_cyc
logwrite("nope")
end_cyc
[/spoiler]
Выдает лог:
23:09:07 cyc1
23:09:29 lDone
23:09:29 3552822
23:09:29 2960685
23:09:29 7551502
23:09:30 cyc2 0
23:09:30 3552822
23:09:30 2960685
23:09:30 7551502
23:09:30 R
23:09:30 Rfu
23:09:31 Rlabel
23:09:31 Ren
23:09:32 5658198
23:09:32 yeah 1
23:09:33 nope
Видно, что программа заходит в "R-условие", Rfu и Rlabel печатаются внутри функции Rsub, затем проверяется условие, что некторорая кнопка "1" горит (если 56..., то тусклая), кнопка оказывается тусклой, внутрь условной конструкции не заходит, доходит до конца цикла, при этом, $check с помощью какой-то магии оказался 1.
Почему? У меня есть только одна гипотеза: интерпретатор переприсваивает $check значение даже если не заходит в условие. Но это очень странный подход. В чем моя ошибка?
P.S
Вообще, грустно без привычных сердцу "return", "continue" и "break" (