2007-12-19 16:17
zcj41000
QQ斗地主记牌器(作弊器)原理与实现
QQ斗地主记牌器(作弊器)原理与实现
作者:龙林 EMAIL:[email]dragon_hn@sohu.com[/email] WEB:[url]www.dragon-2008.com[/url]
玩了一阵子QQ斗地主游戏,无赖资质太差了,老是记不住牌,上网搜索了一下有关QQ斗地主记牌器,下载了几个,没想到这小东东居然还要注册,还要给注册费,气愤之余,自己在VC环境下做了一个,感觉不错,现将原理公布如下:
该记牌器采用图像识别原理,而不是通过网络截包的方式。
(1)获取当前QQ窗口图片,首先通过下列代码查找QQ斗地主主程序窗口:
CWnd *hwnd=FindWindow(NULL,"新斗地主");
然后通过BitBlt将窗口图片复制到内存CBitmap对象中,再通过代码:
m_BkBmp1.GetBitmapBits(length,pBuff);
获取图像的RGB数据。
(2)获取扑克牌位置
扑克牌的位置很好查看,因为扑克牌有边框,颜色为黑色,与背景色明显不同,另外牌的大小固定
(3)识别扑克牌
与“人脸识别”,“OCR”等不同,在获取扑克牌位置之后,识别扑克牌特别简单,因为扑克牌图像具有不变性,对2,3,4,5,6,7,8,9,10,J,Q,K,A等这些字符,通过统计可以发现,只要识别几个像素(特征点),就可以很快确定,下面是我识别的像素的特征点相对扑克牌左上角的坐标:
(4,4)
(6,4)
(10,4)
(5,9)
(8,9)
(10,9)
(4,15)
(7,15)
(10,15)
本来斗地主是不用识别花色的,不过为了对记牌结果进行校验,还是采用了花色识别,注意对同一个花色不同牌号可能存在不同的特征点
(4)识别牌局的开始与结束
实际上识别牌局开始就行了,牌局开始的时候主窗口会出现一个金色的“开始”按钮,程序中实际就是识别该按钮。
(5)结果显示
采用一个附于主窗口右上角的小窗口实现
[[i] 本帖最后由 zcj41000 于 2007-12-19 16:25 编辑 [/i]]