持续无聊中,看到别踩白块儿觉得这个脚本貌似比较好写。
需要用到的python 库如下
import pyautogui
from PIL import ImageGrab, Image
import win32gui,win32api,win32con
打开4399,选一个别踩白块的小游戏,点击全屏固定屏幕,按下F12获取该窗口的标题
由于我用谷歌浏览器,所以titile = u"别再踩白块了_别再踩白块了html5游戏在线玩_4399h5游戏-4399在线玩 - Google Chrome"
随便选一个模式,进去后是这样的:
只要我们点击一下黑块,上面一行就会下来,所以我们只要追踪倒数第二行就行,一直判断倒数第二行到底点击第几个方块。
利用picpick软件获取倒数第二行的位置信息,将其截取成图片
截取图片之后还要对图片进行二值化处理,方便统计,如下所示:
接着上面截取的图片做4次像素遍历统计,这里我们不用将图片分成4块,只需要在特定位置截取4个20*20的矩形,判断这4个矩形中谁的黑色像素占比最大,谁就是黑块,当然我们也可以把尺寸截取小一点10*10, 5*5都行,目的只是为了快速计算,毕竟这里面有一个模式是速度逐渐增大的,所以哈哈,为了破纪录不择手段。如下所示
知道第几个方块是黑块就用鼠标点击那个位置就好了!
传入一个runNum参数,控制程序执行次数,由于追求速度,就没用time.sleep()函数
完整代码如下,很短欸,60多行:
import pyautogui
from PIL import ImageGrab, Image
import win32gui,win32api,win32con
import cv2
import numpy
import time
pyautogui.FAILSAFE = False
class GameAssist:
# 初始化
def __init__(self, winName):
self.handwin = win32gui.FindWindow(0, winName)
if not self.handwin:
print("无法找到窗口")
exit()
# 放置最前
win32gui.SetForegroundWindow(self.handwin)
# 截取的四个块位置
self.fourRect = (523, 474, 843, 583)
# 从哪里开始统计黑色像素,相对坐标
self.localFourPos = ((20, 20), (100, 20), (180, 20), (260, 20))
# 每个统计尺寸(宽、高)
self.localSize = (20, 20)
# 根据图片判断按那个方块
def img2ans(self, img):
# 二值化
img = img.convert('1')
# 四个方块黑色占比
scoreList = []
# 分别遍历四个区域
for idex in range(4):
# 黑色像素占比
blackScore = 0
for i in range(self.localFourPos[idex][1], self.localFourPos[idex][1] + self.localSize[1]):
for j in range(self.localFourPos[idex][0], self.localFourPos[idex][0] + self.localSize[0]):
if img.getpixel((j, i)) == 0:
blackScore += 1
scoreList.append(blackScore)
# 返回最大值的下标
return scoreList.index(max(scoreList))
# 主控制程序,runNum 执行次数
def master(self, runNum):
for num in range(runNum):
blockImg = ImageGrab.grab(self.fourRect)
ans = self.img2ans(blockImg)
#pyautogui.click(x=self.fourRect[0] + self.localFourPos[ans][0],
# y=self.fourRect[1] + self.localFourPos[ans][1])
pyautogui.click(x=self.fourRect[0] + self.localFourPos[ans][0],
y=self.fourRect[1] + self.localFourPos[ans][1] + 60)
#time.sleep(0.1)
pass
if __name__ == "__main__":
winName = u"别再踩白块了_别再踩白块了html5游戏在线玩_4399h5游戏-4399在线玩 - Google Chrome"
demo = GameAssist(winName)
demo.master(100)
以前4399给我带来很多乐趣,现在依旧哈哈,gif图演示,超级模糊