/*
2025-1-25
本程序使用小熊猫C++IDE编写
本程序是cui控制台应用程序.
本程序使用ege图形库和MinGW-w64编译器.
本程序源文件为utf-8编码.
编译时请加入"-finput-charset=UTF-8 -fexec-charset=gbk"选项.
链接时请加入-lgraphics -lgdiplus -luuid -lmsimg32 -lgdi32 -limm32 -lole32 -loleaut32 -lwinmm选项
*/
#include <windows.h>
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#define 宏_左边_横坐标 15
#define 宏_左边_纵坐标 182
#define 宏_方块宽度 31
#define 宏_方块高度 35
#define 宏_行数 11
#define 宏_列数 19
typedef struct
{
int x;
int y;
} _point;
_point 坐标1, 坐标2;
PIMAGE 图片数组[宏_行数][宏_列数];
int 图片编号数组[宏_行数][宏_列数], 无可消除的图片校验值1, 无可消除的图片校验值2;
bool 是否为空白图片 ( PIMAGE 图片指针 );
bool 两个图片是否相同 ( PIMAGE 图片1, PIMAGE 图片2 );
bool havePathCorner0 ( _point p1, _point p2 );
_point havePathCorner1 ( _point p1, _point p2 );
_point *havePathCorner2 ( _point p1, _point p2 );
bool havePath ( _point p1, _point p2 );
int main ( void )
{
HWND 连连看窗口句柄 = FindWindowA ( NULL, "QQ游戏 - 连连看角色版" );
if ( !连连看窗口句柄 )
{
printf ( "获取连连看窗口句柄失败!\n" );
return 0;
}
SetWindowPos ( 连连看窗口句柄, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER );
SwitchToThisWindow ( 连连看窗口句柄, 1 );
api_sleep ( 100 );
printf ( "连连看窗口句柄:%u\n", ( unsigned int ) 连连看窗口句柄 );
HDC 连连看设备上下文句柄 = GetDC ( 连连看窗口句柄 );
printf ( "连连看设备上下文句柄:%u\n", ( unsigned int ) 连连看设备上下文句柄 );
PIMAGE 图片指针 = newimage ( 800, 600 );
HDC 图片设备上下文句柄 = getHDC ( 图片指针 );
标签:
BitBlt ( 图片设备上下文句柄, 0, 0, 800, 600, 连连看设备上下文句柄, 0, 0, SRCCOPY );
setviewport ( 宏_左边_横坐标, 宏_左边_纵坐标, 801, 601, 1, 图片指针 );
if ( ( getpixel ( 420, 400, 图片指针 ) & 0xffffff ) != ( EGERGB ( 48, 76, 112 ) & 0xffffff ) || ( getpixel ( 332, 171, 图片指针 ) & 0xffffff ) == ( EGERGB ( 248, 204, 88 ) & 0xffffff ) )
{
printf ( "没有开始游戏!\n" );
goto 结束;
}
for ( int 行数 = 0; 行数 < 宏_行数; 行数++ )
for ( int 列数 = 0; 列数 < 宏_列数; 列数++ )
{
图片数组[行数][列数] = newimage();
getimage ( 图片数组[行数][列数], 图片指针, 列数*宏_方块宽度, 行数*宏_方块高度, 宏_方块宽度, 宏_方块高度 );
图片编号数组[行数][列数] = -1; //将图片编号数组的所有成员全部初始化为-1.
if ( 是否为空白图片 ( 图片数组[行数][列数] ) )
图片编号数组[行数][列数] = 0; //将空图片所对应的的图片编号数组成员赋值为0.
}
for ( int 行数 = 0, 计数器 = 1; 行数 < 宏_行数; 行数++ )
for ( int 列数 = 0; 列数 < 宏_列数; 列数++ )
{
if ( 图片编号数组[行数][列数] == -1 )
{