【MCBE-指令類(lèi)】二分法求坐標(biāo)簡(jiǎn)化版教程
大家好鴨~ 我是一只萌新UP主,這是我的第一份專(zhuān)欄(最近不打算做視頻),望各位看官們?nèi)B??!
這是一篇關(guān)于MCBE的二分法求坐標(biāo)的簡(jiǎn)化版算法的教程。與Yangzii_大佬的算法相比,本篇教程中的算法命令數(shù)量更少,這也就是"簡(jiǎn)化版"的意義所在。本篇教程還會(huì)穿插其他求坐標(biāo)算法,請(qǐng)各位命令師們根據(jù)實(shí)際情況進(jìn)行選擇哦~
[注]?
1.本專(zhuān)欄僅提供算法,不提供指令。所以需要白嫖的玩家請(qǐng)自行退出~
2.本教程有使用以下資料作為參考,如有侵權(quán),請(qǐng)聯(lián)系我刪除。
①基于記分板的服務(wù)器系統(tǒng)部署 - 系列教程 我的世界Minecraft【BE】基巖版https://www.bilibili.com/video/BV1Ft411e7CT?p=7
②【MCBE命令方塊】告別堆疊?不用函數(shù)?如何在命令方塊鏈里套娃
https://www.bilibili.com/video/BV1e5411t7rV

Ⅰ.二分法求坐標(biāo)簡(jiǎn)化版(我稱(chēng)之為"漸進(jìn)二分法")
本內(nèi)容中以求Y軸坐標(biāo)為例進(jìn)行講解(Y軸坐標(biāo)求取范圍為-256~256)
前置條件:當(dāng)玩家擁有標(biāo)簽posy時(shí),開(kāi)始計(jì)算其Y軸坐標(biāo)。
前置原理:
任意整數(shù)均可以被拆分為2的次方的形式。例如23=16+4+2+1,998=512+256+128+64+32+4+2,337=256+64+16+1
那么我們就可以根據(jù)這個(gè)制作一個(gè)在1tcik內(nèi)就可以算完坐標(biāo)的命令組。
思路:
先在持有posy標(biāo)簽的玩家處生成一個(gè)名為posy的盔甲架
將名為posy的盔甲架傳送到"~ 0 ~"的位置
判斷玩家是否位于Y軸的負(fù)半軸或Y=0的位置(判定目標(biāo)位于負(fù)半軸使用dy來(lái)解決,例如execute @a[tag=posy] ~~~execute @s[y=-256,dy=255] ~~~tag @s add posy_small)
若玩家位于負(fù)半軸,則將名為posy的盔甲架傳送到"~ -256 ~"的位置
以盔甲架作為原點(diǎn),建立局部坐標(biāo)系,檢測(cè)玩家是否位于該坐標(biāo)系的Y軸正方向的256~256格范圍內(nèi)。若是,則將盔甲架向Y軸正方向傳送256格并賦予相應(yīng)分?jǐn)?shù)
以盔甲架作為原點(diǎn),建立局部坐標(biāo)系,檢測(cè)玩家是否位于該坐標(biāo)系的Y軸正方向的128~256格范圍內(nèi)。若是,則將盔甲架向Y軸正方向傳送128格并賦予相應(yīng)分?jǐn)?shù)
以盔甲架作為原點(diǎn),建立局部坐標(biāo)系,檢測(cè)玩家是否位于該坐標(biāo)系的Y軸正方向的64~127格范圍內(nèi)。若是,則將盔甲架向Y軸正方向傳送64格并賦予相應(yīng)分?jǐn)?shù)
~8-n.以盔甲架作為原點(diǎn),建立局部坐標(biāo)系,檢測(cè)玩家是否位于該坐標(biāo)系的Y軸正方向的2~3格范圍內(nèi)。若是,則將盔甲架向Y軸正方向傳送2格并賦予相應(yīng)分?jǐn)?shù)
以盔甲架作為原點(diǎn),建立局部坐標(biāo)系,檢測(cè)玩家是否位于該坐標(biāo)系的Y軸正方向的1~1格范圍內(nèi)。若是,則將盔甲架向Y軸正方向傳送1格并賦予相應(yīng)分?jǐn)?shù)
現(xiàn)在求出了最開(kāi)始盔甲架到玩家的Y軸距離(若玩家位于正半軸,則算出的是"0至玩家"的距離。若位于負(fù)半軸,則是"-256至玩家"的距離),那么現(xiàn)在需要對(duì)所求得的分?jǐn)?shù)進(jìn)行修正:若玩家位于Y=0的位置,則直接將分?jǐn)?shù)設(shè)為0。若玩家位于負(fù)半軸,則用負(fù)半軸最大求取范圍(-256)加上所求得的分?jǐn)?shù),則為Y=0到玩家的距離(如"圖-01")。

11.擊殺名為posy的盔甲架,含有標(biāo)簽posy的玩家的posy標(biāo)簽
那么就結(jié)束了~這里貼出一張成品圖(樣例圖,如"圖-02"所示)

[注:"圖-02"需要玩家擁有標(biāo)簽"want_posy"才會(huì)計(jì)算,支持多人游戲。執(zhí)行方式和順序與mcfuncation的執(zhí)行方式和順序相同]
結(jié)論:本算法使用了34條命令。而與Yangzii_的算法(41條)比較,簡(jiǎn)化了7條指令。計(jì)算的范圍越大,簡(jiǎn)化的數(shù)量就越明顯。
P.S.這里多個(gè)execute不會(huì)造成卡頓,最終都只執(zhí)行1次
Ⅱ.漸進(jìn)法
思路:方法Ⅰ是本方法的進(jìn)階版本。本方法利用的數(shù)據(jù)拆分方式是:
377=300+70+7,3888=3000+800+80+8,9273=9000+200+70+3
P.S.因此這種方法也可以根據(jù)方法Ⅰ進(jìn)行改版,但這種方法與二分法相比,命令會(huì)更多。求取的范圍越大,該方法所需的命令數(shù)量相比二分法所需的命令數(shù)量將會(huì)越多。
Ⅲ.漸遞法
思路:通過(guò)方法Ⅱ進(jìn)行改版。套用遞歸即可大幅度減少命令數(shù)量。
拆分方式:
388=100+100+100+50+10+10+5+1+1或100+100+100+100x8+1x8

END
那么該教程就結(jié)束了~
如有任何問(wèn)題敬請(qǐng)?zhí)岢雠叮∫欢ú灰祖危?/p>