当前位置: 首页 > news >正文

c语言,识别到黑色就自动开枪,4399单击游戏狙击战场,源码分享,豆包ai出品

不好用,识别速度慢,有时候识别不准确

#include <windows.h>
#include <stdio.h>
#include <math.h> 
HDC hdcScreen;
void leftClick();
void RGBtoHSV(int r, int g, int b, int* h, int* s, int* v);
int fuzzyFindColor(int x1, int y1, int x2, int y2,int targetH, int targetS, int targetV,int hTol, int sTol, int vTol,int* outX, int* outY);
void leftClick() {// 模拟鼠标左键按下mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);// 短暂延迟,模拟真实点击的持续时间Sleep(50);// 模拟鼠标左键释放mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
// 1. RGB转HSV(纯C工具函数,0<=H<=360,0<=S,V<=100)
void RGBtoHSV(int r, int g, int b, int* h, int* s, int* v) {/*作用:将输入的 0-255 整数(硬件设备的绝对亮度值)转换为 0-1 的相对比例(消除绝对值影响,统一计算标准)。细节:除以 255.0f(浮点型)而非 255(整数),确保结果为浮点数(避免整数除法导致的截断)。*/float R = r / 255.0f, G = g / 255.0f, B = b / 255.0f;float max = (R > G ? (R > B ? R : B) : (G > B ? G : B));float min = (R < G ? (R < B ? R : B) : (G < B ? G : B));float delta = max - min;// 计算色相Hif (delta < 1e-6) *h = 0;else if (max == R) *h = (int)(60 * fmod(((G - B) / delta) + 6, 6));else if (max == G) *h = (int)(60 * (((B - R) / delta) + 2));else *h = (int)(60 * (((R - G) / delta) + 4));// 计算饱和度S*s = (max < 1e-6) ? 0 : (int)((delta / max) * 100);// 计算明度V*v = (int)(max * 100);
}// 2. 区域模糊找色(返回第一个匹配点坐标)
// 参数:x1,y1/x2,y2=查找区域;targetH/S/V=目标颜色;h/s/vTol=模糊阈值;outX/outY=输出坐标
int fuzzyFindColor(int x1, int y1, int x2, int y2,int targetH, int targetS, int targetV,int hTol, int sTol, int vTol,int* outX, int* outY) {// 校验区域合法性if (x1 > x2 || y1 > y2) return 0;// 获取屏幕设备上下文(DC)//hdcScreen = CreateDCA("DISPLAY", NULL, NULL, NULL);hdcScreen=GetDC(NULL);//2if (!hdcScreen) return 0;int h, s, v;COLORREF pixel; // 存储RGB颜色(0x00BBGGRR)int r, g, b;// 遍历区域内所有像素for (int y = y1; y <= y2; y++) {for (int x = x1; x <= x2; x++) {// 读取当前像素的RGB值pixel = GetPixel(hdcScreen, x, y);r = GetRValue(pixel); // 提取红色分量g = GetGValue(pixel); // 提取绿色分量b = GetBValue(pixel); // 提取蓝色分量// RGB转HSVRGBtoHSV(r, g, b, &h, &s, &v);//	printf("RGB %d, %d,%d)\n", r, g, b);//	printf("hsv %d, %d,%d)\n", h, s, v);// 模糊匹配:判断HSV是否在阈值范围内if ((h >= targetH - hTol && h <= targetH + hTol) &&(s >= targetS - sTol && s <= targetS + sTol) &&(v >= targetV - vTol && v <= targetV + vTol)) {*outX = x;*outY = y;//DeleteDC(hdcScreen); // 释放资源ReleaseDC(NULL, hdcScreen);//2leftClick();return 1; // 找到匹配点}}}//DeleteDC(hdcScreen); // 释放资源ReleaseDC(NULL, hdcScreen);//2return 0; // 未找到
}// 3. 测试主函数
int main() {while (1){int matchX, matchY;// 需求:在(100,100)-(800,600)区域找HSV(30,80,90),阈值H±3、S±8、V±15int found = fuzzyFindColor(537	, 533, 543, 538,180, 50, 8,179, 49, 7,&matchX, &matchY);if (found) {printf("--------------------------------------------------------------找到匹配点!坐标:(%d, %d)\n", matchX, matchY);Sleep(1000);}else {printf("未找到匹配颜色未找到匹配颜色未找到匹配颜色\n");}//system("pause"); // 暂停查看结果}return 0;
}


文章转载自:

http://oCDCt5q9.nyjgm.cn
http://H0XOmOhb.nyjgm.cn
http://LLrvaJaP.nyjgm.cn
http://GqwZCkya.nyjgm.cn
http://eM4nvOH7.nyjgm.cn
http://UOrp9oqk.nyjgm.cn
http://ROuvhl81.nyjgm.cn
http://It0sK980.nyjgm.cn
http://0cYyirXs.nyjgm.cn
http://3CpuZjxS.nyjgm.cn
http://W0Esujob.nyjgm.cn
http://4Bl6nrtQ.nyjgm.cn
http://71yyrrfT.nyjgm.cn
http://riST16mo.nyjgm.cn
http://uoXB9XAN.nyjgm.cn
http://qF621D5B.nyjgm.cn
http://NNgcFXcU.nyjgm.cn
http://n065DITq.nyjgm.cn
http://ALLF5qGT.nyjgm.cn
http://yEQx4VUE.nyjgm.cn
http://gIjLBPr7.nyjgm.cn
http://suAlzwuo.nyjgm.cn
http://84PHvcAj.nyjgm.cn
http://ZWB0lDlu.nyjgm.cn
http://5Qc3RTlQ.nyjgm.cn
http://zxrkV1a4.nyjgm.cn
http://TqVxaYGF.nyjgm.cn
http://VXER4ZBD.nyjgm.cn
http://7eMCIwgb.nyjgm.cn
http://ezfuBN03.nyjgm.cn
http://www.dtcms.com/a/378885.html

相关文章:

  • Spring Boot 原理与性能优化实战
  • PHP 性能优化实战 OPcache + FPM 极限优化配置
  • solidity的高阶语法(完结篇)
  • 端–边–云一体的实时音视频转发:多路RTSP转RTMP推送技术深度剖析
  • OPC Client第10讲:实现主界面;获取初始界面传来的所有配置信息config【C++读写Excel:xlnx;ODBC;缓冲区】
  • git的使用命令
  • uniapp | 实现微信小程序端的分包处理
  • C/C++项目练习:命令行记账本
  • mes之生产管理
  • 【51单片机】【protues仿真】基于51单片机多功能电子秤系统
  • VSCode 下 PlatformIO 的使用
  • Shell编程:生成10个随机数,并判断最大值和最小值
  • nginx参数介绍(Nginx配置文件结构、nginx命令)
  • Java mp4parser 实现视频mp4 切割
  • 安卓13_ROM修改定制化-----系统升级(OTA 更新)后保留 Magisk 的 root 权限和相关功能
  • Codebuddy Code CLI 实战体验:从安装到生成俄罗斯方块小游戏
  • 【代码随想录day 24】 力扣 90. 集合II
  • [iOS] 属性关键字
  • MVC及其衍生
  • 前端开发为什么要禁止使用 == 操作符?
  • langchain4j入门(跟随官网学习)第一章
  • ASSIGN (LV_NAME) TO <FS_NAME>. 通过变量名动态访问变量
  • 二、WPF——Style样式玩法(通过资源字典将Style独立,全局调用)
  • 基于Hadoop进程的分布式计算任务调度与优化实践——深入理解分布式计算引擎的核心机制
  • 用工招聘小程序:功能版块与前端设计解析
  • Golang高效JSON处理:easyjson性能提升6倍
  • Golang语言入门之数组、切片与子切片
  • Go 死锁全解析:4个条件+5个场景+6个解决方案
  • Go语言快速入门教程(JAVA转go)——1 概述
  • 【leetcode】139. 单词拆分