栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mame模拟器版大家来找碴外挂,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()

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


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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019281.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号