如何使用按鍵精靈計(jì)算最近的怪物/包裹/金礦坐標(biāo)?
在游戲中,我們常常需要尋找離人物最近或最遠(yuǎn)的怪物、包裹或金礦等。這時(shí)候,按鍵精靈可以幫助我們快速計(jì)算出它們的坐標(biāo)。下面,我將介紹一些相關(guān)的知識(shí)點(diǎn)和代碼段,幫助大家了解如何使用按鍵精靈計(jì)算最近的怪物/包
在游戲中,我們常常需要尋找離人物最近或最遠(yuǎn)的怪物、包裹或金礦等。這時(shí)候,按鍵精靈可以幫助我們快速計(jì)算出它們的坐標(biāo)。下面,我將介紹一些相關(guān)的知識(shí)點(diǎn)和代碼段,幫助大家了解如何使用按鍵精靈計(jì)算最近的怪物/包裹/金礦坐標(biāo)。
數(shù)學(xué)知識(shí):已知坐標(biāo)求距離
在計(jì)算最近的怪物/包裹/金礦坐標(biāo)時(shí),我們需要用到數(shù)學(xué)知識(shí):已知坐標(biāo)求距離。假設(shè)已知坐標(biāo)A(X1,Y1)、B(X2,Y2),那么AB之間的距離有一個(gè)計(jì)算公式:
距離sqr((X1-X2)2 (Y1-Y2)2)
即:距離等于兩個(gè)坐標(biāo)的橫坐標(biāo)之差的平方,加上縱坐標(biāo)之差的平方,兩個(gè)平方相加,再取它們的平方根。
冒泡排序算法
接下來(lái),讓我們來(lái)介紹一種排序算法——冒泡排序(Bubble Sort)。它的名字由來(lái)是因?yàn)樵酱蟮脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端,像魚(yú)吐泡泡一樣。同樣,也可以讓越大的元素沉到數(shù)列底部。
冒泡排序算法的運(yùn)作如下:
1. 比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
2. 對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。
3. 針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
4. 持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
思路解析
當(dāng)我們獲取到人物的坐標(biāo),以及各個(gè)物品的坐標(biāo)并存入數(shù)組后,就可以計(jì)算人物距離各個(gè)物品的坐標(biāo)距離,存入數(shù)組。然后,通過(guò)各個(gè)坐標(biāo)距離的比較,從而獲取到最小距離(距離人物最近的物品)以及最大距離(距離人物最遠(yuǎn)的物品),輸出相對(duì)應(yīng)的物品坐標(biāo)。
大神代碼段
以下是一段按鍵精靈腳本代碼,用于計(jì)算最近的怪物/包裹/金礦坐標(biāo)。其中,coordinate為物品坐標(biāo),range為距離,Arr為物品坐標(biāo)的數(shù)組,Ub為物品坐標(biāo)的最大下界。
```vb
x 300:y 330 '人物的坐標(biāo)
coordinate "200,300|10,20|60,800|500,321|456,789|421,6|300,320|320,290" '物品(怪物)的坐標(biāo)
Arr split(coordinate, "|") '將坐標(biāo)分割成數(shù)組
Ub UBound(Arr) '獲取數(shù)組最大下界
range(Ub)用來(lái)存儲(chǔ)每個(gè)物品離人物的距離,xx(Ub)用來(lái)存儲(chǔ)每個(gè)物品的X坐標(biāo),yy(Ub)用來(lái)存儲(chǔ)每個(gè)物品的Y坐標(biāo)
Redim range(Ub), xx(Ub), yy(Ub) '初始化數(shù)組
'計(jì)算所有的物品坐標(biāo),離人物的距離,存在range數(shù)組里
For i 0 To Ub
x1 split(Arr(i), ",")(0): y1 split(Arr(i), ",")(1)
xx(i) x1: yy(i) y1
range(i) sqr((x1 - x) ^ 2 (y1 - y) ^ 2)
Next
'通過(guò)冒泡排序,將人物離每個(gè)物品的距離,按照從小到大的順序排列,并根據(jù)距離的排序,相應(yīng)的調(diào)整物品的X坐標(biāo)和Y坐標(biāo)在數(shù)組中的位置。
For m 0 To Ub
For n m 1 To Ub
If range(m) > range(n) Then
k range(m): range(m) range(n): range(n) k
k xx(m): xx(m) xx(n): xx(n) k
k yy(m): yy(m) yy(n): yy(n) k
End If
Next
Next
TracePrint "距離人物最近的坐標(biāo)為:" xx(0) "," yy(0)
TracePrint "距離人物最遠(yuǎn)的坐標(biāo)為:" xx(Ub) "," yy(Ub)
```
知識(shí)拓展
除了使用已知坐標(biāo)求距離的方法外,我們還可以通過(guò)找圖來(lái)獲取到人物(或者其他玩意)的坐標(biāo),再通過(guò)找圖來(lái)獲取到物品(或者其他不明物品)的坐標(biāo),然后套用上面的思路進(jìn)行計(jì)算。