动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Delphi教程 ]的信息



本月文章推荐
.如何使用Delphi设计强大的服务器.
.在Delphi中利用CreateRemoteThre.
.制作从屏幕右下角逐渐弹出的消息.
.动态设置系统日期格式.
.Delphi数据库编程教程(八).
.使用Delphi开发多媒体播放音轨问.
.在delphi字符中包括单引号(').
.合理应用用户登录界面,用户登录.
.如何在程序中实现XP模式.
.发送电子邮件.
.Delphi的大Bug.
.修正XPMenu的两个Bug.
.在Delphi中ADSI创建Windows用户帐.
.Delphi图象截取编程示例(1).
.由数据库数据生成XML的方法(有源.
.远程控制篇:模拟按键.
.Delphi開發國際化應用程序.
.《Delphi面向对象编程思想》前言.
.Delphi之快速设计(程序设计篇).
.如何控制其他程序窗体上的窗口控.

扫雷外挂的设计与实现(一)

发表日期:2006-2-4 |


 

文/jorge

其实我不玩网络游戏的,所以对于外挂类程序也没什么好或坏的感觉,甚至平时基本不会想到这个概念。这个实验项目一开始称为“扫雷助手”,而究其技术含量,与现在真正实用的游戏外挂程序也没有可比性。设计它的意义,无非在于对某些Windows API的的进一步熟悉,使从未涉足过此领域的新手(当初的我自己)能够揭开某些“神秘的面纱”。之所以选择“扫雷”这个最经典的小游戏进行hack,一方面,使这个项目更贴近生活,更容易被理解,另一方面也可以最大化本人的成就感^_^,毕竟,在新手中,对扫雷的hack的探索似乎从来都没有停止过,从早期的修改.ini文件和注册表,到后来的Esc和xyzzy,无不体现着一代代人对这个目标的不懈追求^_^。而对于我们这些搞专业的来说,则应该有专业一点的方式,要有点技术含量!于是我做了这个叫MineAssistant的项目。

它的原理说来也不难,无非实时地替人做两件事:1。把一定是雷的方块标上雷的记号,2。把一定不是雷的方块点击开。至于轻易判断不了是不是雷的,还得靠你的运气。其实,扫雷游戏中,这两项最简单的操作绝对是占了绝大多数时间的,不妨看看实测的效果:我使用扫雷外挂的纪录是:初级、中级都1秒,高级4秒。(和修改注册表的相比还是差了一点,不过那个一点技术含量都没有,呵呵)


显然,这个实现过程涉及到了从一个程序操作另一个程序的窗口。这必须使用Windows API,主要的有下面几个:
 FindWindow
 GetDC
 GetPixel
 PostMessage

稍微有点基础的看也看得出来,本人对于扫雷进程的内部数据是一无所知的,对于当前雷区的状态信息的取得,都是通过最浅显最笨的方法,就是直接读取屏幕像素。而反馈的操作,也都是通过PostMessage简单的发送一条信息来模仿鼠标点击。这样,本程序就自然的分成了两个层次,一个是与扫雷窗口的接口层,一个是实现判断的算法层。若是有基础的人,在提示到这以后,应该就可以自己来实现它了^_^,但就本人的经验来看,还有一个难点,就是如何从一个个像素的取值来分析出每个方块是什么状态。难不成用模式识别?!!别紧张,当初本人看了别人写的象棋对战程序,也忐忑地问了一句:难道要用人工智能?对方笑答,没那么严重,说这个算法你也写得出来。——实际上,只要检查每个方块上一两个特定位置像素,就可以得知这个方块的性质。当然,怎样找到这一两个像素的位置,还是要费一番周折的。为此,我写了好几个临时程序,专门用来测量“扫雷”窗口的各种尺寸参数。基本原理是,用FindWindow和GetDC得到扫雷窗口的HDC,然后把整个画面写到一个.bmp文件中去,再用Windows画图将其打开,用放大镜放到最大倍数,然后……一个个像素地数!另外,还用ResHacker把扫雷程序中的位图资源提取出来,把小方块中所有像素用程序进行扫描,以找到方块内某个特定像素,靠其颜色足以区分各种方块(未挖开的空白,未挖开的插旗,未挖开的问号,和挖开的1~8的数字,和挖开的空白)。在这其中我郁闷地发现,任何一个像素都不可能完全区分它们,因为扫雷窗口上的颜色总共还没有那么多种。引入第二个像素是不可避免的,于是我用另一个位置的像素,首先区分是挖开的还是没挖开的,才算解决了这个问题。

另外,关于开发工具的选择。“程序员就像男人,编程语言就像女人,一般男人都想要很多女人,可没几个男人能真正了解一个女人”,这句话引自CSDN首页上曾看到的网友评论,本人当初也曾有过少年轻狂的时候,要了不少“女人”,以为女人越多真的越牛X,导致现在还对不少编程语言都一知半解。在做这个程序的时候,最了解的是Delphi,所以就用Delphi实现了。现在想来,Delphi确实是做此类程序的较好的选择。它和Windows底层有良好的互操作性,唯一不便则是,从MSDN中看到的WinAPI的声明都是C的,在Delphi中要稍微变换一下长相,而这些资料则是Borland所缺乏的。另外,再吹毛求疵一点,就是Delphi屏蔽了太多底层细节,使很多初学者冷丁与HDC等概念打交道时会陌生。但一般来说,这更像是使用者的毛病,而不是开发工具的。另外,C++也是个好选择,如果拿到今天,也许我更愿意用C++去实现它,C++配上wxWidgets,用来开发Windows应用程序真不是闹着玩的。但我一定不会喜欢用Java来实现它的,原因我想不必说大家也知道!

好,现在用Delphi开始扫雷外挂的开发之旅。首先,来看一下前面提到的,本人跋山涉水啊,翻山越岭啊,费尽心思搜集来的扫雷窗口资料。所有资料取自Windows XP下带的扫雷“版本5.1”。注意,WinXP下的扫雷与Win9x中的,窗口图形有点细微差别,这足以使该外挂在Win9x下无法正确运行。不过我最终还是不打算加进判断OS版本并采用两套不同参数的代码了,毕竟只是个实验项目!

实测数据(单位为像素):
=================================================================
每个小方块:宽=16,高=16
雷区的最大可能大小:宽=30个方块, 高=24个方块
从雷区的四边,到窗口客户区的四边,各有间隔,分别为:左=12,右=8,上=55,下=8
在每一个方块内,如下两个像素可用来判断该方块的性质(坐标为相对方块左上角得值):
 首先判断(0,0)处,若为clWhite,则为未挖开的方块,若为clGray,则为挖开的。
 若是未挖开的方块,可再判断(5,4),对应关系如下:
  clSilver:空白
  clRed:插旗
  clBlack:问号
 若是挖开的方块,可再判断(7,4),对应关系如下:
  clSilver:空白(相当于数字0)
  clBlue:数字1
  clGreen:数字2
  clRed:数字3
  clNavy:数字4
  clMaroon:数字5
  clTeal:数字6
  clBlack:数字7
  clGray:数字8
=================================================================

另外,雷区上方的“重开始”按钮的状态也是很重要的数据,对于它的判断,后面遇到的时候有详述。



上一篇:来点实用的,自己画带标题栏窗体,可当模态窗体样继承 人气:4233
下一篇:在Delphi中使用CreateOleObject方法对WORD文件进行操作 人气:4406
浏览全部Delphi的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-5 360安全卫士 V4.2.0.1004
2008-7-5 PHPDug v2.0 多国语言版
2008-7-5 乘风电影程序 v3.69 (SQL)
2008-7-5 乘风电影程序 v3.69
2008-7-5 wfTextImage文字图像组件 v1.5
2008-7-5 ZY music! v1.1.0705
2008-7-5 FavShop网店系统 v1.0
2008-7-4 天空网络电影系统SKYUC v2.5.1 B
2008-7-4 Drupal v7.x-dev Build 080704
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 GoodCalculator2.0版固件计算器
2008-7-5 RepoName源地址搜索工具 v1.21b
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 TouchCopy多媒体管理软件 v3.13完
2008-7-5 VideosTone视频铃声 v1.1汉化破解
2008-7-5 TouchPad触摸板 v4.44破解版
2008-7-5 VideosTone破解补丁 v1.0
2008-7-5 Feeds GoogleReader客户端 v0.4.3


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報