"""狂鼠之家好友矿鼠一键喂养循环。""" import time from .engine import WorkflowError class FeedMiceRunner: def __init__(self, desktop, matcher, flow, region_provider, log=print, timeout=12): self.desktop,self.matcher,self.flow=desktop,matcher,flow; self.region_provider,self.log,self.timeout=region_provider,log,timeout def observe(self): shot=self.desktop.screenshot(); region=self.region_provider(shot); return shot,region,self.matcher.frame(shot,region) def wait(self,*names): end=time.monotonic()+self.timeout; previous=None; stable=0 while time.monotonic()=2:return found,shot,region,frame time.sleep(.25) raise WorkflowError('未识别到预期页面 '+ '/'.join(names)+',已停止。') def click(self,point,obs): _,shot,region,_=obs if self.region_provider(shot)!=region:raise WorkflowError('识别后游戏窗口移动,已停止,请重新运行。') self.desktop.click(point,region,shot.size,hold=.8) def action(self,name,obs):self.click(self.flow['clicks'][name],obs);self.log('已执行:'+name) def location(self,frame,key): spec=self.flow[key]; score,loc=self.matcher.locate(frame,spec) if score