|
发表于 2022-6-27 04:09:12
|
显示全部楼层
[地图类]
createNewMap --新建地图
addCollision --添加障碍物
removeCollision--移除障碍物
freeMap--释放指定地图
printMap--输出指定地图可视图档(BMP)
setRoadColor --设置输入/输出路面颜色
setWallColor--设置输入/输出牆体颜色
setPathColor--设置输出路径颜色
mapSaveAs--保存二进制地图
mapLoadFrom--载入二进制地图
readBitmap --载入BMP地图//根据设置的牆体颜色和路面颜色判断
enableAutoPrint--是否允许寻路自动输出路线图(BMP) 默认地图名称: id_mapid.bmp
setOutputDirectory--设置寻路路径图输出目录[不同ID分别输出默认进程路径]
isRoad--检查指定坐标是否为路
isCollision--检查指定坐标是否为障碍
[寻路类]
initialize--寻路初始化(每次用完寻路最好都调用一次,清理缓存+重新实例化)
setHeuristic--设置寻路启发式
setObliqueValue--设置斜角花费值
setStepValue--设置直角花费值
enableCorner--寻ˊ路是否允许拐角
start--开始寻路(返回TC数组字符串或一般的字符串路径座标)
//返回TC数组的格式如: array("1" = array("x" = 15, "y" = 20), "2" = array("x" = 16, "y" = 21),..................)
//一般格式如: 15,16|16,21|........
详细调用方法
本帖隐藏的内容
var enum_Manhattan = 0//枚举值::曼哈顿
var enum_Euclidean = 1//枚举值::欧几里得
var NULL = 0
//模块地址缓存
var g_hModule = 0
//线程句柄缓存
var g_hThread = 0
//临界区句柄缓存
var g_mutex = 0
//函数地址缓存
var pfn_addCollision = 0
var pfn_createNewMap = 0
var pfn_freeMap = 0
var pfn_initialize = 0
var pfn_removeCollision = 0
var pfn_setHeuristic = 0
var pfn_setObliqueValue = 0
var pfn_setStepValue = 0
var pfn_start = 0
var pfn_printMap = 0
var pfn_setWallColor = 0
var pfn_setRoadColor = 0
var pfn_setPathColor = 0
var pfn_enableAutoPrint = 0
var pfn_enableCorner = 0
var pfn_setOutputDirectory = 0
var pfn_mapSaveAs = 0
var pfn_mapLoadFrom = 0
var pfn_isRoad = 0
var pfn_isCollision = 0
var pfn_readBitmap = 0
function LoadLibraryW(str)
return dllcall("kernel32.dll", "HMODULE", "LoadLibraryW", "wchar *", str)
end
function FreeLibrary(hModule)
return dllcall("kernel32.dll", "BOOL", "FreeLibrary", "HMODULE", hModule)
end
function GetProcAddress(hModule, funName)
return dllcall("kernel32.dll", "FARPRO", "GetProcAddress", "HMODULE", hModule, "char *", funName)
end
function new(nSize, type, &len = 0)
var void = array()
select(type)
case "char"
void["void"] = array("char" = nSize, "value" = "")
case "wchar"
void["void"] = array("wchar" = nSize, "value" = "")
case "long"
void["void"] = array("long" = nSize, "value" = "")
case "short"
void["void"] = array("short" = nSize, "value" = "")
case "byte"
void["void"] = array("byte" = nSize, "value" = "")
case "longlong"
void["void"] = array("longlong" = nSize, "value" = "")
default
return 0
end
len = structlen(void)
return structmalloc(void)
end
//检查TC是否为调试模式
function TC_NO_DEBUG()
return strfind(getparam(), "debug") == -1
end
function preLoad()
syssetcurrentpath(sysgetprocesspath())
var bret = false
while(1)
var hModule = NULL
if(!TC_NO_DEBUG())
hModule = LoadLibraryW("D:\\MyFiles\\4.VSProject\\C++\\astar\\Release\\astar.dll")
else
hModule = LoadLibraryW(".\\astar.dll")//载入插件
end
if(NULL == hModule)//检查返回值
break
end
g_hModule = hModule
bret = true
traceprint(strformat("hModule = 0x%X", hModule))
break
end
if(!bret)
traceprint("<错误>DLL加载失败。")
exit()
else
if(!getUndocumentApi())
traceprint("<错误>DLL函数获取失败。")
exit()
end
end
traceprint("<系统>初始化完成")
end
//获取函数地址
function getUndocumentApi()
var hModule = g_hModule
pfn_createNewMap = GetProcAddress(hModule, "createNewMap")
traceprint(strformat("pfn_createNewMap = 0x%X", pfn_createNewMap))
pfn_addCollision = GetProcAddress(hModule, "addCollision")
traceprint(strformat("pfn_addCollision = 0x%X", pfn_addCollision))
pfn_removeCollision = GetProcAddress(hModule, "removeCollision")
traceprint(strformat("pfn_removeCollision = 0x%X", pfn_removeCollision))
pfn_freeMap = GetProcAddress(hModule, "freeMap")
traceprint(strformat("pfn_freeMap = 0x%X", pfn_freeMap))
//
pfn_initialize = GetProcAddress(hModule, "initialize")
traceprint(strformat("pfn_initialize = 0x%X", pfn_initialize))
pfn_setHeuristic = GetProcAddress(hModule, "setHeuristic")
traceprint(strformat("pfn_setHeuristic = 0x%X", pfn_setHeuristic))
pfn_setStepValue = GetProcAddress(hModule, "setStepValue")
traceprint(strformat("pfn_setStepValue = 0x%X", pfn_setStepValue))
pfn_setObliqueValue = GetProcAddress(hModule, "setObliqueValue")
traceprint(strformat("pfn_setObliqueValue = 0x%X", pfn_setObliqueValue))
pfn_enableCorner = GetProcAddress(hModule, "enableCorner")
traceprint(strformat("pfn_enableCorner = 0x%X", pfn_enableCorner))
pfn_enableAutoPrint = GetProcAddress(hModule, "enableAutoPrint")
traceprint(strformat("pfn_enableAutoPrint = 0x%X", pfn_enableAutoPrint))
pfn_start = GetProcAddress(hModule, "start")
traceprint(strformat("pfn_start = 0x%X", pfn_start))
//
pfn_printMap = GetProcAddress(hModule, "printMap")
traceprint(strformat("pfn_printMap = 0x%X", pfn_printMap))
pfn_setWallColor = GetProcAddress(hModule, "setWallColor")
traceprint(strformat("pfn_setWallColor = 0x%X", pfn_setWallColor))
pfn_setRoadColor = GetProcAddress(hModule, "setRoadColor")
traceprint(strformat("pfn_setRoadColor = 0x%X", pfn_setRoadColor))
pfn_setPathColor = GetProcAddress(hModule, "setPathColor")
traceprint(strformat("pfn_setPathColor = 0x%X", pfn_setPathColor))
pfn_setOutputDirectory = GetProcAddress(hModule, "setOutputDirectory")
traceprint(strformat("pfn_setOutputDirectory = 0x%X", pfn_setOutputDirectory))
pfn_mapSaveAs = GetProcAddress(hModule, "mapSaveAs")
traceprint(strformat("pfn_mapSaveAs = 0x%X", pfn_mapSaveAs))
pfn_mapLoadFrom = GetProcAddress(hModule, "mapLoadFrom")
traceprint(strformat("pfn_mapLoadFrom = 0x%X", pfn_mapLoadFrom))
pfn_isRoad = GetProcAddress(hModule, "isRoad")
traceprint(strformat("pfn_isRoad = 0x%X", pfn_isRoad))
pfn_isCollision = GetProcAddress(hModule, "isCollision")
traceprint(strformat("pfn_isCollision = 0x%X", pfn_isCollision))
pfn_readBitmap = GetProcAddress(hModule, "readBitmap")
traceprint(strformat("pfn_readBitmap = 0x%X", pfn_readBitmap))
//检查是否所有函数地址不为0
var bret0 = pfn_createNewMap && pfn_addCollision && pfn_removeCollision && pfn_freeMap
var bret1 = pfn_initialize && pfn_setHeuristic && pfn_setObliqueValue && pfn_setStepValue && pfn_start && pfn_enableCorner
var bret2 = pfn_printMap && pfn_setWallColor && pfn_setRoadColor && pfn_enableAutoPrint && pfn_setPathColor
var bret3 = pfn_setOutputDirectory && pfn_mapSaveAs && pfn_mapLoadFrom && pfn_isRoad && pfn_isCollision && pfn_readBitmap
return bret0 && bret1 && bret2 && bret3
end
//新建地图
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[unsigned short]宽
//参数4:[unsigned short]高
//成功返回1否则0
function createNewMap(id, mapid, w, h)
return pointercall("long", pfn_createNewMap, "short", id, "DWORD", varaddress(mapid), "short", w, "short", h)
end
//添加障碍物
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[unsigned short]x座标
//参数4:[unsigned short]y座标
//成功返回1否则0
function addCollision(id, mapid, x, y)
return pointercall("long", pfn_addCollision, "short", id, "DWORD", varaddress(mapid), "short", x, "short", y)
end
//移除障碍物
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[unsigned short]x座标
//参数4:[unsigned short]y座标
//成功返回1否则0
function removeCollision(id, mapid, x, y)
return pointercall("long", pfn_removeCollision, "short", id, "DWORD", varaddress(mapid), "short", x, "short", y)
end
//释放地图
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//成功返回1否则0
function freeMap(id, mapid)
return pointercall("long", pfn_freeMap, "short", id, "DWORD", varaddress(mapid))
end
//寻路初始化(实例化)
//参数1:[unsigned short]自定义编号(0-65535)
//成功返回1否则0
function initialize(id)
return pointercall("long", pfn_initialize, "short", id)
end
//设置寻路启发式模式
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[unsigned char] 0:使用曼哈顿距离 1:使用欧几里得距离 (默认0)
//成功返回1否则0
function setHeuristic(id, heuristic)
return pointercall("long", pfn_setHeuristic, "short", id, "byte", heuristic)
end
//设置寻路直行花费代价
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[unsigned long]代价数值,预设为10
//成功返回1否则0
function setStepValue(id, value)
return pointercall("long", pfn_setStepValue, "short", id, "long", value)
end
//设置寻路斜行花费代价
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[unsigned long]代价数值,预设为14
//成功返回1否则0
function setObliqueValue(id, value)
return pointercall("long", pfn_setObliqueValue, "short", id, "long", value)
end
//设置寻路是否允许拐角
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[unsigned char]1允许0不允许
//成功返回1否则0
function enableCorner(id, b)
return pointercall("long", pfn_enableCorner, "short", id, "byte", b)
end
//是否允许寻路自动输出路径图
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[unsigned char] true允许 false不允许 (默认false)
//成功返回1否则0
function enableAutoPrint(id, b)
return pointercall("long", pfn_enableAutoPrint, "short", id, "byte", b)
end
//开始寻路
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[unsigned short]起点x座标
//参数4:[unsigned short]起点y座标
//参数5:[unsigned short]终点x座标
//参数6:[unsigned short]终点y座标
//参数7:[wchar_t*]接收返回路径的空字符串指针
//参数8:[unsigned char]返回路径格式0:TC数组字符串 1:一般字符串如: 123,321|456,789
//成功返回1 失败返回0 编号超出限制返回-1 未初始化返回-2
//返回的格式如 array("1" = array("x" = 15, "y" = 20))
function start(id, mapid, x1, y1, x2, y2, &path, retmode)
var tmpstr = ""
var size = 0
//预估大约需要的wchar_t字节数
if(0 == retmode)
size = strlen("\"9999\"=array(\"x\"=9999,\"y\"=9999)") * (mabs(x1 - x2) + mabs(y1 - y2)) * 2 * 2
else
size = strlen("9999,9999|") * (mabs(x1 - x2) + mabs(y1 - y2)) * 2 * 2
end
//申请字符串内存空间
var wstr = new(size, "wchar")
var nret = pointercall("long", pfn_start, "short", id, "DWORD", varaddress(mapid), "short", x1, "short", y1, "short", x2, "short", y2, "DWORD", wstr, "byte", retmode)
if(1 == nret)
//读出字符串直到 '\0'
path = addressvalue(wstr, "wchar *")
end
//释放字符串指针(很重要)
structfree(wstr)
return nret
end
//输出指定地图
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[c**t wchar_t*]输出完整路径包含名称(BMP)
//成功返回1 失败返回0 编号超出限制返回-1
function printMap(id, mapid, fileName)
return pointercall("long", pfn_printMap, "short", id, "DWORD", varaddress(mapid), "DWORD", varaddress(fileName))
end
//设置输出地图牆体颜色
//参数1:[DWORD]十进制RGB整数
//成功返回1 失败返回0
function setWallColor(color)
return pointercall("long", pfn_setWallColor, "DWORD", color)
end
//设置输出地图可走路面颜色
//参数1:[DWORD]十进制RGB整数
//成功返回1 失败返回0
function setRoadColor(color)
return pointercall("long", pfn_setRoadColor, "DWORD", color)
end
//设置输出地图寻路路径颜色
//参数1:[DWORD]十进制RGB整数
//成功返回1 失败返回0
function setPathColor(color)
return pointercall("long", pfn_setPathColor, "DWORD", color)
end
//输出指定路径输出目录
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[c**t wchar_t*]要设置的路径输出目录(BMP)
function setOutputDirectory(id, fileDir)
return pointercall("long", pfn_setOutputDirectory, "short", id, "DWORD", varaddress(fileDir))
end
//输出二进制地图
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[c**t wchar_t*]要保存二进制地图的路径
function mapSaveAs(id, mapid, fileName)
return pointercall("long", pfn_mapSaveAs, "short", id, "DWORD", varaddress(mapid), "DWORD", varaddress(fileName))
end
//载入二进制地图
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[c**t wchar_t*]要载入的二进制地图路径
function mapLoadFrom(id, mapid, fileName)
return pointercall("long", pfn_mapLoadFrom, "short", id, "DWORD", varaddress(mapid), "DWORD", varaddress(fileName))
end
//查看某个座标是否为路
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[unsigned short]x座标
//参数4:[unsigned short]y座标
function isRoad(id, mapid, x, y)
return pointercall("long", pfn_isRoad, "short", id, "DWORD", varaddress(mapid), "short", x, "short", y)
end
//查看某个座标是否为障碍
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[unsigned short]x座标
//参数4:[unsigned short]y座标
function isCollision(id, mapid, x, y)
return pointercall("long", pfn_isCollision, "short", id, "DWORD", varaddress(mapid), "short", x, "short", y)
end
//查看某个座标是否为障碍
//参数1:[unsigned short]自定义编号(0-65535)
//参数2:[wchar_t*]地图名称
//参数3:[unsigned short]BMP地图的路径
function readBitmap(id, mapid, fileName)
return pointercall("long", pfn_readBitmap, "short", id, "DWORD", varaddress(mapid), "DWORD", varaddress(fileName))
end
|
|