花了我不少时间哦,基于LAScript脚本的模拟程序,虽然程序还不是很完美,有一些小的BUG,^_^,我2天时间快赚了有3W分了。当然模拟程序还是有缺陷的,不像截取封包程序那样运行极快,几乎一开始就结束了,或者一开始给你定住,然后就眼睁睁看着自己被消灭。
以下是脚本程序
------------------------
--Read config----------------------------------------------------------
config = string.load("llk.ini","rb");
configs =table.loadList(config,"\n");
--end----------------------------------------------------------------------
--以下为系统参数设置的读取-----------------------------------
imgwidth=configs["IMG_WIDTH"]-0;
imgheight=configs["IMG_HEIGHT"]-0; --图片高
imgcolsize=configs["IMG_COLSIZE"]-0;
imgrowsize=configs["IMG_ROWSIZE"]-0; --19*11幅图片
offsetWidth=configs["OFFSET_WIDTH"]-0+configs["CROP_OFFSET_WIDTH"]-0;
offsetHeight=configs["OFFSET_HEIGHT"]-0;
diff=configs["NORMAL_DIFF"]-0;
diff1=configs["BLANK_DIFF"]-0;
diff2=configs["SAME_DIFF"]-0;
delay1=configs["PIC1_CLICK_DELAY"]-0;
delay2=configs["PIC2_CLICK_DELAY"]-0;
blankurl=configs["BLANK_IMAGE"];
--end------------------------------------------------------------
--全局变量定义-------------------------------------------
winleft=0;
wintop=0;
winright=0;
winbottom=0;
blankimg=nil;
fullimg=nil;
tab={};
imgs={};
hwnd=nil; --游戏窗口
--end-----------------------------------------------------------
--加载空白图片--------------------------------------------
function loadBlank(url)
local blank=image.new();
blank:load(url);
return blank;
end;
--end--------------------------------------------------------------
--本方法用来寻找是否可以相连------------------------
function findsame()
local same={};
local row=table.maxn(tab);
local col=table.maxn(tab[1]);
local visit={};
for i=1,row,1 do
for j=1,col,1 do
if(tab[j]>0) then
local index=tab[j];
if(visit[index]==nil) then
visit[index]={};
end;
table.insert(visit[index], {i,j});
end;
end;
end;
return visit;
end;
--end-----------------------------------------------------------
--在判断图片相同后的处理动作----------------------
function dosame(same)
local size=table.maxn(same);
local count=countLeft();
while(nStop() and count>0) do
for i=1,size,1 do
local items=same;
local isize=table.maxn(items);
for j=1,isize,1 do
if(items[j]~=nil) then
for k=j+1,isize,1 do
if(items[j]~=nil and items[k]~=nil) then
local result=tryconnect(items[j],items[k]);
if(result~=nil) then
if(connect(items[j],items[k])) then
items[j]=nil;
items[k]=nil;
count=count-1;
end;
--showpoint(result[1],result[2],result[3],result[4]);
end;
end;
end;
end;
end;
end;
delay(10);
end;
end;
--尝试连接----------------------------------------------------
function connect(pos1,pos2)
local r1=pos1[1];
local r2=pos2[1];
local c1=pos1[2];
local c2=pos2[2];
local offsetwidth1=(c1-0.5)*imgwidth;
local offsetheight1=(r1-0.5)*imgheight;
local offsetwidth2=(c2-0.5)*imgwidth;
local offsetheight2=(r2-0.5)*imgheight;
mouse.click(winleft+offsetWidth+offsetwidth1,wintop+offsetHeight+offsetheight1,true);
delay(delay1);
mouse.click(winleft+offsetWidth+offsetwidth2,wintop+offsetHeight+offsetheight2,true);
delay(delay2);
local img1=getImage1(c1,r1);
local img2=getImage1(c2,r2);
if(img1:test(imgs[r1][c1])<diff2 and img2:test(imgs[r2][c2])<diff2) then
return false;
end;
return true;
end;
--end--------------------------------------------------------------------
function aroundcheck(r1,c1,r2,c2)
if(r1==r2 and (c1-c2==1 or c1-c2==-1)) then
return true;
end;
if(c1==c2 and (r1-r2==1 or r1-r2==-1)) then
return true;
end;
return false;
end;
function tryconnect(pos1,pos2)
local r1=pos1[1];
local r2=pos2[1];
local c1=pos1[2];
local c2=pos2[2];
--循同行往前移动寻找路线
for i=c1-1,1,-1 do
if(i<1) then
break;
end;
if(i==c2 and r1==r2) then
logicremove(r1,c1,r2,c2);
return {r1,c1,r2,c2};
end;
if(tab[r1]>0) then
break;
end;
local suc1=coltravel(i,r1,r2);
local suc2=rowtravel(r2,c2,i);
if(suc1 and suc2) then
logicremove(r1,c1,r2,c2);
return {r1,c1,r2,c2};
end;
end;
--循同行往后移动寻找路线
for i=c1+1,imgcolsize,1 do
if(i>imgcolsize) then
break;
end;
if(i==c2 and r1==r2) then
logicremove(r1,c1,r2,c2);
return {r1,c1,r2,c2};
end;
if(tab[r1]>0) then
break;
end;
local suc1=coltravel(i,r1,r2);
local suc2=rowtravel(r2,c2,i);
if(suc1 and suc2) then
logicremove(r1,c1,r2,c2);
return {r1,c1,r2,c2};
end;
end;
----循同列往上移动寻找路线
for j=r1-1,1,1 do
if(j<1) then
break;
end;
if(j==r2 and c1==c2) then
logicremove(r1,c1,r2,c2);
return {r1,c1,r2,c2};
end;
if(tab[j][c1]>0) then
break;
end;
local suc1=coltravel(c2,r2,j);
local suc2=rowtravel(j,c1,c2);
if(suc1 and suc2) then
logicremove(r1,c1,r2,c2);
return {r1,c1,r2,c2};
end;
end;
--循同列往下移动寻找路线
for j=r1+1,imgrowsize,1 do
if(j>imgrowsize) then
break;
end;
if(j==r2 and c1==c2) then
logicremove(r1,c1,r2,c2);
return {r1,c1,r2,c2};
end;
if(tab[j][c1]>0) then
break;
end;
local suc1=coltravel(c2,r2,j);
local suc2=rowtravel(j,c1,c2);
if(suc1 and suc2) then
logicremove(r1,c1,r2,c2);
return {r1,c1,r2,c2};
end;
end;
end;
function logicremove(r1,c1,r2,c2)
tab[r1][c1]=0;
tab[r2][c2]=0;
end;
function coltravel(c,r1,r2)
local step=1;
if(r1==r2) then
return true;
elseif(r1>r2 ) then
step=-1;
else
step=1;
end;
for i=r1+step,r2,step do
if(tab[c]>0) then
return false;
end;
end;
return true;
end;
function rowtravel(r,c1,c2)
local step=1;
if(c1==c2) then
return true;
elseif(c1>c2 ) then
step=-1;
else
step=1;
end;
for i=c1+step,c2,step do
if(tab[r]>0) then
return false;
end;
end;
return true;
end;
function printresult(result)
local size=table.maxn(result);
for i=1,size,1 do
showpoint(result[1],result[2],result[3],result[4]);
end;
end;
function showpoint(x1,y1,x2,y2)
win.messageBox("["..x1..","..y1.."] ["..x2..","..y2.."]");
end;
function getImage(fullimg,x,y)
local ileft=offsetWidth+(x-1)*imgwidth+3;
local itop=offsetHeight+(y-1)*imgheight+4;
local iright=offsetWidth+x*imgwidth-4;
local ibottom=offsetHeight+y*imgheight-5;
local tmp=image.new(fullimg);
tmp:Crop(ileft,itop,iright,ibottom);
return tmp;
end;
function getImage1(x,y)
local ileft=offsetWidth+(x-1)*imgwidth+3;
local itop=offsetHeight+(y-1)*imgheight+4;
local iright=offsetWidth+x*imgwidth-4;
local ibottom=offsetHeight+y*imgheight-5;
local tmp=image.new();
image.capture(tmp,hwnd,ileft,itop,imgwidth-7,imgheight-9);
return tmp;
end;
function countLeft()
local count=0;
for i=1,imgrowsize,1 do
for j=1,imgcolsize,1 do
if(tab[j]>0) then
count=count+1;
end;
end;
end;
return count;
end;
------------------------------------
--辨识图片是否已经存在---------
sample={};
imgIdentify=function(tmpimg)
if(blankfound==false) then
if(tmpimg:test(blankimg)<diff1) then
blankimg=tmpimg;
blankfound=true;
return 0;
end;
end;
if(blankfound==true) then
if(tmpimg:test(blankimg)<diff) then
return 0;
end;
end;
local count=table.maxn(sample);
for i=1,count,1 do
if(sample:test(tmpimg)<diff) then --比指定的差异度小,判定为相同的图片
return i;
end;
end
sample[count+1]=tmpimg;
return count+1;
end;
------------------------------------
--显示图片对应的数字情况----
imageShow=function()
end;
------------------------------
--获取窗口的整幅画面------------------------------------------------------------
function getFullImage()
local winname="KYODAI~1.EXE";
hwnd=win.fromFile(winname,"","连连看");
winleft,wintop,winright,winbottom=win.getRect(hwnd);
local img =image.new();
image.capture(img,hwnd,0,0,0,0);
return img;
end;
--end----------------------------------------------------------------------------------
--图片转换为数字标识-----------------------------------------------------------
function image2num()
for i=1,imgrowsize,1 do
tab={};
imgs={};
for j=1,imgcolsize,1 do
--tmp:paint(ileft,itop,29,33);
--tmp:save("d:\\"..i..j..".png");
local tmp=getImage(fullimg,j,i);
tab[j]=imgIdentify(tmp);
imgs[j]=tmp;
end;
end;
end;
--end----------------------------------------------------------------------------------
function finish()
image.del(fullimg);
fullimg=image.new();
image.capture(fullimg,hwnd,0,0,0,0);
local count=0;
for i=1,imgrowsize,1 do
for j=1,imgcolsize,1 do
local img=getImage(fullimg,j,i);
if(img:test(blankimg)>diff1) then
count=count+1;
end;
end;
end;
if(count>0) then
image2num();
local visit=findsame();
end;
end;
function start()
blankimg=loadBlank(blankurl);
--blankimg:paint(100,100,40,40);
blankfound=false;
fullimg=getFullImage();
image2num();
local visit=findsame();
dosame(visit);
--finish();
collectgarbage();
end;
--启动程序-------------------------------
start();
--end--------------------------------------
分享到:
相关推荐
【标题】"高仿真QQ登陆界面 ---基于MFC"是一个使用Microsoft Foundation Classes (MFC)库开发的项目,旨在创建一个与腾讯QQ登录界面高度相似的用户界面。MFC是微软提供的一套C++类库,它封装了Windows API,使得...
QQ连连看秒杀源码 - 易语言
【标题】易语言qq连连看辅助程序源码 在编程领域,辅助程序通常是用来增强或自动化某一特定软件功能的工具,而"易语言"是一种基于汉语词汇的编程语言,旨在降低编程的难度,让更多人能够参与到编程活动中。本资源...
MFC学生信息管理系统------基于对话框的C++编程 MFC学生信息管理系统------基于对话框的C++编程 MFC学生信息管理系统------基于对话框的C++编程 MFC学生信息管理系统------基于对话框的C++编程 MFC学生信息管理...
这个代码只目前适合平面连连看游戏,可以用鼠标点击,也可以自己修改...本代码在第一高手的代码基础上修改而成,主要修改QQ游戏背景添加后原工具不能正常工作的bug。以每个图标的左上角标志性白点为识别点进行定位查找。
windows API 连连看 具体联系QQ904175342
【标题】:“java--QQ java--QQjava--QQjava--QQ” 这个标题似乎是一个重复的字符串,其中“java”和“QQ”交替出现,可能暗示了我们正在处理一个与Java编程语言和QQ(可能是腾讯的即时通讯软件)相关的项目或者...
基于java的开发源码-QQ登录的接口 open-qq.zip 基于java的开发源码-QQ登录的接口 open-qq.zip 基于java的开发源码-QQ登录的接口 open-qq.zip 基于java的开发源码-QQ登录的接口 open-qq.zip 基于java的开发源码-QQ...
QQ连连看是一款深受玩家喜爱的经典休闲游戏,而“按键精灵”是一种自动化工具,它能够模拟用户的键盘和鼠标操作,极大地提升了工作效率或者游戏体验。在这个场景中,我们将关注的重点放在使用Vbscript(Visual Basic...
本项目"Python-基于python图像识别实现的连连看自动玩可实现QQ连连看秒破"就是一个很好的实例,它利用Python进行图像识别技术,实现了QQ连连看游戏的自动游玩,甚至可以达到“秒破”的效果。下面我们将深入探讨这个...
qq连连看辅助工具java源码,Idea项目
本项目是一个基于JavaScript实现的连连看游戏,采用了QQ头像作为游戏元素,使得游戏更具趣味性。在这个项目中,我们主要会涉及到以下几个关键知识点: 1. **HTML布局**:游戏界面的构建是通过HTML来完成的,包括...
连连看路径两种快速搜索算法;GDI后备缓冲使用防闪烁;用于制作任意形状地图的地图生成器;通关难度简单自动调节;使用MFC封装图片文件管理类以实现任意格式图片的加载、显示等图片操作;封装波形声音文件(wav文件...
易语言QQ连连看辅助源码! 原创 要的速度了
【标题】"C++QQ连连看-附带源码"是一个基于C++编程语言实现的QQ连连看游戏项目,它提供了完整的源代码供学习和参考。这款游戏是经典的消除类游戏,玩家通过匹配相同的图片来得分,直至清除所有棋盘上的元素。 ...
QQ游戏连连看源码,直接就可以编译,秒杀一切QQ游戏连连看
连连看路径两种快速搜索算法;GDI后备缓冲使用防闪烁;用于制作任意形状地图的地图生成器;通关难度简单自动调节;使用MFC封装图片文件管理类以实现任意格式图片的加载、显示等图片操作;封装波形声音文件(wav文件...
自学python时, 拿来练手的小代码, 基于python3.4, PyQt, Pywin32, 并提供了py2exe的setup.py及相关dll, ... 功能上实现了QQ连连看手动消除, 自动定时消除, 功能. 核心算法是基于递归调用的一个连连看相关模块的查找.
QQ游戏连连看源码是基于易语言开发的一款经典休闲游戏的源代码,它为学习游戏编程的初学者或对易语言有兴趣的开发者提供了宝贵的参考。易语言是一种中国本土开发的编程语言,以其易于理解和使用的特性而闻名,尤其...
QQ连连看秒杀源码是一种基于经典游戏QQ连连看的作弊工具,主要目的是帮助玩家在游戏中快速消除匹配项,实现秒杀效果。这类源码通常由编程爱好者或黑客编写,利用了游戏的某些漏洞或者机制来达到秒杀的目的。在本案例...