QQ连连看分析: (注:此数据为非最大化时的数据2007年10月13日测试有效)
连连看游戏区中的方块由内部小方块和外部边框组成,如下图
(不能显示,就跟汉字回一样)
分析数据,或者说是关键数据就在内部的方块中.经过我严格测试,得到如下结论:内部小方块宽24(屏幕坐标单位),高28,相临两块内部小块距7;
数据区,TopLeft=17+(n-1)*31
Top=184+(n-1)*35
在知道这些数据之后,可以根据游戏区域里面的颜色建立一个矩阵,通知过判断矩阵就可以知道哪些能消去哪些不能消去。以下是用C语言写的判断能否连接的代码。主要思路如下:
如果两块之前没有其它块,表明它们是直连,若没有其它块,但它们是水平关系或竖直关系且中间为空白,表明也是直连关系。若不符合上述条件,则取所在点旁边的空点,若两个块的空点有相交,则表明它们可以有一个拐点的情况下消去。若不符合上术两条件,则选取一个关键点的空点做为关键点,再求此点的空部集合,若有空点与另一点的空点集合相交,说明可以用两个拐点连接,若不能,再取其它空点,直到取完为止。
这个好像不太容易用语言表述,看代码吧。
#include "stdafx.h"
#define M  4
#define N  5
#define BLANK 0
int map[11][19];
struct Point
{
 int x;
 int y;
};
Point arr1[209];
int arr1Len=0;
Point arr2[209];
int arr2Len=0;
//为测试数据赋值,这时为测试,在程序中将自动赋值
void InitArray()
{
 for(int i=0;i<M;i++)
  for(int j=0;j<N;j++)
   map[i][j]=0;
 map[1][1]=1;
 //map[1][2]=2;
 map[1][3]=2;
 map[2][1]=3;
 map[2][3]=4;
 //map[2][1]=3;
 map[3][1]=1;
 map[3][3]=1;
 map[3][2]=6;
}
//若有两个点相同,说明数组有相同点,返回真.此方法用来判断空点集是否相交
bool IsShare(Point* a1,int a1Len,Point* a2,int a2Len)
{
 bool result=false;
 for(int i=0;i<a1Len;i++)
  for(int j=0;j<a2Len;j++)
   if(a1[i].x==a2[j].x&&a1[i].y==a2[j].y)
    result=true;
 return result;
}
void ShowArray(Point* aaaa,int len)
{
 for(int i=0;i<len;i++)
  printf("(%d,%d)上的值%d/n",aaaa[i].x,aaaa[i].y,map[aaaa[i].x][aaaa[i].y]);
}
//若直连,则返回真
bool IsDirectLink(int x1,int y1,int x2,int y2)
{
 if(x1==x2)
 {
  int miny=y1+1;
  while(map[x1][miny]==BLANK)
   miny++;
  if(miny==y2)
   return true;
  else
   return false;
 }
    if(y1==y2)
 {
  int minx=x1+1;
  while(map[minx][y1]==BLANK)
   minx++;
  if(minx==x2)
   return true;
  else
   return false;
 }
 return false;
 
}
//此函数找出空点***************************此方法测试成功*******************
int FindEmpty(int x,int y,Point* arr)
{
 int count=0;
 int pos=x-1;
 while(0<=pos&&pos<M&&map[pos][y]==BLANK)
 {
  arr[count].x=pos;
  arr[count].y=y;
  pos--;
  count++;
 }
pos=x+1;
 while(0<=pos&&pos<M&&map[pos][y]==BLANK)
 {
  arr[count].x=pos;
  arr[count].y=y;
  pos++;
  count++;
 }
pos=y-1;
 while(0<=pos&&pos<N&&map[x][pos]==BLANK)
 {
  arr[count].x=x;
  arr[count].y=pos;
  pos--;
  count++;
 }
pos=y+1;
 while(0<=pos&&pos<N&&map[x][pos]==BLANK)
 {
  arr[count].x=x;
  arr[count].y=pos;
  pos++;
  count++;
 }
return count;
}
bool IndirectLink(int x1,int y1,int x2,int y2)
{
 int pos=0;
 Point ar1[209];
 int ar1Len=0;
 Point ar2[209];
 int ar2Len=0;
//如果两点是上下且非直连关系
 //if(y1==y2)
 //{
  pos=y1-1;
  while(0<=pos&&pos<N&&map[x1][pos]==BLANK)
  {
   ar1Len=FindEmpty(x1,pos,ar1);
   ar2Len=FindEmpty(x2,y2,ar2);
   if(IsShare(ar1,ar1Len,ar2,ar2Len))
    return true;
   pos--;
  }
  pos=y1+1;
  while(0<=pos&&pos<N&&map[x1][pos]==BLANK)
  {
   ar1Len=FindEmpty(x1,pos,ar1);
   ar2Len=FindEmpty(x2,y2,ar2);
   if(IsShare(ar1,ar1Len,ar2,ar2Len))
    return true;
   pos++;
  }
//}
//如果两点是左右且非直连关系
//if(x1==x2)
 //{
  pos=x1-1;
  while(0<=pos&&pos<M&&map[pos][y1]==BLANK)
  {
   ar1Len=FindEmpty(pos,y1,ar1);
   ar2Len=FindEmpty(x2,y2,ar2);
   if(IsShare(ar1,ar1Len,ar2,ar2Len))
    return true;
   pos--;
}
  pos=x1+1;
  while(0<=pos&&pos<M&&map[pos][y1]==BLANK)
  {
   ar1Len=FindEmpty(pos,y1,ar1);
   ar2Len=FindEmpty(x2,y2,ar2);
   if(IsShare(ar1,ar1Len,ar2,ar2Len))
    return true;
   pos++;
  }
// }
//如果非上下非左右,即构成矩形的关系
return false;
}
bool IsLink(int x1,int y1,int x2,int y2)
{
 if(IsDirectLink(x1,y1,x2,y2))
 {
  printf("DirectLink!");
  return true;
 }
 else
 {
  //arr1Len=FindEmpty(x1,y1,arr1);
  //arr2Len=FindEmpty(x2,y2,arr2);
  if(IsShare(arr1,arr1Len,arr2,arr2Len))
  {
   printf("One Corner Link!");
   return true;
  }
  else
  {
   printf("Two Corner Link!");
   return IndirectLink(x1,y1,x2,y2);
  }
 }
}
int main(int argc, char* argv[])
{
 int xpos1,ypos1,xpos2,ypos2;
 printf("请输入要测试的行列(按数据结构中的数组序):");
 scanf("%d %d %d %d",&xpos1,&ypos1,&xpos2,&ypos2);
 InitArray();
 arr1Len=FindEmpty(xpos1,ypos1,arr1);
 arr2Len=FindEmpty(xpos2,ypos2,arr2);
  /*
 if(IsShare(arr1,arr1Len,arr2,arr2Len))
  printf("有交点/n");
 else
  printf("没有交点/n");
//ShowArray(arr1,arr1Len);
 */
 if(IsLink(xpos1,ypos1,xpos2,ypos2))
  printf("有交点/n");
 else
  printf("没有交点/n");
 
 return 0;
}

