利用vs 2019和easyx图形库完成QQ游戏连连看的脚本

需要的工具:

  1. win 10
  2. vs 2019
  3. easyx
main.cpp
#include <stdio.h>
#include <easyx.h>#define ROW 11
#define COL 19HWND qqHwnd = NULL;
IMAGE image(800, 600);
HDC qqHdc, imgHdc;
IMAGE img[ROW][COL];
RECT rect;void ClearImage(IMAGE* pimg)
{SetWorkingImage(pimg);setbkcolor(RGB(48, 76, 112));cleardevice();SetWorkingImage(NULL);
}bool IsSimilar(IMAGE* pimg1, IMAGE* pimg2)
{//10 10SetWorkingImage(pimg1);COLORREF color11 = getpixel(3, 3);COLORREF color12 = getpixel(3, 6);COLORREF color13 = getpixel(6, 3);COLORREF color14 = getpixel(6, 6);COLORREF color15 = getpixel(5, 5);SetWorkingImage(pimg2);COLORREF color21 = getpixel(3, 3);COLORREF color22 = getpixel(3, 6);COLORREF color23 = getpixel(6, 3);COLORREF color24 = getpixel(6, 6);COLORREF color25 = getpixel(5, 5);if (color11 == color21 && color12 == color22 && color13 == color23 && color14 == color24 && color15 == color25)return true;elsereturn false;
}bool IsBlank(IMAGE* pimg)
{SetWorkingImage(pimg);COLORREF color11 = getpixel(2, 2);COLORREF color12 = getpixel(2, 7);COLORREF color13 = getpixel(7, 2);COLORREF color14 = getpixel(7, 7);COLORREF color15 = getpixel(5, 5);if (color11 == RGB(48, 76, 112) &&color12 == RGB(48, 76, 112) &&color13 == RGB(48, 76, 112) &&color14 == RGB(48, 76, 112) &&color15 == RGB(48, 76, 112))return true;elsereturn false;
}void GameInit()
{//初始化image对象qqHwnd = FindWindowA(NULL, "QQ游戏 - 连连看角色版"); //获取连连看窗口句柄if (qqHwnd == NULL){printf("没有找到游戏窗口\n");system("pause");exit(0);}qqHdc = GetDC(qqHwnd);         //获取游戏窗口绘图句柄imgHdc = GetImageHDC(&image);  //获取image绘图句柄BitBlt(imgHdc, 0, 0, 800, 600, qqHdc, 0, 0, SRCCOPY);  //调用winapi将窗口图像绘制到image中SetWorkingImage(&image);  //设置image位当前工作对象setorigin(15, 182);         //设置坐标原点for (int i = 0; i < ROW; i++)  //切割图像for (int j = 0; j < COL; j++)getimage(&img[i][j], j * 31 + 10, i * 35 + 10, 10, 10);  //缩小范围SetWorkingImage(NULL);
}bool IsExist()
{for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){if (!IsBlank(&img[i][j]))return true;}}return false;
}bool HorizConnect(int row1, int col1, int row2, int col2) {if (row1 != row2) {  //如果r1 != r2 return false;  //不连通}int maxCol = col1 > col2 ? col1 : col2;  //最大的列int minCol = col1 > col2 ? col2 : col1;  //最小的列if (maxCol - minCol == 1) { //两图块相邻return true;  //连通}for (int i = minCol + 1; i < maxCol; i++) {if (!IsBlank(&img[row1][i])) {return false;}}return true;
}bool VerticConnect(int row1, int col1, int row2, int col2) {if (col1 != col2) {return false;}int maxRow = row1 > row2 ? row1 : row2;int minRow = row1 > row2 ? row2 : row1;if (maxRow - minRow == 1) { //两图块相邻return true;}for (int i = minRow + 1; i < maxRow; i++) {// 水平方向遇到一个非空节点,就认为水平连接失败if (!IsBlank(&img[i][col1])) {return false;}}return true;
}bool OneTurnConnect(int row1, int col1, int row2, int col2)
{if (row1 == row2 || col1 == col2) {return false;  //不能在同一水平线,或同一垂直线上}// 第1个拐点int turnRow1 = row1;int turnCol1 = col2;// 第2个拐点int turnRow2 = row2;int turnCol2 = col1;if (IsBlank(&img[turnRow1][turnCol1]) && //第1个拐点是空节点HorizConnect(row1, col1, turnRow1, turnCol1) &&VerticConnect(turnRow1, turnCol1, row2, col2)) {return true;}if (IsBlank(&img[turnRow2][turnCol2]) && //第2个拐点是空节点VerticConnect(row1, col1, turnRow2, turnCol2) &&HorizConnect(turnRow2, turnCol2, row2, col2)) {return true;}return false;
}bool TwoTurnConnect(int row1, int col1, int row2, int col2)
{for (int i = 0; i < ROW; i++) {for (int j = 0; j < COL; j++) {if (!IsBlank(&img[i][j])) { // 寻找空节点continue;}// 双折拐点必须和起点(或终点)同一行(或同一列),// 否则不能作为双折拐点if (i != row1 && i != row2 && j != col1 && j != col2) {continue;}if (OneTurnConnect(row1, col1, i, j) &&(HorizConnect(i, j, row2, col2) ||VerticConnect(i, j, row2, col2))) {return true;}if (OneTurnConnect(i, j, row2, col2) &&(HorizConnect(row1, col1, i, j) ||VerticConnect(row1, col1, i, j))) {return true;}}}return false;
}bool CheckConnect(int row1, int col1, int row2, int col2)
{// 1. 起点和终点都不能是空白点if (IsBlank(&img[row1][col1]) ||IsBlank(&img[row2][col2]) ||// 2. 起点和终点不能是同一个点row1 == row2 && col1 == col2 ||// 3. 起点和终点必须是相同的图块!IsSimilar(&img[row1][col1], &img[row2][col2])) {return false;}if (HorizConnect(row1, col1, row2, col2) ||  // RedmiVerticConnect(row1, col1, row2, col2) ||OneTurnConnect(row1, col1, row2, col2) ||TwoTurnConnect(row1, col1, row2, col2)) {return true;}return false;
}void Match()
{//找第一个点 起点/终点for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){if (IsBlank(&img[i][j]))  //不管  0空的continue;//找下一个//找下一个for (int m = i; m < ROW; m++){for (int n = 0; n < COL; n++){if (IsSimilar(&img[i][j], &img[m][n])) //找到2个一样{if (CheckConnect(i, j, m, n))  //判断是否连通{//鼠标移动到起点上。SetCursorPos((rect.left + 15 + j * 31) + 10, (rect.top + 182 + i * 35) + 10);//鼠标点击一下起点。mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//Sleep(20);//鼠标设置到终点。SetCursorPos((rect.left + 15 + n * 31) + 10, (rect.top + 182 + m * 35) + 10);//鼠标点击一下终点。mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);ClearImage(&img[i][j]);ClearImage(&img[m][n]);//Sleep(20);}}}}}}
}int main()
{GameInit();GetWindowRect(qqHwnd, &rect);SetForegroundWindow(qqHwnd);Sleep(1000);while (IsExist())Match();return 0;
}

QQ游戏连连看的脚本相关推荐

  1. 自制 QQ游戏 连连看 外挂 ~~

    这几天期末考,完全没有考试的心情,又无聊到玩起连连看,可惜输得太多,非常不爽,于是自己做个连连看外挂玩一下.网上有很多连连看的外挂可以下载,不过自己做一个来用,感觉自然不一样,毕竟还是学计算机的嘛~~ ...

  2. MySQL和java连连看_用 JAVA 开发游戏连连看(之一)动手前的准备

    JAVA ,相信大家也不会陌生了吧, JAVA 是一门相当优秀的语言.目前 JAVA 领域 J2EE . JSP . STRUTS 等技术不知有多么的热门,他们的主要用途是用来进行企业开发, J2ME ...

  3. 多关卡连连看php源码_【Ctrl.js】快手小游戏-连连看源码

    [JavaScript] 纯文本查看 复制代码//--------------------------------------------------------------------------- ...

  4. 转发 :QQ游戏百万人同时在线服务器架构实现

    QQ游戏于前几日终于突破了百万人同时在线的关口,向着更为远大的目标迈进,这让其它众多传统的棋牌休闲游戏平台黯然失色,相比之下,联众似乎已经根本不是QQ的对手,因为QQ除了这100万的游戏在线人数外,它 ...

  5. 美味连连-QQ游戏辅助-简单实用的QQ游戏美味连连辅助(非外挂)

    这是2013年最好玩的悠闲游戏"美味连连"的辅助软件, 个人认为是目前最好用的QQ游戏"美味连连"辅助软件! 本程序由我原来写的"QQ连连看辅助&qu ...

  6. QQ游戏外挂制作教程 (对对碰)

    这些日子,QQ游戏外挂是风光了一阵.俄罗斯方块,连连看,对对碰这些游戏的外挂层出不穷.其实这一类外挂的原理大体都是一样的.下面我就以QQ游戏对对碰外挂作为例子阐述一下QQ外挂的制作原理.       ...

  7. QQ游戏百万人同时在线服务器架构实现

    QQ游戏于前几日终于突破了百万人同时在线的关口,向着更为远大的目标迈进,这让其它众多传统的棋牌休闲游戏平台黯然失色,相比之下,联众似乎已经根本不是QQ的对手,因为QQ除了这100万的游戏在线人数外,它 ...

  8. java游戏开始被流星_用 JAVA 开发游戏连连看(之一)动手前的准备

    JAVA ,相信大家也不会陌生了吧, JAVA 是一门相当优秀的语言.目前 JAVA 领域 J2EE . JSP . STRUTS 等技术不知有多么的热门,他们的主要用途是用来进行企业开发, J2ME ...

  9. Unity3D 游戏引擎之脚本实现模型的平移与旋转(六)

    Unity3D 游戏引擎之脚本实现模型的平移与旋转 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/ar ...

  10. [Unity C#教程] 游戏对象和脚本

    文章转载自:https://www.cnblogs.com/UnityYork/p/7704803.html [Unity C#教程] 游戏对象和脚本 博主最近在学习Unity,发现一个英文教程很好. ...

最新文章

  1. 亮剑.NET的系列文章之.NET实现三层架构(三)
  2. python爬取疫情信息html.xpath p标签_python xpath 如何过滤div中的script和style标签
  3. ubuntu 16.04 连接 阿里云服务器
  4. 多个线程访问统一对象的不同方法_分析| 你未必真的了解线程安全,别骗自己,来看下怎么实现线程安全...
  5. 8 仓储单位类型E1对于物料xxxxxx没有维护
  6. Magento去除前台URL中显示的index.php
  7. Java调用Tuxedo方案浅析
  8. 常见职位的英文简称_英语面试常见的50大问题及应对技巧
  9. Mybatis教程-实战
  10. 含泪推荐几款超级好用的软件
  11. 网狐荣耀代码通读一----登录服务器
  12. 软件测试用例.范文,软件测试用例模板范文
  13. DAY 3 字符串、列表、字典练习 - 班级按成绩分组小程序快递分拣小程序
  14. mysql6.2中文补丁_2.6. 在NetWare中安装MySQL - MySQL 中文手册
  15. 每日一题之 781. 森林中的兔子
  16. 虚拟机服务器扩容,vmware虚拟机 ubuntu根目录磁盘扩容
  17. The DiskSpace quota of /five is exceeded: quota = 4096 B = 4 KB but diskspace consumed = 402653184
  18. 树莓派:双色LED灯实验
  19. Linux下基于GTK人脸识别界面设计
  20. S32K144的FLASH中的SDK函数(FLASH_DRV_EraseSector)不能正常执行

热门文章

  1. gtasa手机版android7.1,圣安地列斯psp移植版
  2. libcurl的封装,支持同步异步请求,支持多线程下载,支持https(z)
  3. Crystal Reports 2008|Crystal Reports 2008破解版下载
  4. 对flashsky印象最深的一段话
  5. 谷歌插件如何下载到本地
  6. 记录一次线上mysql事务隔离级别引发的思考
  7. java百度地图离线LBS_百度地图之离线下载功能
  8. 微信语音怎么转发给别人_微信怎么把语音转发给别人?看看网友怎么说?原来方法这么简单...
  9. html生物代码,方舟生存进化全生物代码
  10. Xcode9 Could not receive a message from the device