function cood //获取世界坐标
function a_ //用户控制
function a_2 //2D寻路
function a_3 //3D寻路
以a_2为例:
a_ //主模块
- scoreboard objectives add coox dummy
- scoreboard objectives add cooz dummy
- scoreboard objectives add parx dummy
- scoreboard objectives add parz dummy
- scoreboard objectives add F dummy
- scoreboard objectives add i dummy
- #寻路
- #建立子节点
- execute @e[tag=asterisk_selectedN] ~ ~ ~ function a_2:a_createRoot
- #F=G+H
- function a_2:a_getF
- #求最优F
- summon area_effect_cloud ~ ~ ~ {Duration:1,Age:1s,Tags:[Fmin]}
- scoreboard players set @e[tag=Fmin] F 2147483647
- execute @e[tag=asterisk_H] ~ ~ ~ scoreboard players operation @e[tag=Fmin] F < @e[tag=asterisk_H,c=1] F
- scoreboard objectives add M dummy
- execute @e[tag=asterisk_H] ~ ~ ~ scoreboard players operation @e[tag=asterisk_H,c=1] M = @e[tag=asterisk_H,c=1] F
- execute @e[tag=asterisk_H] ~ ~ ~ scoreboard players operation @e[tag=asterisk_H,c=1] M -= @e[tag=Fmin] F
- scoreboard players tag @e[tag=asterisk_H,score_M_min=0,score_M=0] add asterisk_selectedN
- scoreboard players tag @e[tag=asterisk_H,score_M_min=0,score_M=0] add asterisk_selected
- #反向查找
- #获取父节点
- execute @e[tag=asterisk_pN] ~ ~ ~ function a_2:a_getpath
- execute @e[tag=asterisk_destination] ~ ~ ~ execute @e[tag=asterisk_selected,dx=0,dy=0] ~ ~ ~ scoreboard players tag @e[tag=asterisk_destination] add asterisk_p
- execute @e[tag=asterisk_destination] ~ ~ ~ execute @e[tag=asterisk_selected,dx=0,dy=0] ~ ~ ~ function a_2:a_getpath
- #完成
- scoreboard players tag @e[tag=asterisk_origin] add End {Tags:[asterisk_p]}
- execute @e[tag=End] ~ ~ ~ scoreboard players tag @e[tag=asterisk_pN] remove asterisk_pN
复制代码 a_createRoot //创建节点
- scoreboard players add index i 1
- execute @s ~ ~ ~ summon area_effect_cloud ~1 ~ ~ {Duration:210000000,Age:1s,Tags:[asterisk_point,asterisk_pointN,asterisk_mk,asterisk1,r1]}
- execute @s ~ ~ ~ summon area_effect_cloud ~-1 ~ ~ {Duration:210000000,Age:1s,Tags:[asterisk_point,asterisk_pointN,asterisk_mk,asterisk2,r2]}
- execute @s ~ ~ ~ summon area_effect_cloud ~ ~ ~1 {Duration:210000000,Age:1s,Tags:[asterisk_point,asterisk_pointN,asterisk_mk,asterisk3,r3]}
- execute @s ~ ~ ~ summon area_effect_cloud ~ ~ ~-1 {Duration:210000000,Age:1s,Tags:[asterisk_point,asterisk_pointN,asterisk_mk,asterisk4,r4]}
- execute @s ~ ~ ~ summon area_effect_cloud ~1 ~ ~1 {Duration:210000000,Age:1s,Tags:[asterisk_point,asterisk_pointN,asterisk_mk,asterisk5,r5]}
- execute @s ~ ~ ~ summon area_effect_cloud ~-1 ~ ~1 {Duration:210000000,Age:1s,Tags:[asterisk_point,asterisk_pointN,asterisk_mk,asterisk6,r6]}
- execute @s ~ ~ ~ summon area_effect_cloud ~1 ~ ~-1 {Duration:210000000,Age:1s,Tags:[asterisk_point,asterisk_pointN,asterisk_mk,asterisk7,r7]}
- execute @s ~ ~ ~ summon area_effect_cloud ~-1 ~ ~-1 {Duration:210000000,Age:1s,Tags:[asterisk_point,asterisk_pointN,asterisk_mk,asterisk8,r8]}
- #删除重复
- execute @e[tag=asterisk_H] ~ ~ ~ kill @e[tag=asterisk_mk,r=0]
- execute @e[tag=asterisk_selected] ~ ~ ~ kill @e[tag=asterisk_mk,r=0]
- execute @e[tag=asterisk_root] ~ ~ ~ kill @e[tag=asterisk_mk,r=0]
- #删除障碍
- execute @e[tag=asterisk_mk] ~ ~ ~ detect ~ ~ ~ air 0 scoreboard players tag @e[tag=asterisk_mk,c=1] remove asterisk_mk
- scoreboard players tag @e[tag=asterisk_mk] add asterisk_m1 {Tags:[asterisk1]}
- scoreboard players tag @e[tag=asterisk_mk] add asterisk_m2 {Tags:[asterisk2]}
- scoreboard players tag @e[tag=asterisk_mk] add asterisk_m3 {Tags:[asterisk3]}
- scoreboard players tag @e[tag=asterisk_mk] add asterisk_m4 {Tags:[asterisk4]}
- execute @e[tag=asterisk_m1] ~ ~ ~ kill @e[tag=asterisk_point,dx=0,dz=1,rm=0]
- execute @e[tag=asterisk_m1] ~ ~ ~ kill @e[tag=asterisk_point,dx=0,dz=-1,rm=0]
- execute @e[tag=asterisk_m2] ~ ~ ~ kill @e[tag=asterisk_point,dx=0,dz=1,rm=0]
- execute @e[tag=asterisk_m2] ~ ~ ~ kill @e[tag=asterisk_point,dx=0,dz=-1,rm=0]
- execute @e[tag=asterisk_m3] ~ ~ ~ kill @e[tag=asterisk_point,dx=1,dz=0,rm=0]
- execute @e[tag=asterisk_m3] ~ ~ ~ kill @e[tag=asterisk_point,dx=-1,dz=0,rm=0]
- execute @e[tag=asterisk_m4] ~ ~ ~ kill @e[tag=asterisk_point,dx=1,dz=0,rm=0]
- execute @e[tag=asterisk_m4] ~ ~ ~ kill @e[tag=asterisk_point,dx=-1,dz=0,rm=0]
- kill @e[tag=asterisk_mk]
- scoreboard players tag @e[tag=asterisk_point] add asterisk_root
- #得到坐标
- #继承
- execute @s ~ ~ ~ scoreboard players operation @e[tag=asterisk_pointN] coox = @s coox
- execute @s ~ ~ ~ scoreboard players operation @e[tag=asterisk_pointN] cooz = @s cooz
- execute @s ~ ~ ~ scoreboard players operation @e[tag=asterisk_pointN] parx = @s coox
- execute @s ~ ~ ~ scoreboard players operation @e[tag=asterisk_pointN] parz = @s cooz
- #变换
- scoreboard players add @e[tag=asterisk1] coox 1
- scoreboard players add @e[tag=asterisk5] coox 1
- scoreboard players add @e[tag=asterisk7] coox 1
- scoreboard players remove @e[tag=asterisk2] coox 1
- scoreboard players remove @e[tag=asterisk6] coox 1
- scoreboard players remove @e[tag=asterisk8] coox 1
- scoreboard players add @e[tag=asterisk3] cooz 1
- scoreboard players add @e[tag=asterisk5] cooz 1
- scoreboard players add @e[tag=asterisk6] cooz 1
- scoreboard players remove @e[tag=asterisk4] cooz 1
- scoreboard players remove @e[tag=asterisk7] cooz 1
- scoreboard players remove @e[tag=asterisk8] cooz 1
- scoreboard players tag @e[tag=asterisk_pointN] remove asterisk_pointN
- scoreboard players tag @e[tag=asterisk1] remove asterisk1
- scoreboard players tag @e[tag=asterisk2] remove asterisk2
- scoreboard players tag @e[tag=asterisk3] remove asterisk3
- scoreboard players tag @e[tag=asterisk4] remove asterisk4
- scoreboard players tag @e[tag=asterisk5] remove asterisk5
- scoreboard players tag @e[tag=asterisk6] remove asterisk6
- scoreboard players tag @e[tag=asterisk7] remove asterisk7
- scoreboard players tag @e[tag=asterisk8] remove asterisk8
- scoreboard players tag @s remove asterisk_H
- scoreboard players tag @s remove asterisk_selectedN
- #世界坐标->相对坐标
- #execute @e[tag=asterisk_origin] ~ ~ ~ function cood:coox
- #execute @e[tag=asterisk_origin] ~ ~ ~ function cood:cooy
- #execute @e[tag=asterisk_origin] ~ ~ ~ function cood:cooz
- #execute @e[tag=asterisk_point] ~ ~ ~ function cood:coox
- #execute @e[tag=asterisk_point] ~ ~ ~ function cood:cooy
- #execute @e[tag=asterisk_point] ~ ~ ~ function cood:cooz
- #scoreboard players operation @e[tag=asterisk_point] coox -= @e[tag=asterisk_origin] coox
- #scoreboard players operation @e[tag=asterisk_point] cooy -= @e[tag=asterisk_origin] cooy
- #scoreboard players operation @e[tag=asterisk_point] cooz -= @e[tag=asterisk_origin] cooz
- #scoreboard players set @e[tag=asterisk_origin] coox 0
- #scoreboard players set @e[tag=asterisk_origin] cooy 0
- #scoreboard players set @e[tag=asterisk_origin] cooz 0
复制代码 //a_getCood 世界坐标转相对坐标
- execute @e[tag=asterisk_origin] ~ ~ ~ function cood:coox
- execute @e[tag=asterisk_origin] ~ ~ ~ function cood:cooy
- execute @e[tag=asterisk_origin] ~ ~ ~ function cood:cooz
- execute @e[tag=asterisk_destination] ~ ~ ~ function cood:coox
- execute @e[tag=asterisk_destination] ~ ~ ~ function cood:cooy
- execute @e[tag=asterisk_destination] ~ ~ ~ function cood:cooz
- scoreboard players operation @e[tag=asterisk_destination] coox -= @e[tag=asterisk_origin] coox
- scoreboard players operation @e[tag=asterisk_destination] cooy -= @e[tag=asterisk_origin] cooy
- scoreboard players operation @e[tag=asterisk_destination] cooz -= @e[tag=asterisk_origin] cooz
- scoreboard players set @e[tag=asterisk_origin] coox 0
- scoreboard players set @e[tag=asterisk_origin] cooy 0
- scoreboard players set @e[tag=asterisk_origin] cooz 0
复制代码 //a_getF 获取F(N)
- scoreboard objectives add Gx dummy
- scoreboard objectives add Gz dummy
- scoreboard objectives add Hx dummy
- scoreboard objectives add Hz dummy
- scoreboard objectives add GMx dummy
- scoreboard objectives add GMz dummy
- scoreboard objectives add HMx dummy
- scoreboard objectives add HMz dummy
- scoreboard objectives add prd dummy
- scoreboard players set @e[tag=asterisk_point] GMx 0
- scoreboard players set @e[tag=asterisk_point] GMz 0
- scoreboard players set @e[tag=asterisk_point] HMx 0
- scoreboard players set @e[tag=asterisk_point] HMz 0
- scoreboard players set 10 prd 10
- scoreboard players set 14 prd 14
- #获取到起点的G
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Gx = @e[tag=asterisk_point,c=1] coox
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Gz = @e[tag=asterisk_point,c=1] cooz
- execute @e[tag=asterisk_point,score_Gx=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMx -= @e[tag=asterisk_point,c=1] Gx
- execute @e[tag=asterisk_point,score_Gz=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMz -= @e[tag=asterisk_point,c=1] Gz
- execute @e[tag=asterisk_point,score_Gx_min=0] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMx = @e[tag=asterisk_point,c=1] Gx
- execute @e[tag=asterisk_point,score_Gz_min=0] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMz = @e[tag=asterisk_point,c=1] Gz
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Gx = @e[tag=asterisk_point,c=1] GMx
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Gz = @e[tag=asterisk_point,c=1] GMz
- execute @e[tag=asterisk_point,score_Gx=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMx -= @e[tag=asterisk_point,c=1] GMz
- scoreboard players set @e[tag=asterisk_point] GMz 0
- execute @e[tag=asterisk_point,score_GMx=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMz -= @e[tag=asterisk_point,c=1] GMx
- execute @e[tag=asterisk_point,score_GMx_min=0] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMz = @e[tag=asterisk_point,c=1] GMx
- execute @e[tag=asterisk_point,score_GMx=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMx = @e[tag=asterisk_point,c=1] Gx
- execute @e[tag=asterisk_point,score_GMx_min=0] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMx = @e[tag=asterisk_point,c=1] Gz
- #获取到终点的H
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Hx = @e[tag=asterisk_point,c=1] coox
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Hz = @e[tag=asterisk_point,c=1] cooz
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Hx -= @e[tag=asterisk_destination] coox
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Hz -= @e[tag=asterisk_destination] cooz
- execute @e[tag=asterisk_point,score_Hx=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMx -= @e[tag=asterisk_point,c=1] Hx
- execute @e[tag=asterisk_point,score_Hz=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMz -= @e[tag=asterisk_point,c=1] Hz
- execute @e[tag=asterisk_point,score_Hx_min=0] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMx = @e[tag=asterisk_point,c=1] Hx
- execute @e[tag=asterisk_point,score_Hz_min=0] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMz = @e[tag=asterisk_point,c=1] Hz
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Hx = @e[tag=asterisk_point,c=1] HMx
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] Hz = @e[tag=asterisk_point,c=1] HMz
- execute @e[tag=asterisk_point,score_Hx=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMx -= @e[tag=asterisk_point,c=1] HMz
- scoreboard players set @e[tag=asterisk_point] HMz 0
- execute @e[tag=asterisk_point,score_HMx=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMz -= @e[tag=asterisk_point,c=1] HMx
- execute @e[tag=asterisk_point,score_HMx_min=0] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMz = @e[tag=asterisk_point,c=1] HMx
- execute @e[tag=asterisk_point,score_HMx=-1] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMx = @e[tag=asterisk_point,c=1] Hx
- execute @e[tag=asterisk_point,score_HMx_min=0] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMx = @e[tag=asterisk_point,c=1] Hz
- #最终的F
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMx *= 10 prd
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMx *= 10 prd
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] GMz *= 14 prd
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] HMz *= 14 prd
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] F = @e[tag=asterisk_point,c=1] GMx
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] F += @e[tag=asterisk_point,c=1] GMz
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] F += @e[tag=asterisk_point,c=1] HMx
- execute @e[tag=asterisk_point] ~ ~ ~ scoreboard players operation @e[tag=asterisk_point,c=1] F += @e[tag=asterisk_point,c=1] HMz
- scoreboard players tag @e[tag=asterisk_point] add asterisk_H
- scoreboard players tag @e[tag=asterisk_point] remove asterisk_point
- scoreboard objectives remove Gx dummy
- scoreboard objectives remove Gz dummy
- scoreboard objectives remove Hx dummy
- scoreboard objectives remove Hz dummy
- scoreboard objectives remove GMx dummy
- scoreboard objectives remove GMz dummy
- scoreboard objectives remove HMx dummy
- scoreboard objectives remove HMz dummy
- scoreboard objectives remove prd dummy
复制代码 a_a_getpath //追踪父节点
- scoreboard objectives add patx dummy
- scoreboard objectives add patz dummy
- execute @s ~ ~ ~ execute @e[tag=asterisk_selected,r=2] ~ ~ ~ scoreboard players operation @e[tag=asterisk_selected,c=1] patx = @e[tag=asterisk_selected,c=1] coox
- execute @s ~ ~ ~ execute @e[tag=asterisk_selected,r=2] ~ ~ ~ scoreboard players operation @e[tag=asterisk_selected,c=1] patz = @e[tag=asterisk_selected,c=1] cooz
- execute @s ~ ~ ~ scoreboard players operation @e[tag=asterisk_selected,r=2] patx -= @s parx
- execute @s ~ ~ ~ scoreboard players operation @e[tag=asterisk_selected,r=2] patz -= @s parz
- scoreboard players tag @e[score_patx_min=0,score_patx=0,score_patz_min=0,score_patz=0] add asterisk_p
- scoreboard players tag @e[score_patx_min=0,score_patx=0,score_patz_min=0,score_patz=0] add asterisk_pN
- scoreboard players tag @s remove asterisk_pN
- scoreboard players tag @s remove asterisk_selected
- scoreboard players tag @e[tag=asterisk_selectedN] remove asterisk_selectedN
- scoreboard objectives remove patx dummy
- scoreboard objectives remove patz dummy
- #路径可视化标记
- execute @e[tag=asterisk_pN] ~ ~ ~ execute @e[tag=r1,r=0] ~ ~ ~ setblock ~ ~ ~ wool 1
- execute @e[tag=asterisk_pN] ~ ~ ~ execute @e[tag=r2,r=0] ~ ~ ~ setblock ~ ~ ~ wool 2
- execute @e[tag=asterisk_pN] ~ ~ ~ execute @e[tag=r3,r=0] ~ ~ ~ setblock ~ ~ ~ wool 3
- execute @e[tag=asterisk_pN] ~ ~ ~ execute @e[tag=r4,r=0] ~ ~ ~ setblock ~ ~ ~ wool 4
- execute @e[tag=asterisk_pN] ~ ~ ~ execute @e[tag=r5,r=0] ~ ~ ~ setblock ~ ~ ~ wool 5
- execute @e[tag=asterisk_pN] ~ ~ ~ execute @e[tag=r6,r=0] ~ ~ ~ setblock ~ ~ ~ wool 6
- execute @e[tag=asterisk_pN] ~ ~ ~ execute @e[tag=r7,r=0] ~ ~ ~ setblock ~ ~ ~ wool 7
- execute @e[tag=asterisk_pN] ~ ~ ~ execute @e[tag=r8,r=0] ~ ~ ~ setblock ~ ~ ~ wool 8
- #资源消耗高的方式
- #scoreboard objectives add iL dummy
- #scoreboard players set 2147483647 iL 2147483647
- #execute @s ~ ~ ~ scoreboard players tag @e[dx=-1,dz=1,rm=0,tag=asterisk_selected] add asterisk_pf
- #execute @s ~ ~ ~ scoreboard players tag @e[dx=-1,dz=-1,rm=0,tag=asterisk_selected] add asterisk_pf
- #execute @s ~ ~ ~ scoreboard players tag @e[dx=1,dz=1,rm=0,tag=asterisk_selected] add asterisk_pf
- #execute @s ~ ~ ~ scoreboard players tag @e[dx=1,dz=-1,rm=0,tag=asterisk_selected] add asterisk_pf
- #execute @s ~ ~ ~ scoreboard players tag @e[dz=1,rm=0,tag=asterisk_selected] add asterisk_pf
- #execute @s ~ ~ ~ scoreboard players tag @e[dz=-1,rm=0,tag=asterisk_selected] add asterisk_pf
- #execute @e[tag=asterisk_pf] ~ ~ ~ scoreboard players operation @e[tag=asterisk_pf,c=1] iL = @e[tag=asterisk_pf,c=1] i
- #execute @e[tag=asterisk_pf] ~ ~ ~ scoreboard players operation 2147483647 iL < @e[tag=asterisk_pf,c=1] iL
- #execute @e[tag=asterisk_pf] ~ ~ ~ scoreboard players operation @e[tag=asterisk_pf,c=1] iL -= 2147483647 iL
- #execute @e[tag=asterisk_pf] ~ ~ ~ scoreboard players tag @e[tag=asterisk_pN] remove asterisk_pN
- #scoreboard players tag @e[score_iL=0,score_iL_min=0] add asterisk_p
- #scoreboard players tag @e[score_iL=0,score_iL_min=0] add asterisk_pN
- #scoreboard players tag @e[tag=asterisk_pf] remove asterisk_pf
- #scoreboard objectives remove iL
复制代码 |