这段时间休假在家,无聊的时候玩了会qq的对对碰游戏,以前用过网友阿东的qq对对碰外挂,但是阿东的外挂在对对碰游戏改版后好像不好使了,正好自己也想重新写一个,于是开始动手。
一.思路
1.获取游戏窗体句柄。
  这个很简单,用FindWindow()即可

2.获得游戏的每一个动物单元的信息,说白了就是获取游戏窗口的颜色值。
  这个稍微麻烦点,获得游戏区域的起始点坐标(第一个动物单元的左上角),我在window自带的画图里可以得到是(269, 95)。qq游戏作者这次耍了个花招,最外层的动物单元的宽高比原来要少一个像素,所以有些外挂获取颜色时会导致出现偏差所以失效,就是因为这个才导致一些旧的外挂不能正常运行。具体的每个单元像素值见下图。
    第一行,最后一行的高要少一个像素
    第一列,最后一列的宽要少一个像素
有了游戏区域的起始坐标,根据每个单元的高宽可以获取每个动物单元的起始坐标,就开始取每个单元的是什么动物了,我取相对于每个动物单元的左上角的偏移(x:12,y:24)点处的颜色,这个是个体力活,有耐心就行,在画图程序中把图片放大了后,找到不同的七个动物计算每个动物单元取颜色的像素点然后用取颜色工具取其颜色值,但是注意,最外一层的偏移要根据所处位置宽或高相对要少一个像素,程序中取颜色时的偏移也要减去一个像素,得到不同动物的颜色值后就可以开始写程序了。
   (ps:关于截图:可以用Alt + 截屏键来截取当前窗口,不会把整个屏幕都截下来)

3.遍历每一个动物单元计算能够进行消除的动物单元。
定义一个(8*8)的二维数组,存放每个动物单元的动物属性
enum ANIMALCELL{AC_NONE, AC_CATTLE, AC_MonKEY, AC_CHICK, AC_DOG, AC_FROG, AC_CAT, AC_PANDA};
ANIMALCELL m_arrCells[8][8]; //!< 动物单元数组

//! 获取指定坐标点的动物信息
/*!
/param[in] pt 坐标点
/return 动物信息
*/
ANIMALCELL CDDBLayout::GetAnimal(CPoint pt)
{
ANIMALCELL ac = AC_NONE;
switch ( ::GetPixel(m_hdc, pt.x, pt.y) )
{
case RGB(248, 244, 240): // 牛
ac = AC_CATTLE;
break;

case RGB(128, 76, 24): // 猴子
ac = AC_MonKEY;
break;

case RGB(248, 248, 232): // 鸡
ac = AC_CHICK;
break;

case RGB(104, 108, 104): // 狗
ac = AC_DOG;
break;

case RGB(56, 248, 56): // 青蛙
ac = AC_FROG;
break;

case RGB(0, 0, 0): // 熊猫
ac = AC_PANDA;
break;

case RGB(144, 144, 144): // 猫
ac = AC_CAT;
break;
default:
break;
}

return ac;
}
重点就在上面的参数CPoint pt,由于最外层的动物单元宽或高少一个像素,所以根据行、列情况取颜色时的偏移量X或偏移量Y也要根据情况减少一个像素。

4.根据步骤三得到的动物单元,模拟鼠标操作。
  得到每一个动物单元的动物并填充完m_arrCells[8][8]里的每个单元后,就可以对m_arrCells[8][8]进行遍历,找到能消除的动物单元就行了。
  算法部分太长了,就不贴出来了,基本和阿东的类似,是一种比较笨的方法,简单说一下,下面列举了横向的几种(纵向的也类似)能进行消除的情况,相邻的A B 就是可以进行消除的单元。
A A BA

A B AA

A
A B A

A B A
  A

A
A A B

A A B
    A

A
B A A

B A A
A

只要对数组进行遍历,满足上面的情况就表示找到能消除的两个单元。换算成坐标执行ClearUp就行了。
执行消除操作如下,即向游戏窗口发送鼠标消息,此处是直接拿的阿东的代码,注意此处采用的模拟鼠标拖拽的消息,要比直接向两个位置发送单击的消息要好,大家可以想想为什么?
void CDDBUtilEx::ClearUp(CPoint pt1, CPoint pt2)
{
// 模拟鼠标操作
::PostMessage(m_hTarget, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(pt1.x, pt1.y));
::PostMessage(m_hTarget, WM_MOUSEMOVE, MK_LBUTTON, MAKELPARAM(pt2.x, pt2.y));
Sleep(100);
::PostMessage(m_hTarget, WM_LBUTTONUP, 0, MAKELPARAM(pt2.x, pt2.y));
}

关键的地方就这么多了,程序虽小,我在程序中仍用了两个类,
分别是CDDBUtilEx CDDBLayout
CDDBLayout负责取颜色、坐标换算、算法相关部分的核心工作
CDDBUtilEx只是使用CDDBLayout类进行工作,并向外界(对话框)提供外挂功能,CDDBLayout对于外界是透明的,,这样下次如果对对碰游戏再做什么改动的话,只需要修改CDDBLayout内的相关功能,和界面部分不用做任何改动。

