C语言连连看秒杀辅助

2023-05-16

图像处理第一课
连连看秒杀辅助

项目效果

 直接使用C语言,实现【连连看】最强辅助

  1. 项目分析

项目的技术核心

不是逆向,而是图像处理。

图像处理,更高维度的技术手段。

电影中的图像处理应用

无人机战争-电影-完整版视频在线观看-爱奇艺

 

现实中的图像处理应用

美军无人机斩首伊朗2号人物卡西姆·苏莱马尼少将

 

国内的图像处理应用

贵州天网抓捕犯人-仅需7分钟

 

项目原理:

1)截图游戏画面

2)图形处理

 

3)路径分析,找到可消除的方块

 

4)控制鼠标进行点击

项目实现

项目开发模板:

  1. 创建项目

使用任意版本的VS, 创建一个空项目。

  1. 配置OpenCV开发环境
  1. 安装opencv

安装后的目录类似如下:

 

  1. 配置项目的头文件包含目录

D:\opencv\build\include

D:\opencv\build\include\opencv

D:\opencv\build\include\opencv2

  1. 配置项目的库文件包含目录

D:\opencv\build\x86\vc12\lib

注意选择x86或者x64

  1. 配置项目的附加依赖项(静态库文件)

opencv_core249d.lib

opencv_highgui249d.lib

opencv_imgproc249d.lib

  1. 拷贝opencv的动态链接库到可执行文件目录

opencv_core249d.dll

opencv_highgui249d.dll

opencv_imgproc249d.dll

  1. 截图
  1. 截图准备

找到游戏窗口,将游戏放在左上角

使用spy++工具确定连连看游戏窗口的“窗口标题”

代码实现:

#include <stdio.h>

#include <Windows.h>

int main(void) {

printf("are you ready?\n");

system("pause");

//找到游戏窗口,将游戏放在左上角方便定位,然后截图

HWND hq = FindWindow(NULL, L"QQ游戏 - 连连看角色版");

RECT rect;

GetWindowRect(hq, &rect);

int w = rect.right - rect.left;

int h = rect.bottom - rect.top;

MoveWindow(hq, 0, 0, w, h, false);

Sleep(2000);

return 0;

}

  1. 截图

导入工具库tools.h 和 tools.cpp项目目录下:

使用工具库 中的getScreen()函数,来实现截屏功能。

Mat src = getScreen();

// 测试截图是否正确

namedWindow("Test", CV_WINDOW_AUTOSIZE);//创建窗口

imshow("Test", src);

waitKey(0); //显示图片窗口,直到有按键按下

测试成功后,把以上三行测试代码删除。

  1. 图像识别处理

定义全局变量 int  flagMap[11][19],把游戏区域的各个图片“数字化”。

int  flagMap[11][19] = { 0, };

自定义函数,实现图像数字化

准备好空白位置的图片: 

//图片左上角坐标

#define left_x 13

#define left_y 180

//每个小方块长宽

#define block_x 31

#define block_y 35

void picture_process(Mat src)

{

Mat vec[11][19];

memset(flagMap, 0, sizeof(flagMap));

int x_pos = left_x;

int y_pos = left_y;

// 切割各个小方块图片

for (int i = 0; i < 11; i++) {

for (int j = 0; j < 19; j++) {

Mat pic = src(Rect(x_pos, y_pos, block_x, block_y));

vec[i][j] = pic(Rect(5, 5, block_x - 7, block_y - 7));

// 测试截取后的小图片是否正确

//char name[32];

//sprintf_s(name, sizeof(name), "%d-%d.png", i, j);

//imwrite(name, vec[i][j]);

x_pos += block_x;

}

x_pos = left_x;

y_pos += block_y;

}

// 把图片数组转换为数字数组,相同的图片对应为一个最早出现这个图片的数组下标(下标加1)

for (int i = 0; i < 11; i++) {

for (int j = 0; j < 19; j++) {

if (flagMap[i][j] != 0) continue;

for (int m = 0; m < 11; m++) {

for (int n = 0; n < 19; n++) {

if (i == m && j == n) continue;

if (flagMap[m][n] == 0 && imgSame(vec[i][j], vec[m][n])){

flagMap[i][j] = i*19+j+1;

flagMap[m][n] = i*19+j+1;

}

}

}

}

}

// 去除空白方块

Mat blankImg = imread("empty.png");

for (int i = 0; i < 11; i++) {

for (int j = 0; j < 19; j++) {

if (imgSame(vec[i][j], blankImg)) {

int val = flagMap[i][j];

for (int m = 0; m < 11; m++) {

for (int n = 0; n < 19; n++) {

if (flagMap[m][n] == val) {

flagMap[m][n] = 0;

}

}

}

return;

}

}

}

}

