mame模拟器版大家来找碴外挂,python源码

  • Post author:
  • Post category:python


参考网络大神们的经验,写的一个mame模拟器版大家来找碴的外挂,

屏幕分辨率设置成1920*1080,

开mame模拟器之后得进入全屏幕,快捷键是alt+enter键

进入找碴的两个相同画面后,暂停游戏,默认键是P

alt+tab键弹出来,运行python外挂,

这时候不要动,外挂会自动找到游戏,自动找到5处不同并画图标出来,根据外挂画的图,自己再返回游戏,手动标出5处不同.

其实可以做的更完美一些,让python自动化操作,控制鼠标点不同.

不过我没耐心,懒得研究怎么弄了.

有时候截屏是黑屏,那就要重新运行一次外挂.

import win32gui
from PIL import ImageGrab 
import win32con
import cv2
import matplotlib.pyplot as plt
import imutils
from matplotlib.image import imread

#调用ssim函数
from skimage.metrics import structural_similarity

game_hwnd = win32gui.FindWindow("MAME", "MAME: 大家来找碴 [photoy2k]")
print(game_hwnd)  
win32gui.ShowWindow(game_hwnd, win32con.SW_RESTORE) 
# 强行显示界面后才好截图 
win32gui.SetForegroundWindow(game_hwnd) 
# 将游戏窗口提到最前  
# 裁剪得到全图 
game_rect = win32gui.GetWindowRect(game_hwnd)
src_image = ImageGrab.grab(bbox = None) 
src_image.show()  
# 分别裁剪左右内容图片 
left_box = (39, 261, 39+882, 261+772)
right_box = (999, 261, 999+882, 261+772)
image_left = src_image.crop(left_box)
image_right = src_image.crop(right_box) 
image_left.show() 
image_right.show()
image_left.save("image_left.png")
image_right.save("image_right.png")

print(type(image_right))
imageA = cv2.imread("image_left.png")
imageB = cv2.imread("image_right.png")
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)


#返回三个值
mssim, grad , S = structural_similarity(grayA, grayB, gradient=True,full=True)
'''
mssim:float
图像上的平均结构相似性指数。

grad:ndarray
im1 和 im2 [2]之间结构相似性的梯度。这仅在梯度设置为 True 时返回。

S:ndarray
完整的 SSIM 图像。这仅在full设置为 True 时返回。
'''
S= (S* 255).astype("uint8")

thresh = cv2.threshold(S, 0, 255,cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
for c in cnts:
        (x, y, w, h) = cv2.boundingRect(c)
        cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), thickness = 4)
        cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), thickness = 4)
cv2.waitKey(0)
cv2.imwrite(filename="Find_Different.png", img=imageB)

 
img = imread('Find_Different.png')
plt.imshow(img)
 
plt.show()

外挂找出来的不同效果如下:

在这里插入图片描述

在这里插入图片描述

尽量把蓝色鼠标箭头移到画面外,不然会把鼠标箭头的位置当成不同找出来



版权声明:本文为lmhopen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。