附:原来阿东的程序中hook了游戏的sleep()函数,能够提高游戏速度,但是在新的对对碰游戏中我试了hook了Sleep()函数,却不能提高游戏速度,这一点游戏可能也做了修改。另外,以前的对对碰游戏会判断鼠标消息是来自鼠标硬件还是模拟的鼠标消息来识别玩家是否采用外挂,新版的对对碰游戏却取消了此判断,不知道为了啥?

~QQ新版对对碰游戏外挂的制作方法~相关推荐

  1. Unity 简易的对对碰游戏

    游戏规则:制作对对碰游戏,在4X4地图上随机生成8对不同(形状)的物体,第一次点击被选中的物体会变红色,第二次点击相同物体,则两个物体共同消失,第二次点击是不同物体则第一个物体变回原来的颜色,再次点击 ...

  2. 用CE来找出对对碰游戏 坐位号基址,棋盘数组基址 并把它读出来

    用CE来找出对对碰游戏 坐位号基址,棋盘数组基址 并把它读出来 1.预备知识    4种数据类型    字节 Byte=00-FF                           0-255   ...

  3. java对对碰游戏设计报告_手把手带你用Java打造一款对对碰游戏(下篇)

    上篇文章介绍了对对碰游戏的理论部分和介绍了JLabel.JButton.JPanel.ImageIcon.JTextField.JProgressBar等组件的基本使用,介绍了进度条(JProgres ...

  4. 对对碰java_Java开发学习之用Java打造一款对对碰游戏(下篇)

    本文主要向大家介绍了Java开发学习之用Java打造一款对对碰游戏,通过具体的内容向大家展现,希望对大家Java开发的学习有所帮助. 在之前的文章介绍了对对碰游戏的理论部分和介绍了JLabel.JBu ...

  5. 用90%的c语言开发对对碰游戏,希望大家指点哈

    用90%的c语言开发对对碰游戏,希望大家指点哈 **还有部分是c++语言哈**第一次写博客哈,有什么不足望大家指出我能写出来也参考网上的一些代码哈 #include <iomanip> # ...

  6. Java课设对对碰_第11章对对碰游戏(图形版)(Java游戏编程原理与实践教程课件).ppt...

    游戏界面和相关图片素材 11.3 程序设计的步骤 11.3.1 设计游戏窗口类(GameRoom.java) 游戏窗口类GameRoom实现游戏全部功能,继承JFrame组件实现的.是由上方Panel ...

  7. C++开发对对碰游戏

    相信大家都玩过开心消消乐,对对碰游戏类似于开心消消乐,利用C++语言开发的小游戏,编译器vs2010版本开发. #include "stdafx.h" #include <g ...

  8. MATLAB学习笔记 实现超简单对对碰游戏

    对对碰游戏,通过匹配相同的图像来赢得游戏.使用 uicontrol 中的按钮和一些图像来实现这个游戏. 设计有一个 2 x 2 矩阵,其中隐藏了 2 对等效图像(读取文件夹下的图片,至少含有两张rgb ...

  9. C语言实现对对碰游戏(附完整源码)

    C语言实现对对碰游戏 #include <graphics.h> #include <fstream> #include <strstream> #include ...

最新文章

  1. 液晶模块 LM6063A接口转接
  2. js node 打包mac应用_混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用
  3. tf.reduce_max用法
  4. 巨额流量费其实可以避免
  5. 线程的状态和基本操作
  6. 在myql sqlserver 快速找到带有关键字的表
  7. 【自然框架】n级下拉列表框的原理
  8. 怎么实现单击span时给span添加边框
  9. php html ubb,PHP写的UBB代码转换HTML代码
  10. Java 求100以内的质数(素数)
  11. 国开文学英语赏析 2021春(2021年7月)
  12. 离散数学 --- 特殊关系 --- 等价关系与集合的划分
  13. Android 虚拟分区详解(三) 分区状态变化
  14. 递归算法到非递归算法的转换
  15. 深度学习中GPU的作用
  16. 关于win10 小爱同学UWP版本的安装
  17. 关于我们 - 飞客旅行网 - 最大的中文酒店常客,航空常客,信用卡讨论网站!...
  18. Aandroid 图片加载库Glide 实战(一),初始,加载进阶到实践
  19. C++类和结构体 | 类与结构体类型
  20. 谷歌浏览器背景颜色设置为豆沙绿保护色详细教程!

热门文章

  1. “Adobe Illustrator CS6 已停止工作”的问题
  2. 电网计算机专业分数线,这几类大学受“国家电网”青睐,录取分数线不高,毕业就有铁饭碗...
  3. 手把手教你搭建MinIO分布式集群
  4. Linux Ubuntu镜像下载
  5. 推出 5 年后,微软想用设计「全面复兴」Windows 10
  6. 富文本框回显乱码问题解决
  7. mysql flaskalchemy_Flask使用Flask-SQLAlchemy操作MySQL数据库
  8. 一文总结最新可微NAS研究路线图
  9. Chrome、safi、IE浏览器通用上一步、下一步代码
  10. Anaconda安装scikit-learn库报错 解决方案