Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In with Facebook Sign In with Google Sign In with OpenID

Categories

We have migrated to a new platform! Please note that you will need to reset your password to log in (your credentials are still in-tact though). Please contact lee@programmersheaven.com if you have questions.
Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Looping a script

alcymartalcymart Posts: 2Member
I am a newbie in programming and I started working with Sikuli open source package and uses Python language.

I would like my image match finding script posted below to repeat from the beginning once it reaches the end without user intervention. Here is what I have and the last line I commented, but its empty as far as repeating the script line codes?

# --------------------------------------------
# functions to be used in different situations
def captureSymbol(i = 0):
r = other[i]
x = r.x + sbMarginLeftRight
w = r.w - 2 * sbMarginLeftRight
y = r.y + sbMarginTopBottom
h = r.h - 2 * sbMarginTopBottom
r = Region(x, y, w, h)

return capture(r)

def captureLeftSmallest():
# capture the image to search
# we have to try to get the smallest capture possible
# since the probe and the target have different positions
# this can be set fixed, if it is always the same
# find the bottom of image
greyBelow = "1354183324452-1.png"
g = left.find(greyBelow)
#g.highlight(1)
while True:
g1 = g.above(sbHeight-g.y)
g1.x -= 4; g1.w += 8
g1 = g1.exists(greyBelow)
if not g1: break
g = g1
#g.highlight(1)
b = g.y

# find the left side of image
greyLeft = "1354183672313-1.png"
g = left.find(greyLeft)
#g.highlight(1)
while True:
g1 = g.right(left.w - g.x)
g1.y -= 4; g1.h += 8
g1 = g1.exists(greyLeft)
if not g1: break
g = g1
#g.highlight(1)
l = g.x + g.w

# define the smallest possible image region
symbol = Region(l, b - 60, 50, 60)
#symbol.highlight(3)
return capture(symbol)

def checkCells(imgSymbol, start = 0):
# find the cell containing the symbol
match = None
for i in range(start, len(other)):
if other[i].exists(imgSymbol, 0):
match = other[i]
break
if not match: return None

return match
# end function area
# ------------------------------------------------------------


# ----------------------- start of main workflow -------------

# this is based on surfbar6
# to run this script, surfbar6 must be visible on the screen

#Wait for counter


# Speed up mouse
Settings.MoveMouseDelay = 0
# find the position
imgBase = "1354182180938.png"
top = find(imgBase)


# get the surfbar
sbHeight = 85
sb = top.below(3).below(sbHeight)

sbMarginTopBottom = 20
sbMarginLeftRight = 20
leftWidth = 65
# get the area of the left symbol
x = sb.x + sbMarginLeftRight
w = leftWidth - 2 * sbMarginLeftRight
y = sb.y + sbMarginTopBottom
h = sbHeight - 2 * sbMarginTopBottom
left = Region(x, y, w, h)


# setup the regions for the others
numCells = 4
oWidth = (sb.w - leftWidth)/4
other = []
for i in range(numCells):
x = sb.x + leftWidth + i*oWidth - 4
other.append(Region(x, sb.y, oWidth+8, sbHeight))
for r in other:
pass


found = checkCells(capture(left))
if not found:
for i in range(numCells - 1):
symbol = captureSymbol(i)
found = checkCells(symbol, i+1)
if found: break
if not found: print "not found"; exit(1)
click(found)
type(Key.TAB,KEY_CTRL)
#Wait for counter on Surfbar to reach Zero
wait(1)

#Mouse speed
Settings.MoveMouseDelay = 0
# find the position
imgBase = "1354267496167-1.png"
fix = find(imgBase)


# get the symbol
rsym = Region(fix.x + fix.w + 8, fix.y + 14, 35, 35)
symbol = capture(rsym)


# get the surfbar
sbLeft = fix.right().find("1354267650780.png")


sbHeight = 45
sbWidth = 330
sb = Region(sbLeft.x + 4, sbLeft.y + 3, sbWidth, sbHeight)


sbMarginTopBottom = 20
sbMarginLeftRight = 20

# setup the regions for the others
numCells = 4
oWidth = (sb.w)/4
other = []
for i in range(numCells):
x = sb.x + i*oWidth - 4
other.append(Region(x, sb.y, oWidth+8, sbHeight))
for r in other:
pass


found = checkCells(symbol)
if not found: print "not found"; exit(1)
click(found)
type(Key.TAB,KEY_CTRL)
wait(12)
#Repeat from beginning
Sign In or Register to comment.