求游戏自动走路(绕开障碍)算法
求游戏自动走路(绕开障碍)算法,不能用call鼠标点击内存地址那种方法,
这个游戏不支持鼠标点到哪人走到哪
就是想弄一个边走路边打怪的算法,找怪打怪均已经实现了,现在需要一个走路的。
可以通过内存地址获得游戏的纵横(x,y)坐标,已实现
==============================================以下为我的实现。。
Plugin.dm.ReadInt这个是读取纵横坐标的内存地址B9CE3D8是xB9CE3DC是y
goto zg是走到一个地方就自动找怪打怪
Call wzp()就是调用往左跑的函数。。其他类似
zflg=1 就是往左跑,zflg=0往右跑
sflg=1 就是往上跑,sflg=0 就是往下跑
==============================
Sub runRush
If zflg = 1 Then
Rem jxwz
result1 = Plugin.dm.ReadInt(dbhwnd, "B9CE3D8", 1)
Call wzp()
result2 = Plugin.dm.ReadInt(dbhwnd,"B9CE3D8",1)
If result1 = result2 & sflg = 1 Then
result1 = Plugin.dm.ReadInt(dbhwnd,"B9CE3DC",1)
Call wsp()
result2 = Plugin.dm.ReadInt(dbhwnd, "B9CE3DC", 1)
else
If result1 = result2 Then
result1 = Plugin.dm.ReadInt(dbhwnd,"B9CE3DC",1)
Call wxp()
result2 = Plugin.dm.ReadInt(dbhwnd, "B9CE3DC", 1)
If result1 = result2 Then
zflg = 0
Goto zg
End If
Else
Goto zg
End If
End If
Else
Rem jxwy
result1 = Plugin.dm.ReadInt(dbhwnd, "B9CE3D8", 1)
Call wyp()
result2 = Plugin.dm.ReadInt(dbhwnd,"B9CE3D8",1)
If result1 = result2 & sflg = 1 Then
result1 = Plugin.dm.ReadInt(dbhwnd,"B9CE3DC",1)
Call wsp()
result2 = Plugin.dm.ReadInt(dbhwnd, "B9CE3DC", 1)
else
If result1 = result2 Then
result1 = Plugin.dm.ReadInt(dbhwnd,"B9CE3DC",1)
Call wxp()
result2 = Plugin.dm.ReadInt(dbhwnd, "B9CE3DC", 1)
If result1 = result2 Then
If result1 = result2 Then
zflg = 1
Goto zg
End If
Else
Goto zg
End If
End If
End If
End If
End Sub
[解决办法]
delphi的递归最好用了。
[解决办法]
走迷宫?
一直向左转,即可
如果迷宫有循环通路,则需要记住走过的路,才能避免循环
[解决办法]
不要一直向左走啊,那样会转圈的。
[解决办法]
A*算法是最常用的,也最简单.
[解决办法]
这样的思路是不行的,效率不说,都是瞎转,而且不知道怎么走。
解决方法:
1. 你说了有障碍就往别的地方, 所以对了,你先找出障碍,绘制出地图;
2. 用A星算法实现走路;
不要认为绘制地图很难的事, 只要知道障碍, 绘制黑白地图就可以了, 如黑的障碍,白的通行,得到一个黑白的BMP图片,做为游戏的地图寻路文件。 剩下的A星寻路已经都帮你实现了. 网上 搜寻 传奇2 寻路源代码
分析地图了,但有没怪这个是判断不到的,需要你另外判断,这个很难。 最差的算法,就是遇到怪后,移动到旁边,重新计算路径。