故事
微信出了跳一跳小游戏后没有多久就玩了一下,感觉很难(可能是运动太少)。没过多久网上就出了自动脚本。下载后,简单修改运行,最高调到了七千多分。然后,微信把我的成绩给删了。我猜应该是数据离群太明显造成的。这样一来就产生了一个需求--控制分数。
脚本
def match(src, template): #判断两张图片的最大相似度 src带判断的图片 template模板
image_matched = cv2.matchTemplate(src,template,cv2.TM_CCOEFF_NORMED) #模板匹配
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(image_matched) #获取匹配结果
return maxVal #最大值
def readNumber(): #读取分数
im = cv2.imread("./1.png") #“1.png”为屏幕截图 原来的程序就有
h,w,c = im.shape
numberImage = im[236:236+94,144:w] #图片截取有数字的部分
grayImage = cv2.cvtColor(numberImage,cv2.COLOR_BGR2GRAY) #灰度处理
retVal,image = cv2.threshold(grayImage,85,255,cv2.THRESH_BINARY) # 二值处理
number = 0
for i in range(0,9):
oneBit = image[0:94,(i*92):(i*92+74)] #截取一位数字
index = 0
same = 0
for j in range(0,9) :
res = match(oneBit,templates[j]) #从0-9数字字模中对比相似度 并找到最大的
if res > same :
same = res
index = j
if same < 0.5 : #如果最大相似度小于0.5 就没有匹配数字了
break
else:
number = number*10+index #进位后相加
return number
这两个函数主要解决了分数读取的问题。整个代码逻辑的基础是跳一跳小游戏使用了 04B_03B 这个字体 每个字的大小都是一样的。通过固定的位置就可以准确获取单个文字。opencv2 提供的图片对比计算速度还可以。
具体分数控制,就因人而异了。代码源:https://github.com/caicai0/wechat_jump_game
网友评论