打印数字化结果,用作调试用

void printMap() {

for (int i = 0; i < 11; i++) {

for (int j = 0; j < 19; j++) {

if (flagMap[i][j] == 0)

printf("    ");

else 

printf("%4d", flagMap[i][j]);

}

printf("\n");

}

printf("\n\n\n");

}

调用刚定义的函数,对游戏截图进行处理

Mat src = getScreen();

picture_process(src);

    printMap();

  1. 判断两个点是否可以消除

分析连连看的消除规则

使用工具库中的接口,提高开发效率:

tools.h

自定义函数,判断两点是否可以连接

// 判断是否能够连通

bool checkConnect(int row1, int col1, int row2, int col2) {

if (flagMap[row1][col1] == 0 ||  flagMap[row2][col2] == 0 || // 1. 起点和终点都不能是空白点

row1 == row2 && col1 == col2 ||  // 2. 起点和终点不能是同一个点

flagMap[row1][col1] != flagMap[row2][col2]) {            // 3. 起点和终点必须是相同的图块

return false;

}

if (shuiPingConnect((int*)flagMap, 19, row1, col1, row2, col2) ||  // Redmi

chuiZhiConnect((int*)flagMap, 19, row1, col1, row2, col2) ||

oneTurnConnect((int*)flagMap, 19, row1, col1, row2, col2) ||

twoTurnConnect((int*)flagMap, 11, 19, row1, col1, row2, col2)) {

return true;

}

return false;

}

  1. 匹配可连通的点,并自动点击消除

定义自动点击的时间间隔(速度)

#define DELAY_TIME  2

int match()

{

int ret = 0; //统计这次遍历消除的对数

for (int i = 0; i < 11; i++) {

for (int j = 0; j < 19; j++) {

if (flagMap[i][j] == 0) continue;

for (int m = 0; m < 11; m++) { //for (int m = i; m < 11; m++)

for (int n = 0; n < 19; n++) {

if (flagMap[m][n] == 0) continue;

if (m == i && n == j) continue;

if (flagMap[i][j] == flagMap[m][n]) {

if (checkConnect(i, j, m, n)) {

printf("消除:[%d][%d] - [%d][%d]\n", i, j, m, n);

printMap();

//system("pause");

ret++;

//鼠标操作 移动光标->暂停->单击左键->暂停->左键抬起->暂停

  SetCursorPos((left_x + j * block_x) + 10,
                                   (left_y + i * block_y) + 10);

Sleep(DELAY_TIME + rand() % DELAY_TIME);

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);

Sleep(DELAY_TIME + rand() % DELAY_TIME);

mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

Sleep(DELAY_TIME + rand() % DELAY_TIME);

SetCursorPos((left_x + n * block_x) + 10,
                                    (left_y + m * block_y) + 10);

Sleep(DELAY_TIME + rand() % DELAY_TIME);

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);

Sleep(DELAY_TIME + rand() % DELAY_TIME);

mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

Sleep(DELAY_TIME + rand() % DELAY_TIME);

                               //更新数据

flagMap[i][j] = 0;

flagMap[m][n] = 0;

}

}

}

}

}

}

return ret;

}

  1. 自动开玩

判断是否已经消除完毕

bool allKilled() {  // 方块是否已经全部消除

for (int i = 0; i < 11; i++) {

for (int j = 0; j < 19; j++) {

if (flagMap[i][j])

return false;

}

}

return true;

}

自动开玩

int  main(void) {

   ......

   while (1) {

int killCount = match();

if (allKilled()) {

break;

}

}

}

  1. 使用道具