QQ连连看外挂开发过程记录相关推荐

  1. QQ连连看外挂V1.0版发布啦!!

    本外挂支持最新的连连看角色版.功能如下: 1.可手动设置消去时间,可以在秒杀对手也可以慢慢消(这样不容易被发现是在用外挂,可以赚很多分) 2.可设为自动开始.程序自动运行.若有事出门,可选自动开始,在 ...

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

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

  3. 连连看外挂消去算法分析

    很久之前发布了一个小外挂,是我自己捣鼓出来的QQ游戏连连看外挂. 见:http://www.cnblogs.com/G_Weber/archive/2009/06/02/1494871.html 在做 ...

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

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

  5. 200行Python实现效果逆天的连连看外挂

    本文内容转自我本人的知乎回答:你看过/写过哪些有意思的代码? - 三级狗的回答 - 知乎 https://www.zhihu.com/question/275611095/answer/4079841 ...

  6. Android 手机影音 开发过程记录(六)

    Android 手机影音 开发过程记录(六) 前一篇已经将音乐播放及切换的相关逻辑弄好了,今天主要理一下剩余的部分,包含: 1. 自己定义通知栏的布局及逻辑处理 2. 滚动歌词的绘制 3. 歌词解析 ...

  7. QQ连连看棋盘数组找法:

    QQ连连看棋盘数组找法: 1.    附加CE   2.    内存扫描选项----选择全部, 数值类型:为字节(byte) 3.    索定棋盘左上角第一个格子   搜索大于0的数值 消除几对棋子, ...

  8. QQ抢车位外挂(起始篇)--小研究成果展示

    经过几天的研究,把QQ抢车位的小外挂攻克下来了,哼哼,以后玩这个游戏再也不用进去,1辆车1辆车的换了. 研究证明,QQ对于安全方面做的还是比较好的,不像开心网(http://www.kaixin001 ...

  9. PyQt5图形界面GUI开发过程记录

    PyQt5图形界面GUI开发过程记录 一.PyQT的简介与安装 1.1 常用的图形界面GUI 1.2 PyQT5的安装 二.PyQt的基本使用 2.1 QApplication 2.2 界面控件 2. ...

  10. 关于QQ开心农场外挂 开发

    很久没更新博客了,今天就拿开发QQ开心农场外挂的一些问题来写篇短日志充个数. 关于登陆         在web上,QQ登陆的时候是将密码加密后再提交了,打开http://xiaoyou.qq.com ...

最新文章

  1. AI芯片重磅破局者,开启边缘新智元
  2. numpy/arrayobject.h”: No such file or directory
  3. 目标检测--边界框(bounding box)解析
  4. ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露
  5. IDEA中导入支付宝电脑网站支付测试Demo遇到的错误
  6. vb的VSFlexGrid控件
  7. 怎么查看当前登录的svn账号_在linux下查看svn对应的账号和密码
  8. 基于DSP的主动降噪开发之三(CCS软件学习)
  9. Tomcat官网免费下载地址
  10. MySQL Router 8 详解
  11. python的编码解码是什么意思_python - 这是什么编码,如何解码
  12. 免费AI数据标注工具-音频标注软件
  13. Faiss:Facebook开源的相似性搜索类库
  14. 如何使用 ABAP 代码发送带有 PDF 附件的电子邮件
  15. 2014522420145238 《信息安全系统设计基础》 第三次实验
  16. 研究生录取数据分析 Python123
  17. 反向工程之“测测你的本命专业”
  18. 小程序发送 request请求失败 提示不在合法域名列表中的解决方法
  19. catalan 数。。
  20. Button点击事件

热门文章

  1. linux安装时mbr转gpt分区表,免重装系统 手把手教你MBR转GPT分区表
  2. 【微机原理】40道简答题
  3. Pycharm快速入门(6) — 版本控制
  4. VMware 虚拟机安装 xp 蓝屏解决方法
  5. openpyxl自动设置列宽
  6. python人脸识别毕业设计-毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计文章...
  7. WMB专题之ESQL
  8. 杨令云玩过的那些FC游戏-魔道士的阴谋(二)
  9. python3.6 pillow,【Pillow】Python图像处理
  10. 上行带宽和下行带宽是什么意思?各有什么作用?