diff --git a/ConfigManager.py b/ConfigManager.py index 562da76..745daaa 100644 --- a/ConfigManager.py +++ b/ConfigManager.py @@ -50,11 +50,16 @@ def selectConfig(self): print("\t描述 : - {}".format(config.configData["description"])) index += 1 - i = int(input()) - if i is None: + i = input() + if i is None or i == "": i = 0 - config = configs[i] - return config + try: + i = int(i) + config = configs[i] + return config + except ValueError: + print("输入的序号有误!") + sys.exit() configManager = ConfigManager() diff --git a/README.md b/README.md index e388e0d..ab75222 100644 --- a/README.md +++ b/README.md @@ -66,8 +66,6 @@ > + `loopDelay`:浮点数,每一轮图片比对之间的间隔时间 > + `targetList`:字符串数组,规定配置文件中有哪些target组,必须要有一个`mainTargets`组否则无法运行 > + `mainTargets`:脚本默认会在这个目标组里查找图片,详细介绍见下文,可定义其他的目标组 -> + ~~`summary`:字典类型,目前用于记录统计信息,预设`key-value`对,可以通过`action`来读取和赋值~~ -~~PS:summary由@snyssss大佬提出,本意用于作为全局变量来统计信息,但全局变量的引入原本已在计划内,作用应不限于统计信息,因此后续可能会将其更名。~~ `mainTargets`代表这个你想要脚本进行识别的对象,它是一个数组,数组中存放的是一个个的`target`,`target`是一个对象,它有以下字段: @@ -75,6 +73,7 @@ > + `path`:字符串,`target`存在的截图的文件名,不可省略,只要文件名即可,不支持任何形式的路径 > + `area`:四维向量,`target`在截图文件中的具体位置,不可省略 > + `similarityThreshold`:浮点数,相似度阈值,可以省略,只对单个`target`有效,未指定时适用全局相似度,否则适用指定相似度 +> + `colorRatio`:浮点数0~1,默认为0,代表使用图片比对时的颜色占比,通常情况下最好不要使用,遇到两张图片除了颜色不同但形状相似导致的误识别时可以适当提高该值,来增加颜色对识别影响的比重 > + `text`:字符串,识别到`target`时打印的信息,暂时不可省略 > + `description`:字符串,介绍该`target`功能,目前未实装功能,可以忽略 > + `actions`:对象数组,数组中存放的是一个个`action`对象,识别到`target`时会执行的`action`,如点击,统计等,`action`对象之间存在先后顺序 @@ -84,18 +83,14 @@ `action`对象的字段如下: > + `name`:字符串,`action`的名称,也即`action`的类型,不可省略,目前预设的类型及其介绍在下文能够找到 > + `args`:数组,`action`的参数,不同`action`的参数不同,有些可以省略 -> + ~~`info`:字符串,执行这个`action`之前会打印的信息,可以省略~~ + `action`类型及说明如下: > + `click`:在指定范围内的随机位置点击一次,接受一个四维数组作为参数;当不指定参数时,默认点击的位置为该`action`附属的`target`的`area`范围 > + `sleep`:等待指定时间,接受一位浮点数作为参数且不可省略,单位为秒 -> + ~~`summary`:操作`summary`全局变量,接受三个参数,参数一为`summary`中的`key`,参数二为操作方法`replace`代表赋值,`increace`代表原值加上参数三,参数三在以`$`开头时代表取WFHelper的对应属性值~~ > + `state`:能够操作全局变量,接受三个参数,参数一为操作方法`set`或`increace`,参数二为全局变量名,可自定义,参数三为操作数 -> + `subTarget`:去指定的子目标组进行一次目标匹配,并执行动作,目前写死只进行一轮匹配,匹配到第一个后执行action并返回。 +> + `changeTarget`:去指定的子目标组进行一次目标匹配,并执行动作,参数一为指定的目标组名称,参数二为`once`时,只去指定目标组进行一轮匹配,参数二为`loop`时,将永久替换当前检测的目标组,参数二可以省略,默认为`once` > + `info`:打印信息,打印参数一,并将剩余参数作为参数一的format输入,不会用就填一个参数就行了 -> + ~~`waitFor`:等待某个`target`的出现,等待过程中会只检测自己和目标`target`是否出现,并在每轮检测前点击屏幕最左上角,(目前必须)接受两个参数,参数一为字符串,值为等待目标的`name`值,参数二为浮点数,等待超时时间。该功能实现以及效果极其不优雅,不推荐使用,随时可能被删除。~~ -> + ~~`count`:统计该`action`所附属的`target`被检测到的次数,无参数~~ -> + ~~`pass`:什么也不做,无参数,可以配合`info`字段进行打印内容~~ > + `exit`:停止脚本,无参数 diff --git a/utils/ADBUtil.py b/utils/ADBUtil.py index 93e4399..4bac8e9 100644 --- a/utils/ADBUtil.py +++ b/utils/ADBUtil.py @@ -58,10 +58,6 @@ def touchScreen(self, area): random.randrange(area[1], area[3]) ) os.system(cmd) - # cmd = cmd.format( - # random.randrange(area[0], area[2]), - # random.randrange(area[1], area[3]) - # ) def setDevice(self, serial): # 用户没有指定设备 @@ -73,15 +69,20 @@ def setDevice(self, serial): serial = input("请输入设备IP和端口进行连接,默认127.0.0.1:5555\n") out = adb.connect(serial, timeout=3) Log.info(out) - elif len(devices) == 1: - serial = devices[0]._serial - Log.info("只检测到一台设备,默认与其建立连接") else: - Log.info("发现多台设备,请输入序号指定要连接的设备:") + Log.info("检测到已连接的设备,请输入序号指定要连接的设备:") for i in range(0, len(devices)): print("[{}] - {}".format(i, devices[i]._serial)) try: - serial = devices[int(input())]._serial + print("[-1] - 手动输入设备ip和端口进行连接") + index = int(input()) + if index == -1: + serial = "127.0.0.1:5555" + serial = input("请输入设备IP和端口进行连接,默认127.0.0.1:5555\n") + out = adb.connect(serial, timeout=3) + Log.info(out) + else: + serial = devices[index]._serial except ValueError: Log.error("请输入正确的序号!!!") sys.exit()