马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 蓝丝雨 于 2014-3-8 16:44 编辑
【蓝丝雨精品教程】为终身会员提供全天候一对一贴心辅导,让您学习无忧!!
【蓝丝雨精品教程】以商业项目为本 从实例实战出发 全面剖析脚本构成 写出成品才是王道
【教学方法】
1.全天24小时,全年无休,随时提问,马上解答。 2.每周一、四晚19:00-22:00风雨无阻,QQ群语音一对一辅导。 3.终身辅导 4.每月推出新游戏教程供学员学习 5.指导学员开发自已喜爱的项目
【我承诺】
一旦购买,终身免费
精心辅导,免费更新
检查进度,及时跟踪
包教包会,学不会退款
【教程价值体现】
多:教程内容系统全面,类型多,数量多
快:教程更新快,辅导响应快
好:教程质量好,学员评价好
省:学员学习省心,教程价格省钱
//--------------------------------------------------------分隔线---------------------------------------------------------//
【内容简介】这一节课给新手分享些思路, 起到抛砖引玉的作用, 下面用详细的注释结合代码给大家作以详细的解释
这个案例是有针对性的, 大家来找碴网址(http://www.4399.com/flash/20389_3.htm)点击进入
思路: 1.首先要定位到两张图的基本点,这是个前提,定位准确才能开展后面的工作
2.通过获取坐标点像素取得两张图的不同点坐标,方法是每5个像素点取一次
没有必要每一个都要取,那样的话脚本运行效果不慢了,也不智能
3.取完不同点后,再根据不同点的多少作出判断用以鼠标点击第二张图的方式
使用方法: 先打开网址链接,然后再运行脚本,具体效果你可以在我的脚本基础上再次
发挥,以达到最佳效果
空间 大家来找碴
//默认空间
//声明变量 大家来找碴网址http://www.4399.com/flash/20389_3.htm
变量 Hwnd, x1, y1, x2, y2
变量 P1_x1, P1_y1, P2_x1, P2_y1,P1_x1_Array = 数组[], P1_y1_Array = 数组[], Index
变量 Old1_x1, Old1_y1, Old2_x1, Old2_y1
变量 intX, intY, Tid, Global_bCtrl = true
//退出按钮_点击操作
功能 退出_点击()
//退出脚本时关闭线程
if(Tid > 0)
thread.closethread(Tid, 0)
endif
Global_bCtrl = false //将控制开关赋值为假, 终止循环
辅助.退出()
功能结束
功能 热键0_热键()
//这里添加你要执行的代码
//首先获取游戏窗口句柄
Hwnd = window.getmousemovewndhand()
调试输出("父窗口句柄: " & Hwnd)
if(Hwnd > 0)
//获取窗口区大小
window.getclientrect(Hwnd, x1, y1, x2, y2)
调试输出("x1: " & x1 & " y1: " & y1 & " x2: " & x2 & " y2: " & y2)
//定位两张图的基本点 这里以大家来找碴 中的大字 来作为基本点, 这里很关键,如果基本点定位不准确,会影响找图的效果
color.findpic(x1,y1,x2,y2,"rc:\\大.bmp",#101010,1.0,0,intX,intY)
if(intX > 0 && intY > 0)
调试输出("大intX: " & intX & " 大intY: " & intY)
P1_x1 = intX + 11, P1_y1 = intY + 79 //这里定位左边第一张图的基本点
P2_x1 = intX + 259, P2_y1 = intY + 79 //这里定位右边第二张图的基本点
Old1_x1 = P1_x1, Old2_x1 = P2_x1 //保存第一张图的基本点,后面遍历时会用到
Old1_y1 = P1_y1, Old2_y1 = P2_y1 //保存第二张图的基本点,后面遍历时会用到
Tid = thread.beginthread("大家来找碴.任务线程","") //开启任务线程, 来进行找图点击
else
调试输出("没有找到大.bmp")
endif
else
help.messagebox("请将鼠标指向游戏窗口内")
endif
功能结束
//------------------任务线程----------------------------------------//
function 任务线程()
var zbX, zbY, Count, i, j, Array_Len
var P1_cr1, P2_cr1
Count = 0
//开启线程进行像素点对比 通过循环来做找图任务
while(Global_bCtrl)
Index = 0
color.findpic(x1,y1,x2,y2,"rc:\\钟表.bmp",#101010,1.0,0,zbX,zbY)
if(zbX > 0 && zbY > 0)
mouse.mousemove(zbX, zbY) //每次都将鼠标定位到钟表图上,否则影响找图的效果
endif
//初始化坐标点
P1_x1 = Old1_x1, P1_y1 = Old1_y1
P2_x1 = Old2_x1, P2_y1 = Old2_y1
//这里通过遍历来对比两张图的不同点, 思路是每移动五个像素点来进行对比,遍历次数是宽:245/5 = 49 高:340/5 = 68 宽高:245/340
for(j = 1; j <= 68; j++)
for(i = 1; i <= 49; i++)
//得到指定点颜色
P1_cr1 = color.getpixelcolor(P1_x1, P1_y1)
P2_cr1 = color.getpixelcolor(P2_x1, P2_y1)
if(P1_cr1 != P2_cr1)
Count++
if(Count == 5) //这里又做了些控制,因为一旦出现不同点时都是连续的,所以每5次保存一次不同点坐标
Count = 0 //否则后面每次单击时会出现很多错误处,这里你可以调大来试验效果
//保存不同点坐标值
调试输出("P1_cr1: " & P1_cr1 & " P2_cr1: " & P2_cr1)
P1_x1_Array = arraysp.alloc(P1_x1_Array, true, Index + 1) //重定义数组
P1_y1_Array = arraysp.alloc(P1_y1_Array, true, Index + 1)
P1_x1_Array[Index] = P2_x1 //注意这里保存的是第二张图的不同点坐标
P1_y1_Array[Index] = P2_y1
Index = Index + 1
endif
endif
P1_x1 = P1_x1 + 5 //每次移动5个像素点
P2_x1 = P2_x1 + 5
endfor
P1_x1 = Old1_x1
P2_x1 = Old2_x1
P1_y1 = P1_y1 + 5
P2_y1 = P2_y1 + 5
endfor
调试输出("颜色值已经分析完")
arraysp.size(P1_x1_Array, Array_Len)
调试输出("数组大小: " & Array_Len)
i = 0
while(i < Array_Len)
if(Array_Len < 500) //这里分两种情况, 一种是不同点像素小于500个, 鼠标每隔两个像素点单击一次, 这里你可以调大试效果
if(i < Array_Len)
mouse.mousemove(P1_x1_Array, P1_y1_Array)
mouse.leftclick(1)
help.sleep(10)
i = i + 2
endif
else //这里是不同像素点大于500个的,经测试发现有2000多个不同点的,鼠标每隔四个像素点单击一次,这里你可以调大试效果
if(i < Array_Len)
mouse.mousemove(P1_x1_Array, P1_y1_Array)
mouse.leftclick(1)
help.sleep(10)
i = i + 4
endif
endif
endwhile
//将数组内的值清空
arraysp.clear(P1_x1_Array)
arraysp.clear(P1_y1_Array)
//判断下一张图是否出现, 当返回值为1时说明游戏结束了.跳出循环结束脚本
if(大家来找碴.判断下张图(x1, y1, x2, y2) == 1)
break
endif
endwhile
endfunction
//------------------判断下一张图是否出现-----------------------------//
function 判断下张图(P_x1, P_y1, P_x2, P_y2)
var bCtrl, intX, intY,Start
bCtrl = false
调试输出("检测下一张是否出现")
Start = datetime.now()
while(datetime.diff("s", Start, datetime.now()) < 10)
color.findpic(P_x1, P_y1, P_x2, P_y2, "rc:\\开始.bmp", #101010,1.0,0, intX, intY)
if(intX > 0 && intY)
break
else
help.sleep(100)
//开始找完成图片
color.findpic(P_x1, P_y1, P_x2, P_y2, "rc:\\完成.bmp|rc:\\结束.bmp", #101010,1.0,0, intX, intY)
if(intX > 0 && intY > 0)
//说明游戏已经结束
bCtrl = true
break
endif
endif
endwhile
help.sleep(200)
调试输出("下一张图已经出现")
if(bCtrl)
return 1
else
return -1
endif
endfunction
功能 热键1_热键()
//这里添加你要执行的代码
if(Tid > 0)
thread.closethread(Tid, 0)
endif
Global_bCtrl = false
辅助.退出()
功能结束
空间结束
源码下载:
感谢大家关注蓝丝雨精品教程《商业辅助是怎样炼成的》大家如果有什么问题可以回复交流。
购买终身会员的童鞋请与销售专员联系,销售QQ:276102675 (验证信息:TC)
点击进入公司淘宝店:点击进入
|