安卓按键精灵脚本代码 按键冷却代码

需求发布后1小时内收到服务商响应每个需求平均有10个服务商参与95%以上的需求得到了圆满解决所有需求不向雇主收取任何佣金淘宝秋季上新 火力全开抢占流量
按键精灵脚本让它随机点击网页内1-3个链接的脚本代码
有相似问题想解决?专业顾问来帮助您
参与报价,开始赚钱
提交你的报价和方案
中标后交付作品
获得任务赏金
极速:10分钟急速响应
高品质:精选服务商提供服务
放心:不满意可退款
企业管理系统
软件1天速成
CRM客户管理开发
OA办公系统开发
根据浏览的需求为您推荐
交易成功的需求
软件插件开发相关需求
关注猪八戒微信纯按键精灵脚本实现A星寻路,算法源码+示例+详细解释,来吧! _ 综合讨论 - 按键精灵论坛
腾讯微博:
软件版本:2014.05软件大小:76.8M更新时间:2-21
软件版本:3.2.5软件大小:62.5M更新时间:06-06
软件版本:1.2.7软件大小:29.2M更新时间:06-19
软件版本:1.1.0软件大小:12.3M更新时间:12-29
查看: 31944|回复: 612
按键精灵开发者4级可通过提升认证等级来升级勋章:
本帖最后由 kwok 于
11:53 编辑 其实A星算法不是一个新鲜的东西,之前论坛也有帖子,使用递归解法进行A星寻路,原帖: (作者:[backcolor=rgb(229, 237, 242)])递归的代码量惊人的短,只有20行,但是理解起来相当的有难度,至少我是看了好几天。所以我想,如果不用递归,而用传统的循环解法来做A星,行不行呢?循环解A星,百度有很多文章,有详细的算法描述,深入浅出,还是不难理解的,我这里总结下:1、首先把整个地图,划分为若干个小块,通常最简单的小块,全部都是正方形,这些小块,有些是障碍,有些是通道。我们把小块都称为节点。2、每一个表示通道的节点,都具有如下的6个属性
①自己的横坐标
②自己的纵坐标
③自己离起点的距离
④自己离终点的距离
⑤父节点的横坐标
⑥父节点的纵坐标
⑦F值,这个F值,就是属性③和属性④相加得到的和,因为可以计算,所以我们暂时不作为一个单独的属性来记录,而是作为描述使用①②属性很好理解,不解释了;③属性也很简单,代表的是从起点进过多少步到达此节点;④属性,由于在获取到完整的路径之前,你并不知道需要经过多少步会达到终点,所以这个属性实际上是一个估算值,估算的方法也有很多,对整个A星的计算效率也会有影响,我们暂时使用最简单的估算方法:无视障碍,走直角线路到达终点的距离(注意,不走斜线)。⑤⑥属性解释下,这2个坐标是指的你从哪一个节点到达的当前节点,也就是对应的上一个节点。这2个属性可以确保在最终你能找到最短路径。3、寻路过程中我们会用到3个列表,这3个表,通常被设计为一维数组
开放列表。我们在寻路过程中,认为可能符合要求的点,就添加到开放列表中
探索列表。我们对开放列表里面所有的节点进行判断,符合要求的,放到这个表中
路径列表。从探索列表里面所有符合要求的节点中,找出的最短路径的节点4、寻路的步骤
a)将起点放入探索列表,定义为当前节点。
b)检测当前节点周围的节点(本例中进行4方向检测),这些周围的点,称为临时节点。如果该临时节点是通道,那么将其加入开放列表。
将 c 和 d 这2步,作为循环来处理
c)从开放列表中,选取一个F值最小的节点(就是属性③和属性④相加最小,代表着这个节点在当前看来是符合最短路径的要求的),将它从开放列表中去掉,加入到探索列表中。如果开放列表中,有多个节点的F是相等的,那么我们选取属性③比较小的节点(因为距离起点的值是可靠的,而距离终点的值是估算的),如果属性③仍然相等,那么我们选取最新加入到开放列表的那个节点(这一步在大地图的时候,会增加速度)。
d)将这个选出来的点,再次作为当前节点,开始检测它周围的4个临时节点,从这个时候开始,如果临时节点是障碍,我们就舍弃;而如果是通道,我们也不能像第 b)步 那样直接把这个临时节点加入到开放列表。我们还需要判断:第一,该临时节点是否已经被加入了探索列表?如果是,那么舍弃它;第二,该临时节点是否已经在开放列表中?如果是,那么代表这个临时节点和保存在开放列表中的节点,属性①②相同,但属性③⑤⑥必定不完全相同(因为是经由不同的父节点进行检测,这一点需要理解),于是我们对临时节点和保存在开放列表中的节点(属性①②相同的这2个节点)进行属性③的对比(这2个点的属性④是相同的),如果临时节点的属性③比较小,那么我们就将临时节点的信息,替换掉已经保存在开放列表中那个节点的所有信息,否则我们就舍弃这个临时节点;第三,该临时节点是个通道,没有保存在探索列表中,也没有在开放列表中,那么我们把这个临时节点加入到开放列表。
进行 c-d 的循环
e)循环在何时结束?很简单,当终点也被加入到了探索列表中,代表着我们的探索已经完成,这个时候跳出循环
f)循环结束之后,我们获得了一个比较庞大的探索列表,里面包含了我们所有探索过的节点,其中,第一个是起点,最后一个是终点。于是我们从终点开始,检测其父节点的坐标,然后再检测父节点的父节点,最终我们得到了一条从终点指向起点的最短路径。整个A星算法看起来很复杂,但是如果你理解了你会发现其实每一步都不复杂,只不过当地图很大的时候,循环的次数可能很多,而计算机就是用来做这个的,当我们确认算法没有漏洞的时候,不管有多么庞大的数据,最终都会得到一个正确的结果。那么,现在我们开始在按键精灵中来实现这个算法。在我开始的时候,我发现我碰到了一些不大不小的难题:1、对于包含6个属性的节点,通常在其他语言会将其设计为一个结构体(也可以理解为一个对象,或者新的数据类型),然后在程序中对这个结构体进行操作即可,但是按键精灵似乎无法定义结构体,于是我只能把一个节点设计为一个字符串,这个字符串的格式为“x,y,g,h,px,py”,分别对应其6个属性,当需要某个属性的时候,再通过字符串分割的方式来获取,增加了不少代码量,但是终于还是解决了。2、按键精灵中,数组不能作为一个参数来给函数进行传递,因此当我想把数组增、删成员写成单独的1个函数的时候发现做不到,只好定义了4个不同的函数。这2个难题或许是由于我水平不高导致(不熟悉vbs语法),如果有高人指点,感激不尽。OK,终于进入正题了要。首先,进行全局变量的定义Dim openlist()
'定义动态的开放列表
Dim allpoint()
'定义动态的探索列表
Dim path_got()
'定义动态的路径列表
'定义一个用来描述地图的二维数组
'通过变量定义二维数组大小
'通过变量定义二维数组大小
'定义起点X坐标
'定义起点Y坐标
'定义终点X坐标
'定义终点Y坐标
复制代码然后,我们获取地图,在这里使用了一个通过TXT文档获取二维数组的子程序:这个TXT文档是一个矩阵,横向的字符数量(列数)可以理解为X坐标,纵向的字符数量(行数)可以理解为Y坐标。而在文档中,4表示这个点是一个障碍,0表示这个点是一个通道通过读取这个地图,二维数组就具有了具体的数值,为寻路判断作为依据在下面这个子程序中,可能大家会发现,这个二维数组,每一维的下标为0的时候我没有赋值,而是从下标1开始这样做的目的,是为了更好的让大家对应TXT文档的行和列来分辨x和y坐标Sub 获取地图(地图文档)
T = Plugin.File.ReadFileEx(地图文档) '
T=left(T,len(T)-1)
//读出来的数据,每一行后面会有一个“|”号分隔
//将文档最后的“|”号去除
TA = split(T, "|")
mapy = ubound(TA)+1
mapx = len(TA(0))
ReDim map(mapx,mapy)
For j = 1 To mapy
For i = 1 To mapx
map(i, j) = mid(TA(j-1),i, 1)
//根据行和列重新定义地图数组大小,并赋值
复制代码获取了地图之后,我们初始化起点和终点坐标,开始用A星算法进行寻路。当然在寻路之前,我们还需要准备几个对列表进行操作的函数://将节点加入开放列表
Sub 加入开放列表(节点)
Redim Preserve openlist(ubound(openlist) + 1)
openlist(UBound(openlist))=节点
//将节点加入探索列表
Sub 加入探索列表(节点)
Redim Preserve allpoint(ubound(allpoint) + 1)
allpoint(UBound(allpoint))=节点
//将节点加入路径列表
Sub 加入路径列表(节点)
Redim Preserve path_got(UBound(path_got) + 1)
path_got(UBound(path_got))=节点
//以上3个函数,都是在保持数组原有值不变的情况下,增加一个成员
//将节点从开放列表里面删除
Function 移出开放列表(节点)
Dim list_temp
count = UBound(openlist) - 1
list_temp=filter(openlist,节点,false,1)
//'用一个临时数组,接受过滤掉 节点 之后的内容
If UBound(list_temp) = - 1
移出开放列表 = 0
Exit Function
//如果节点被去除之后的列表已经没有任何成员,函数返回0,以便调用处进行判断
Redim openlist(count)
For i = 0 To count
openlist(i)=list_temp(i)
移出开放列表 = 1
//重新定义开放列表的大小,并将临时数组的内容返还到开放列表中
//删除节点成功,函数返回1
End Function
复制代码接下来就是我们的核心内容,A星算法函数源码Function 寻路(起点x, 起点y, 终点x, 终点y)
//定义用来接收参数的变量
//定义“当前节点”的属性变量
//注意,G就是属性3,H就是属性4
//定义“临时节点”的属性变量
//定义检测时需使用的一些临时变量,变量名略蛋疼 - -
//清空3个列表
Redim openlist(- 1 )
Redim allpoint(- 1 )
Redim path_got(- 1 )
//给初始化的起点和终点坐标变量赋值
x1 = 起点x
y1 = 起点y
x2 = 终点x
y2 = 终点y
//给当前节点的属性赋值
px = 起点x
py = 起点y
//将起点(起点就是第一个“当前节点”)加入探索列表
Call 加入探索列表(x & "," & y & "," & g & "," & h & "," & px & "," & py)
//开始执行循环判断
//节点被加入了探索列表,我们将其坐标对应的数组元素值修改为2(原来是0)
map(x, y) = 2
//如果终点也被加入了探索列表,寻路成功,跳出循环
If map(x2, y2) = 2 Then
//开始判断相邻的4个临时节点
//临时节点的G值,为当前节点的G值+1
tg = g + 1
For lg = 0 To 3
//4种情况,临时节点的位置各有不同
Select Case lg
tx = x + 1
tx = x - 1
ty = y + 1
ty = y - 1
End Select
//临时节点的h值,就是该点到终点距离的估算值
th = abs(x2 - tx) + abs(y2 - ty)
//临时节点的父节点坐标,就是当前节点的坐标
//开始判断,如果这个节点是一个通道则判断是否需要加入开放列表
//对应数组元素值为4代表障碍,对应数组元素值为2代表在探索列表中
//只有对应数组元素值为0,才是一个需要判断的节点
If map(tx, ty) = 0 Then
If ubound(openlist) = - 1
//开放列表里面没有任何元素,那么将这个符合条件的节点加入开放列表
Call 加入开放列表(tx & "," & ty & "," & tg & "," & th & "," & tpx & "," & tpy)
k=UBound(openlist)
For i = 0 To k
jp = split(openlist(i), ",")
If cstr(tx) = jp(0) and cstr(ty) = jp(1) Then
//遍历开放列表,如果发现临时节点的坐标和开放列表里面的某个点相同
//则对这2个点的属性③进行比较,将更符合要求的属性③⑤⑥进行替换
If tg < cint(jp(2)) Then
openlist(i) = jp(0) & "," & jp(1) & "," & tg & "," & jp(3) & "," & x & "," & y
If i = k Then
//如果遍历完成后,在开放列表中没有重复的点,那么将临时节点加入开放列表
Call 加入开放列表(tx & "," & ty & "," & tg & "," & th & "," & tpx & "," & tpy)
//从开放列表中,判断F值最小的点
k = UBound(openlist)
For i = 0 To UBound(openlist)
tjp = split(openlist(k), ",")
jp = split(openlist(UBound(openlist) - i), ",")
If cint(tjp(2)) + cint(tjp(3)) > cint(jp(2)) + cint(jp(3)) Then
k = UBound(openlist) - i
If cint(tjp(2)) + cint(tjp(3)) = cint(jp(2)) + cint(jp(3)) Then
If cint(tjp(2)) > cint(jp(2)) Then
k=UBound(openlist) - i
//得到的k,代表开放列表中F值最小的节点的下标
//将这个节点从开放列表中移除,加入到探索列表
//并将其作为“当前节点”,继续下一步判断
jp = split(openlist(k), ",")
px = jp(4)
py = jp(5)
Call 加入探索列表(openlist(k))
//如果将节点移除之后,开放列表里面没有元素了
//移除函数会返回0,代表寻路失败
//此时,我们A星函数也结束,返回一个文本(根据需要也可以返回其他东西)
If 移出开放列表(openlist(k)) = 0 Then
寻路="无法到达"
Exit Function
//当这个循环正常的执行完毕,那么我们就已经获得了完整的探索列表
//从终点开始,构建路径列表
//当我们把一个节点加入到路径列表时,把节点对应的数组元素修改为1(原来是2)
//当然,路径列表里面的节点,我们只需要2个属性即可
k = ubound(allpoint)
Call 加入路径列表(x2 & "," & y2)
map(x2,y2)=1
For i = 0 To ubound(allpoint)
tjp = split(allpoint(k), ",")
jp = split(allpoint(ubound(allpoint) - i), ",")
If jp(0) = tjp(4) and jp(1) = tjp(5) Then
'Call 加入路径列表(allpoint(ubound(allpoint) - i))
Call 加入路径列表(jp(0) & "," & jp(1))
map(jp(0),jp(1))=1
k=ubound(allpoint) - i
//整个A星函数完毕,返回一个代表成功的文本(也可以是其他值)
寻路 = "得到结果"
End Function
复制代码OK,我们的最后一个函数,将寻路之后的结果,输出为一个txt文档Sub 写出路径(路径文档)
For j = 1 To mapy
For i = 1 To mapx
text = text & map(i, j)
text = text & vbcrlf
Call Plugin.File.WriteFileEx(路径文档, text)
复制代码到了这里,也差不多结束了。需要说明的是,3个需要操作的列表,都设置的是全局数组变量,所以,在A星函数执行完毕之后,这3个列表里面都是有相对应的数据的,如果你有兴趣,可以将它们的所有成员输出出来,可能会更好的理解整个算法。总的来说,用按键来实现A星确实比较费事 - - 我在插件区也发了一个帖子,用易语言做了个按键A星的插件,算法原理是一样的,使用起来就很方便了。地址:示例源码和示例地图文档打包下载:完整源码:(1.txt是一个地图,放在D盘根目录配合脚本执行)(, 下载次数:1200)
按键精灵开发者6级(新浪V认证)通过新浪微博加V后自动发放,并替换普通的认证6级勋章。 微博达人(90天)完成新浪微博加V的奖励,结合活动不定期开放申请。学有所成学有所成勋章,新手步入按键学堂的第一枚勋章爱心大使积极帮助新手(可向管理员进行申请)论坛GG按键论坛男性用户勋章论坛MM按键论坛女性用户勋章活动狂人论坛活动狂人举报达人长期举报不良帖子黄金之翼黄金之翼勋章按键明星按键明星勋章潜水员按键潜水员勋章天使勋章天使一样的用户按键图书勋章尊贵的按键图书用户黄瓜勋章(永久)体验商业小精灵活动的奖励鹰眼勋章鹰眼注册用户专属勋章幸运草勋章(永久)商业小精灵限时活动勋章。月全勤论坛自然月(如8.1-8.31)签到满勤,系统会在月底自动判断发放。认证考霸(90天)参加考霸活动,对认证考了十次以上用户的鼓励兔年勋章(360天)兔年纪念勋章(360天)十周年勋章(360天)十周年纪念勋章龙年勋章(360天)龙年纪念勋章(360天)马年勋章(360天) 马年纪念勋章(360天)按键学院按键学院专属勋章,按键学院学员或文章被院刊收入可领取
沙发。。。。。。。。。。
按键精灵开发者4级可通过提升认证等级来升级勋章:骨灰级按键用户3年以上的按键论坛用户按键图书勋章尊贵的按键图书用户黄瓜勋章(永久)体验商业小精灵活动的奖励幸运草勋章(永久)商业小精灵限时活动勋章。
哥,你把这帖子放新手区?我理解不了。
按键精灵开发者6级(新浪V认证)通过新浪微博加V后自动发放,并替换普通的认证6级勋章。 微博达人(90天)完成新浪微博加V的奖励,结合活动不定期开放申请。学有所成学有所成勋章,新手步入按键学堂的第一枚勋章黄瓜勋章(永久)体验商业小精灵活动的奖励幸运草勋章(永久)商业小精灵限时活动勋章。
按键精灵开发者4级可通过提升认证等级来升级勋章:学有所成学有所成勋章,新手步入按键学堂的第一枚勋章潜水员按键潜水员勋章幸运草勋章(永久)商业小精灵限时活动勋章。创业榜样(30天)参加暑期创业征文活动,成为创业榜样!双蛋勋章(30天)双蛋活动勋章(30天)
学习..........
紫猫学员236-斷橋
幸运草勋章(永久)商业小精灵限时活动勋章。
5814561,如果您要查看本帖隐藏内容请回复
A呀!这B孩,C家的呀?光着脚站在D上,没有穿EF,还露着个小GG...
啊啊啊啊啊啊啊啊啊啊啊啊
按键精灵开发者2级可通过提升认证等级来升级勋章:
深度优先搜索算法吗
按键精灵开发者2级可通过提升认证等级来升级勋章:
其实是c语言二叉树遍历算法。不过没有指针,堆栈。用按键,实现起来好困难,而且搜索效率很低
按键精灵开发者4级可通过提升认证等级来升级勋章:
虚谷若谷 发表于
17:26 其实是c语言二叉树遍历算法。不过没有指针,堆栈。用按键,实现起来好困难,而且搜索效率很低能不能别这么专业。你说的3个名词,二叉X,指针,堆栈。我勉强就知道指针是什么……
非常感谢 正在找相关资料
流浪在外的狼
学习中,研究一下
流浪在外的狼
学习中,研究一下
hontaiyan5
浪花一大朵
常州地区老乡
按键14周年庆纪念勋章按键14周年庆纪念勋章(360天)按键精灵开发者6级(新浪V认证)通过新浪微博加V后自动发放,并替换普通的认证6级勋章。 学有所成学有所成勋章,新手步入按键学堂的第一枚勋章
gclove1988
按键精灵开发者1级可通过提升认证等级来升级勋章:
看看也好的
bubaiyouyun
学习啦。。。。。。。。。。
gvsclove1988按键精灵如何让一段代码重复运行
全部答案(共1个回答)
1、智能自动按加红(血值)加蓝(魔值)的键,当发现红或蓝小于 某值(可自由设定)时,就自动按下你放有加红或蓝的药的按键,令你处于不 败之地。 ....2、自动拣...
有一处遗址的栅栏门要用两颗尸鬼头打开
其实你是想自动开枪刷熟练吧??如果是的话直接按着右键不放,一会再切换到别的窗口就可以了!如果不是呢就请说明确的问题是什么!!!
用bluestacks安卓模拟器
答: 你好,请问aa后立刻上厕所对受孕
答: 好在有许多成熟的安全和网络技术,例如虚拟私有网络(VPN)和防火墙等,能够极大地提高Web服务应用的安全和性能,让开发者拥有选择安全技术的自由,而不是非得使用尚...
答: 某些ADSL调制解调器使用USB接口与电脑相连,需要在电脑上安装指定的软件以添加虚拟网卡来进行通信
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415按键精灵 后台回车键代码
本回答由提问者推荐扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
我要用(按键精灵)施放技能每隔4·2秒放一次(技能冷却完)马上放我玩的是DNF,(按键精灵)8·0以上的,令外求教一下怎么做 “小精灵”  拜托了
cqNY56EJ70
扫二维码下载作业帮
2亿+学生的选择
Rem kd//以上标记KeyPress "F1", 1//以上按键F1一次,可以改成你的技能快捷键Delay 4200//以上延时,1000=1秒,可以自行更改Goto kd//以上程序跳转到标记为KD的地方,继续执行脚本,以实现无限循环
为您推荐:
扫描下载二维码}

我要回帖

更多关于 手机按键精灵脚本代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信