|
|

|
| 堆节点型 | | |
| index | 整数型 ' 格子索引 (y*宽+x+1) | | | | f | 整数型 | | | | g | 整数型 | | |
|
| 路径段型 | | |
| 起点X | 整数型 | | | | 起点Y | 整数型 | | | | 终点X | 整数型 | | | | 终点Y | 整数型 | | | | 方向 | 整数型 ' 原始方向 1-8 | | | | 输出方向 | 整数型 ' DIR_NUM 映射后的方向数 | | | | 距离 | 整数型 | | | | 步数 | 整数型 | | | | 窗口程序集名 | 保 留 | 保 留 | 备 注 | | (未填写程序集名) | | | | | 变量名 | 类 型 | 数组 | 备 注 | | 变量名 | 类 型 | 数组 | 备 注 | | 地图_宽 | 整数型 | | | 地图_高 | 整数型 | | | 地图_数据 | 字节型 | 0" ' 一维字节 | | 地图_已加载 | 逻辑型 | | | 清除度场 | 字节型 | 0" ' 障碍物 | | 清除度场_开启 | 逻辑型 | | | DX_偶数 | 整数型 | 8 | | DY_偶数 | 整数型 | 8 | | DX_奇数 | 整数型 | 8 | | DY_奇数 | 整数型 | 8 | | MOVE_COST | 整数型 | 8 | | DIR_NUM | 整数型 | 8 | | 寻路结果文本 | 文本型 | | | 压缩结果文本 | 文本型 | | | 窗口程序集名 | 保 留 | 保 留 | 备 注 | | (未填写程序集名) | | | | | 变量名 | 类 型 | 数组 | 备 注 | | 变量名 | 类 型 | 数组 | 备 注 | | 堆_数据 | 堆节点型 | 0 | | 堆_大小 | 整数型 | | | 窗口程序集名 | 保 留 | 保 留 | 备 注 | | (未填写程序集名) | | | | | 变量名 | 类 型 | 数组 | 备 注 | | 变量名 | 类 型 | 数组 | 备 注 | | 节点_g | 整数型 | 0 | | 节点_f | 整数型 | 0 | | 节点_parent | 整数型 | 0 | | 节点_pdir | 字节型 | 0 | | 节点_state | 字节型 | 0" ' 0=未 | DX_偶数 = { 0, 1, 2, 1, 0, -1, -2, -1 }DY_偶数 = { -1, -1, 0, 0, 1, 0, 0, -1 } DX_奇数 = { 0, 1, 2, 1, 0, -1, -2, -1 }DY_奇数 = { -1, 0, 0, 1, 1, 1, 0, 0 } MOVE_COST = { 20, 14, 20, 14, 20, 14, 20, 14 } DIR_NUM = { 8, 9, 6, 3, 2, 1, 4, 7 }地图_已加载 = 假 清除度场_开启 = 真 |
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| x | 整数型 | | | | y | 整数型 | | | 返回 (y × 地图_宽 + x + 1 )|
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| x | 整数型 | | | | y | 整数型 | | | 返回 (x ≥ 0 且 x < 地图_宽 且 y ≥ 0 且 y < 地图_高 )|
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| x | 整数型 | | | | y | 整数型 | | |
.局部变量 idx, 整数型 如果真 (取反 (坐标合法 (x, y )) )返回 (假)如果真结束 idx = 取格子索引 (x, y )返回 (地图_数据 [idx ] ≠ 0 ) |
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| x | 整数型 | | | | y | 整数型 | | | | dx | 整数型 | | | | dy | 整数型 | | | 如果真 (dx = 0 或 dy = 0 )返回 (真) 如果真结束 返回 (坐标可行走 (x + dx, y ) 且 坐标可行走 (x, y + dy )) |
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| x1 | 整数型 | | | | y1 | 整数型 | | | | x2 | 整数型 | | | | y2 | 整数型 | | |
.局部变量 dx, 整数型 .局部变量 dy, 整数型 .局部变量 pairs, 整数型 .局部变量 rx, 整数型 .局部变量 ry, 整数型 .局部变量 h, 整数型 dx = 取绝对值 (x1 - x2 )dy = 取绝对值 (y1 - y2 )pairs = 选择 (dx \ 2 < dy, dx \ 2, dy ) rx = dx - 2 × pairs ry = dy - pairs h = 28 × pairs 如果 (rx = 1 且 ry > 0 )h = h + 14 + 20 (ry - 1 )否则 h = h + 14 × rx + 20 × ry 如果结束 返回 (h ) |
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| x | 整数型 | | | | y | 整数型 | | |
.局部变量 idx, 整数型 .局部变量 c, 整数型 如果真 (取反 (清除度场_开启 ) 或 取数组成员数 (清除度场 ) = 0 )返回 (0 )如果真结束 idx = 取格子索引 (x, y )如果真 (idx < 1 或 idx > 取数组成员数 (清除度场 )) 返回 (0 )如果真结束 c = 清除度场 [idx ]如果真 (c = 0 或 c ≥ 3 ) 返回 (0 )如果真结束 返回 ( (3 - c ) × 23 ) 重定义数组 (堆_数据, 假, 0 )堆_大小 = 0 |
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| i | 整数型 | | |
.局部变量 p, 整数型 .局部变量 temp, 堆节点型 判断循环首 (i > 1 )p = i \ 2 如果 (堆_数据 [i ].f < 堆_数据 [p ].f )temp = 堆_数据 [i ]堆_数据 [i ] = 堆_数据 [p ]堆_数据 [p ] = temp i = p 否则 跳出循环 ()如果结束 判断循环尾 ()|
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| i | 整数型 | | |
.局部变量 左, 整数型 .局部变量 右, 整数型 .局部变量 best, 整数型 .局部变量 temp, 堆节点型 判断循环首 (真)左 = i × 2 右 = 左 + 1 best = i 如果 (左 ≤ 堆_大小 且 堆_数据 [左 ].f < 堆_数据 [best ].f )best = 左 如果结束 如果 (右 ≤ 堆_大小 且 堆_数据 [右 ].f < 堆_数据 [best ].f )best = 右 如果结束 如果 (best = i )跳出循环 ()如果结束 temp = 堆_数据 [i ]堆_数据 [i ] = 堆_数据 [best ]堆_数据 [best ] = temp i = best 判断循环尾 ()|
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| idx | 整数型 | | | | f | 整数型 | | | | g | 整数型 | | |
.局部变量 node, 堆节点型 node.index = idx node.f = f node.g = g 加入成员 (堆_数据, node )堆_大小 = 取数组成员数 (堆_数据 )堆_上浮 (堆_大小 ).局部变量 result, 堆节点型 如果真 (堆_大小 = 0 )result.index = -1 result.f = 0 result.g = 0 返回 (result )如果真结束 result = 堆_数据 [1 ]堆_数据 [1 ] = 堆_数据 [堆_大小 ]删除成员 (堆_数据, 堆_大小, 1 )堆_大小 = 堆_大小 - 1 如果 (堆_大小 > 0 )堆_下沉 (1 )如果结束 返回 (result )返回 (堆_大小 = 0 ) |
| (暂未填写DLL命令名) | | | |
| (未填写库文件名) | |
| (未填写命令名) | |
| 文件路径 | 文本型 | | |
.局部变量 文件号, 整数型 .局部变量 文件长度, 整数型 .局部变量 文件内容, 字节集 .局部变量 头1, 整数型 .局部变量 总格数, 整数型 .局部变量 i, 整数型 .局部变量 数据长度, 整数型 地图_释放 () 文件号 = 打开文件 (文件路径, #读入, #无限制 )如果真 (文件号 = 0 )输出调试文本 (" [! ] 无法打开地图文件: " + 文件路径 )返回 (假)如果真结束 移动读写位置 (文件号, #文件首, 0 )文件长度 = 取文件长度 (文件号 )文件内容 = 读入字节集 (文件号, 文件长度 )关闭文件 (文件号 )如果真 (文件长度 < 13 )输出调试文本 (" [! ] 地图文件太小" )返回 (假)如果真结束 头1 = 取字节集数据 (取字节集中间 (文件内容, 1, 4 ), #整数型, )地图_宽 = 取字节集数据 (取字节集中间 (文件内容, 5, 4 ), #整数型, )地图_高 = 取字节集数据 (取字节集中间 (文件内容, 9, 4 ), #整数型, )输出调试文本 (" [+ ] 地图: " + 到文本 (地图_宽 ) + " x " + 到文本 (地图_高 ) + " = " + 到文本 (地图_宽 × 地图_高 ) + " 格" )总格数 = 地图_宽 × 地图_高 数据长度 = 文件长度 - 12 如果真 (数据长度 < 总格数 )输出调试文本 (" [! ] 地图数据不完整" )地图_宽 = 0 地图_高 = 0 返回 (假)如果真结束 重定义数组 (地图_数据, 假, 总格数 ) 变量循环首 (1, 总格数, 1, i ) 地图_数据 [i ] = 文件内容 [i + 12 ] 变量循环尾 ()地图_已加载 = 真 清除度场_计算 ()返回 (真)地图_宽 = 0 地图_高 = 0 重定义数组 (地图_数据, 假, 0 )重定义数组 (清除度场, 假, 0 )地图_已加载 = 假 .局部变量 总格数, 整数型 .局部变量 i, 整数型 .局部变量 队列, 整数型, , "0" .局部变量 队头, 整数型 .局部变量 队尾, 整数型 .局部变量 ci, 整数型 .局部变量 cx, 整数型 .局部变量 cy, 整数型 .局部变量 nd, 整数型 .局部变量 d, 整数型 .局部变量 nx, 整数型 .局部变量 ny, 整数型 .局部变量 ni, 整数型 .局部变量 pDX, 整数型, , "0" .局部变量 pDY, 整数型, , "0" 如果真 (取反 (地图_已加载 )) 返回 ()如果真结束 总格数 = 地图_宽 × 地图_高 重定义数组 (清除度场, 假, 总格数 ) 变量循环首 (1, 总格数, 1, i ) 如果 (地图_数据 [i ] = 0 ) 清除度场 [i ] = 0 加入成员 (队列, i )  否则  清除度场 [i ] = 255  如果结束  变量循环尾 () 队头 = 1 队尾 = 取数组成员数 (队列 )判断循环首 (队头 ≤ 队尾 )ci = 队列 [队头 ]队头 = 队头 + 1 cx = (ci - 1 ) % 地图_宽 cy = (ci - 1 ) \ 地图_宽 nd = 清除度场 [ci ] + 1 如果 (位与 (cx, 1 ) = 1 ) pDX = DX_奇数 pDY = DY_奇数 否则 pDX = DX_偶数 pDY = DY_偶数 如果结束 变量循环首 (1, 8, 1, d
|
|