某些情况可能又死局,此时就可以使用道具。

int chongPai = 2;

while (1) {

int killCount = match();

if (allKilled()) {

break;

}

if (killCount == 0 && chongPai > 0) {

SetCursorPos(653, 199);  //移动到变形道具位置

mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); //使用道具

Sleep(3000);

src = getScreen();

picture_process(src);

chongPai--;

}

}

  1. 项目拓展
  1. 全自动连连看辅佐,自动加入游戏,自动开玩。
  2. 绕开腾讯检测的QQ机器人
  3. 图像处理的高级应用:自动驾驶

C++和Python的纠结?

Python也能做图像处理(底层使用C++)

那到底该如何选择?

C/C++  &  算法  &  框架  &  产品级项目 => 大厂

C++为什么被黑?

因为很多人学不会,因为开发难度相对较大

90%的C/C++的自学者,死在指针上!

C++的缺点:

开发效率没有Java, Python高

很多都需要自己设计组件

C++的优点:

  1. 效率高(越来也不明显了)
  2. C++程序员的不可替代性高!!!

今天的分享就到这里了,大家要好好学C语言/C++哟~
写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:763855696【点击进入】

C语言从入门到精通(C语言入门C语言教程C语言零基础C语言基础C语言学习C

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
编程学习视频分享:




 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言连连看秒杀辅助 的相关文章

  • 二、Echart图表 之 title配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • 四、Echart图表 之 颜色color配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • 五、Echart图表 之 legend图例组件配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • linux/clearlinux/ubuntu curl 命令详解

    介绍 xff1a cURL是一个利用URL语法在命令行下工作的文件传输工具 xff0c 1997年首次发行 它支持文件上传和下载 xff0c 所以是综合传输工具 xff0c 但按传统 xff0c 习惯称cURL为下载工具 cURL还包含了用
  • 六、Echart图表 之 tooltip提示框组件配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • 常用方法——9.js中无区别分割中英文逗号的字符串成为数组

    x1f348 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f348 前言介绍 xff1a 以下 x1f447 内容都是我个人对于前端知识的总结 xff0c 会定期更新欢迎持续关注 xff01 x1f348 欢迎点赞 x
  • 6.常见报错-已解决:v-on event ‘@showSizeChange‘ must be hyphenated

    x1f33a 作者主页 xff1a x1f331 仙女不下凡 x1f331 x1f33a 欢迎点赞 x1f44d 收藏 留言 x1f4dd 如有错误敬请指正 xff01 v span class token operator span on
  • 记录·linux系统中硬盘的挂载与格式化

    一 首先为虚拟机添加新硬盘 xff1a 1 单击 硬盘 开始进行硬盘的添加 xff1a 这时新添加的硬盘还不能用 xff0c 我们还需继续进行对磁盘的第二个步骤 xff1a 分区 二 磁盘的分区 1 这时我们需使用 lsblk 命令 xff
  • 记录 · linux系统创建RAID

    目标需求 xff1a 创建RAID卷设备名为md127 级别5 xff0c 使用2个硬盘建立RAID 1个硬盘作为热备份 并创建成ext3系统文件 xff0c 最后挂载到 mnt md127 一 说明 一般创建RAID卷有两种方法 xff0
  • 记录 · Samba服务部署

    Samba 服务器可以使用户在异构网络操作系统之间进行文件共享 Samba 服务器提供了在Windows 环境下共享 Linux 中用户目录的一个工具 在Linux 中安装Samba 后 xff0c Windows 用户只需进行简单的用户登
  • ROS如何创建一个发布者Publisher

    1 创建工作环境 首先我们需要在主文件夹创建功能包 先创建一个文件夹 mkdir catkin ws cd catkin ws mkdir src catkin ws为我们文件夹的名称 添加工程包需要的依赖 cd catkin ws src
  • C++书籍推荐(小白变大牛最全书单)

    一 C 43 43 书籍推荐之手册类 xff08 适用所有级别 xff09 可以关注博主的微 信 公 众 号 xff1a C和C加加 回复 88 即可领取相关电子书和C 43 43 教程大全 1 C 43 43 程序设计语言 The C 4
  • 最新C语言编程软件推荐(2021整理)

    一 C语言编程软件推荐 C语言编程软件适于编写系统软件 xff0c 是学习编程的同学们的必备软件 c语言一种应用非常广泛的编程语言 xff0c 不仅仅是在软件开发上 xff0c 而且各类科研都会用到c语言 今天小编给大家汇总下C语言的编程软
  • Jmeter性能测试(4)---HTTP请求详解

    jmeter xff08 四 xff09 HTTP请求 启动jmeter xff0c 建立一个测试计划 启动 xff1a 打开jmeter文件夹 xff0c bin文件 jmeter bat xff08 Windows执行文件 xff09
  • C语言和C++的区别和联系

    C语言虽说经常和C 43 43 在一起被大家提起 xff0c 但可千万不要以为它们是一种编程语言 我们来介绍C语言和C 43 43 中的区别和联系 首先C 43 43 和C语言本来就是两种不同的编程语言 xff0c 但C 43 43 确实是
  • 字符串的定义及何时添加‘\0‘问题

    定义字符串的六种形式 xff1a char arr 61 34 hello world 34 原理 xff1a 字符串常量的值本质上是第一个字符的地址 char arr arr 61 34 hello world 34 的改写 char a
  • 什么是云技术?

    云技术是指在广域网或局域网内将硬件 软件 网络等系列资源统一起来 xff0c 实现数据的计算 储存 处理和共享的一种托管技术
  • 深度学习神经网络归一化方法及MATLAB函数

    归一化方法及 MATLAB函数 数据归一化方法是神经网络预测前对数据常做的一种处理方法 数据归一化处理把所有数据都转化为 xff3b 0 xff0c 1 xff3d 之间的数 xff0c 其目的是取消各维数据间数量级差别 xff0c 避免因
  • 2022数模国赛B题无人机第一题第一小问的简单编程

    前言 2022年国赛B题是关于无人机定位的抽象模型 xff0c 总体难度不大 接下来简单介绍一下第一题第一小问的程序实现 xff0c 当时国赛仓促 xff0c 写的比较简略 xff0c 仅供参考 背景介绍 无源定位 第一个关键词是无源定位

随机推荐

  • Linux基础之网络编程

    网络编程篇 一 网络编程概述二 字节序三 socket编程步骤四 socket服务端和客户端代码的初步实现五 简单的ftp项目实现的功能有哪些 xff1f 六 ftp项目服务器和客户端代码实现 一 网络编程概述 1 进程间通信 xff1a
  • F450无人机组装与调试

    文章目录 认识无人机零部件机架图片 电机电调螺旋桨飞控套件 包括飞控 LED信号灯 xff0c GPS模块 xff0c 电源管理模块 遥控器及遥控器接收机电池护桨 确认工具清单组装过程1 组装机架2 组装电机判断电机正反选择螺丝组装电机连接
  • Openstack-mitaka安装部署

    openstack 一台controller xff0c 一台compute 且两台均为双网卡 xff0c ens33为主网卡 xff0c ens36不需要配置IP 主机名称 网卡名称 网卡类型 网卡IP ens33 controllere
  • Vue history模式路由 部署到二级目录 配置

    1 nginx配置 https xxxx com cms gt C static server cms location cms root C static server 项目部署资源所在磁盘目录 index index html try
  • 【Docker】将本地镜像推送到远程库/私有库

    前言 这里记录如何将本地镜像推送到远程库和私有库 区别 xff0c 一个是存放到阿里云 xff0c 同一个团队可以登录到同一个阿里云仓库 xff0c 去拉取镜像 一个是存放到本地私有库 xff0c 同一个团队可以连接同一个私有库 xff0c
  • HTTP协议--几种数据传输方式

    1 xff09 无状态 http协议是一种自身不对请求和响应之间的通信状态进行保存的协议 xff0c 即无状态协议 这种设置的好处是 xff1a 更快的处理更多的请求事务 xff0c 确保协议的可伸缩性 不过随着web的不断发展 xff0c
  • PDU 超链接

    http blog sina com cn s blog 453226290102wvnu html http blog sina com cn s blog 453226290102wvnv html http blog sina com
  • Canal监控MySQL数据到Kafka详细步骤(jdk+zookeeper+kafka+canal+mysql)

    目录 一 前言二 环境准备三 安装JDK四 安装zookeeper五 安装Kafka六 安装MySQL七 安装canal服务端 xff08 canal监控mysql数据发送到kafka xff09 八 测试是否可以监控到数据九 结语 一 前
  • 流媒体服务器搭建

    本文介绍如何在阿里云 腾讯云等云主机上搭建流媒体服务器 xff0c 包括如何选择云主机配置 如何选择带宽和流媒体服务器软件选择等 流媒体服务器是支撑视频播出的基础系统 xff0c 具有视频直播 视频点播的播出能力 xff0c 有些使用场景下
  • 什么是BGP

    文章目录 1 基本概念什么是BGPBGP路由协议的特点IBGP水平分割规则BGP的路由器号 Router ID BGP工作原理BGP分类 1 基本概念 自治系统 xff0c 指的是在同一个组织管理下 使用相同策略的设备的集合 xff1b 不
  • Web服务------Nginx域名重定向(Location匹配与Rewrite重写)

    目录 一 常用的Nginx正则表达式二 location1 location 的分类2 location 常用的匹配规则3 location 优先级4 location 示例说明5 优先级总结6 匹配规则 二 rewrite1 rewrit
  • 华为云-计算云服务介绍

    前言 相信很多小伙伴在刚开始接触各类云产品的时候 xff0c 被各种各样的云产品类如规格 型号 价格 适用场景等问题所困扰 本文就给大家介绍一下华为云常见云产品的规格区别和适用场景 帮助大家选择合适的云产品 文章目录 前言一 计算云服务1
  • 数据资源 | 八大板块!数据公开下载渠道

    本文综合整理自网站企研 中国学术大数据平台 xff08 https r qiyandata com xff09 来源 xff1a 企研 中国学术大数据平台 公共数据资源 目录 三农 地理信息 生态环境 碳中和 调查数据 省级统计局 省级政府
  • [C++] std::vector

    std vector template lt class T class Alloc 61 allocator lt T gt gt class vector generic template vector是表示可以改变大小的数组的序列容器
  • centos克隆

    下一步 下一步 选中创建完整克隆 启动克隆的系统 编辑 xff1a vi etc udev rules d 70 persistent net rules 修改之后 修改端口号和attr 修改完 执行 重启 xff1a reboot pin
  • 用pyhon下载jupyter遇到的问题(pip版本过低)

    首先安装jupyter 的前提是需要提前安装python 3 3版本及以上 然后输入 pip install jupyter 出现下面问题 python V 在命令行窗口输入 xff0c 验证python的版本 pip install ju
  • ubuntu利用usb_cam打开摄像头

    一 安装摄像头驱动usb cam 想要标定多个相机 xff0c 首先得把相机打开吧 xff0c usb cam是针对usb摄像头的ros驱动包 xff0c 简单来说就是得有这个功能包 xff0c 才能在ros中把摄像头打开 首先打开终端 x
  • Jmeter性能测试(1)---基础介绍

    jmeter xff08 一 xff09 基础介绍 参考书籍 xff1a 段念 软件性能测试与案例剖析 第二版 推荐一本书 零成本实现web性能测试 基于Apache jmeter xff0c 主要内容是一些关于jmeter的实战使用 xf
  • 利用Opencv实现物体的跟踪(1)

    目前感觉 xff0c 利用opencv实现的物体追踪 xff0c 关键要设置好你所检测对象的area xff0c 不然很容易出现混乱 本人也是自学 xff0c 敬请批评指正 import cv2 定义运算的核算子 BLUR RADIUS 6
  • C语言连连看秒杀辅助

    图像处理第一课 连连看秒杀辅助 项目效果 直接使用C语言 xff0c 实现 连连看 最强辅助 项目分析 项目的技术核心 不是逆向 xff0c 而是图像处理 图像处理 xff0c 更高维度的技术手段 电影中的图像处理应用 无人机战争 电影 完