Question #645818 on Sikuli changed: https://answers.launchpad.net/sikuli/+question/645818
Description changed to: I seem to have run into a huge problem in my code : A mini game requires me to press a certain keys displayed on the screen,the problem is the background is ever changing . So i minimised the region to a very small area and run multiple searches before sorting them in the right order. The duplicates are found by measuring the x axis distance and if its less then 20 take the match with the most similarity score. The problem is i am still getting duplicates if the search is run more than once, and it is essential the search runs more than once since, I am trying to minimise false matches in the area ,so that the right keys are pressed. The code is also meant to be designed for speed with the operations being done before 10 seconds.. Code import math import time import re import itertools ######################SETTINGS############################### Settings.ObserveScanRate = 5 ############################################################# up =[] down =[] leftt =[] rightt =[] ml = Location(724, 386) def distanceC(x, y): if x >= y: result = x - y else: result = y - x return result ################################DUPLICATE FINDER##################################### def DuplicateFinder(C): mylist = C global xcordsFinal xcordsFinal = [] for x,y in itertools.combinations(mylist, 2): print("Printing Distance\n") print((distanceC(x.getX(),y.getX()))) if(distanceC(x.getX(),y.getX())<20): print("Distance is less than 20!\n") if (x.getScore() == y.getScore()): xcordsFinal.append(x) if (x.getScore() > y.getScore()): xcordsFinal.append(x) else: if(x.getScore() < y.getScore()): xcordsFinal.append(y) else: xcordsFinal.append(x) xcordsFinal.append(y) return xcordsFinal def DISTANCE(match): x = math.fabs(match.getCenter().x - ml.x) y = math.fabs(match.getCenter().y - ml.y) distance = int(math.sqrt(x * x + y * y)) return distance ##############################SOLVER FUNCTION################################# def Solver(): global Z1 global C C =[] Target= Region(481,112,959,605).find(Pattern("4-2.png").similar(0.46)) Z1 = Region(Target.getX(),Target.getY(),368,60).offset(78,30) Z1.setAutoWaitTimeout(0.2) arrows = [Pattern("UP-1.png").similar(0.75),Pattern("DOWN-1.png").similar(0.77),Pattern("LEFT-1.png").similar(0.74),Pattern("RIGHT-1.png").similar(0.74)] for xzx in range(0,6): print(x, "th Run") for y in range(len(arrows)): global up global down global leftt global rightt try: Z = list(Z1.findAll(arrows[y])) if(y==0): up = up+Z if y ==1: down = down+Z if y==2: leftt = leftt +Z if y==3: rightt = rightt+Z except FindFailed: pass up = list(set(up)) down = list(set(down)) leftt = list(set(leftt)) rightt = list(set(rightt)) C = C+up+down+leftt+rightt print("Before Clear:") print(C) XYYY = DuplicateFinder(C) print("Before SET:") print(XYYY) XYYY = set(XYYY) print("Printing XYY AFTER CLEAR") print(XYYY) print("Printing Final Values") CZ = sorted(XYYY, key=DISTANCE) print(CZ) #for x in range(len(C)): # C[x].highlight(1) #################CONVERSION PART################# f = open("C:/Users/gracious/Desktop/yolo.sikuli/test.txt", "w") for item in CZ: f.write("%s\n" % item) f.close() with open("C:/Users/gracious/Desktop/yolo.sikuli/test.txt") as file: for line in file: line = line.strip() #preprocess line if("10x8" in line): type("W") print("W") wait(.1) if("13x15" in line): type("A") print("A") wait(.234) if("9x8" in line): type("S") print("S") if("16x15" in line): type("D") print("D") wait(.342) del C[:] del up[:] del down[:] del leftt[:] del rightt[:] Solver() Any Help would be appreciated ,pulling my hair our here after hours of testing. -- You received this question notification because your team Sikuli Drivers is an answer contact for Sikuli. _______________________________________________ Mailing list: https://launchpad.net/~sikuli-driver Post to : sikuli-driver@lists.launchpad.net Unsubscribe : https://launchpad.net/~sikuli-driver More help : https://help.launchpad.net/ListHelp