最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

無(wú)坐標(biāo)反饋:尋路思路

2023-08-27 20:11 作者:叁森N  | 我要投稿

因?yàn)槲易约菏且奥纷右稽c(diǎn)點(diǎn)自己摸瞎寫(xiě)的,沒(méi)有進(jìn)行過(guò)系統(tǒng)學(xué)習(xí),學(xué)習(xí)的時(shí)間也不是很長(zhǎng),大概一兩個(gè)月沒(méi),計(jì)算過(guò).

所以下面的結(jié)構(gòu)看會(huì)很亂,有條件興趣的可以復(fù)制到編譯器中進(jìn)行查看,最好能教我一下,謝謝.

八方向?qū)ぢ匪悸穫未a結(jié)構(gòu):


Function 八方向?qū)ぢ?方向)

??Dim 八方區(qū)域,人物中心點(diǎn),第一次獲取,第二次獲取

??人物中心點(diǎn)={X,Y}

??八方區(qū)域["左上"]={X-30,Y-30}

??八方區(qū)域["上"]={X,Y-30}

??八方區(qū)域["右上"]={X+30,Y-30}

??八方區(qū)域["左"]={X-30,Y}

??八方區(qū)域["右"]={X+30,Y}

??八方區(qū)域["左下"]={X-30,Y+30}

??八方區(qū)域["下"]={X,Y+30}

??八方區(qū)域["右下"]={X+30,Y+30}//大概就是這么一個(gè)意思

??If 方向 = "上" Then //方向的傳參參數(shù)是人物要走的方向,具體參考通過(guò)額外的判斷得出

????TracePrint "如果方向?yàn)樯蠒r(shí)需要判斷的區(qū)域?yàn)?左上,上,右上"

????第一次獲取 = GetPixelColor(x, y)//這里的XY是移動(dòng)時(shí)一定會(huì)變動(dòng)的坐標(biāo)點(diǎn)

????Tap 八方區(qū)域["上"] : Delay 500//點(diǎn)擊要走的坐標(biāo)

????第二次獲取=GetPixelColor(x, y)//這里的XY與第一次獲取必須相同一致.

????//判斷

????If 第一次獲取 = 第二次獲取 Then?

??????TracePrint "這兩個(gè)點(diǎn)顏色沒(méi)有變動(dòng),意味著人物沒(méi)有移動(dòng)"

??????//因?yàn)闆](méi)有移動(dòng),我們加一個(gè)嵌套

??????// Rem 標(biāo)記點(diǎn)

??????第一次獲取 = GetPixelColor(x, y)//重新給第一次獲取賦值,作為后面是否移動(dòng)的判斷

??????Tap 八方區(qū)域["左上"] : Delay 500//這次點(diǎn)擊要["左上"]的坐標(biāo)

??????第二次獲取=GetPixelColor(x, y)//賦值

??????If 第一次獲取 = 第二次獲取 Then?

????????TracePrint "代表向左上移動(dòng)也沒(méi)有變化,那么就只有["右上"]一個(gè)方向了"

????????Tap 八方區(qū)域["右上"] : Delay 500

??????Else //只有二兩獲取的值不一樣才會(huì)跳到這一行,從這一行開(kāi)始,還需要進(jìn)行最后一次判斷

????????第一次獲取 = GetPixelColor(x, y)//重新給第一次獲取賦值,作為后面是否移動(dòng)的判斷

????????Tap 八方區(qū)域["上"] : Delay 500//向左上是可以走的,走完之后我們?cè)僮遊上]坐標(biāo)

????????第二次獲取 = GetPixelColor(x, y)

????????If 第一次獲取 = 第二次獲取 Then?

??????????TracePrint "這兩個(gè)值又相等了,證明左上再向上的位置也是障礙物,這是一個(gè)死胡同"

??????????Tap 八方區(qū)域["右下"]: Delay 500//因?yàn)槲覀儎偛攀亲叩搅俗笊?所以這里要走回去復(fù)位

??????????第一次獲取 = GetPixelColor(x, y)//再次賦值,用于向右上走的判斷

??????????Tap 八方區(qū)域["右上"] //我們上面已經(jīng)試過(guò)左上,那里走不通,這次我們從右上開(kāi)始走

??????????第二次獲取 = GetPixelColor(x, y)

??????????If 第一次獲取 = 第二次獲取 Then?

????????????TracePrint?"這里的代碼其實(shí)就是上面從左上開(kāi)始走,下面那一段的復(fù)制,可以直接修改一下坐標(biāo),或者將左上與右下的坐標(biāo)對(duì)調(diào),用GOTO去循環(huán)"

????????????//比如這樣, 八方區(qū)域["右上"]={原先左上的坐標(biāo)}

????????????//八方區(qū)域["左上"]={原先右上的坐標(biāo)},

????????????//Goto 標(biāo)記點(diǎn)

??????????End If

????????End If

??????End If?

????End If???

??ElseIf 方向 = "下" Then

????TracePrint "如果方向?yàn)樯蠒r(shí)需要判斷的區(qū)域?yàn)?左下,下,右下"

??ElseIf 方向 = "左" Then

????TracePrint "如果方向?yàn)樯蠒r(shí)需要判斷的區(qū)域?yàn)?左上,左,左下"

??ElseIf 方向 = "右" Then

????TracePrint "如果方向?yàn)樯蠒r(shí)需要判斷的區(qū)域?yàn)?右上,右,右下"

??End If

??//后面的方向如果不想復(fù)制那么多,可以再造一個(gè)函數(shù),用傳參進(jìn)行精簡(jiǎn)

End Function


Function 遍歷尋路(方向)

??Dim 區(qū)域,二值化,max_x,max_y,min_x,min_y,下標(biāo)(),j,m,n,i,坐標(biāo),排序,最終計(jì)算坐標(biāo)

??Dim 二值化數(shù)量

??If 方向 = "左" Then?

????區(qū)域 = {X1,Y1,X2,Y2}

??ElseIf 方向 = "右" Then

????區(qū)域 = {X1,Y1,X2,Y2}

??ElseIf 方向 = "右上" Then

????區(qū)域 = {X1,Y1,X2,Y2}

??ElseIf 方向 = "右下" Then

????區(qū)域 = {X1,Y1,X2,Y2}

??ElseIf 方向 = "左上" Then

????區(qū)域 = {X1,Y1,X2,Y2}

??ElseIf 方向 = "左下" Then

????區(qū)域 = {X1,Y1,X2,Y2}

??Else?

????區(qū)域 = {X1,Y1,X2,Y2}

??End If

??m = 0 : n = 1 : j = 0//先將值給賦了

??坐標(biāo) = Array():排序 = Array()

??///截圖至內(nèi)存

??KeepCapture?

??副本名稱 = Ocr( {X1,Y1,X2,Y2}, 顏色, 0.9)//這個(gè)是一定要有的,可以放別的結(jié)構(gòu)里,但一定要有這一段

??//這個(gè)是用來(lái)判斷當(dāng)前處于什么類型的地圖,從而得到相應(yīng)二值化數(shù)據(jù)

//如果是傳奇類的游戲,大多地面都是一個(gè)顏色的,那些可以不用專門(mén)去取色,直接調(diào)校完定義變量就可以了

??For i = 0 To (區(qū)域(3) / 30) //將要遍歷的區(qū)域以30為單位進(jìn)行分割,如果要再嚴(yán)謹(jǐn)一點(diǎn)可以在后面-1

????//這里有兩個(gè)FOR I=0 TO N的結(jié)構(gòu),一個(gè)是用來(lái)存儲(chǔ)X的數(shù)組,一個(gè)是用來(lái)存儲(chǔ)Y軸的

????For i = 0 To (區(qū)域(2)/ 30)

??????顏色數(shù)量 = 獲取區(qū)域顏色數(shù)量(X1,Y1,X2,Y2)

??????//上面的顏色數(shù)量={},是一個(gè)函數(shù),里面的公式就是上面提到的副本名稱,大概是這樣寫(xiě)的:

??????//IF 副本名稱 ="地圖1" Then 二值化="" :ElseIf 副本名稱 ="地圖2" Then FG 二值化=""?End If?

??????//??????顏色數(shù)量 = GetColorNum(區(qū)域坐標(biāo), 二值化, 1.0)

??????m = m + 1//每循環(huán)一次,M的值要同步+1

??????If IsNumeric(顏色數(shù)量)=True Then//這里加一個(gè)數(shù)值判斷,因?yàn)楹竺娴呐袛嗍菙?shù)值類型的,如果是空值會(huì)判斷不了,報(bào)錯(cuò)

??????Else?

????????Exit Function?

??????End If???

??????If 顏色數(shù)量 > 1 Then//第一次篩選,顏色大于600

????????下標(biāo)={X1+30*(m-1), Y1+30*(n-1), X2+30*m, Y2+30*n}

????????顏色數(shù)量 = 獲取區(qū)域顏色數(shù)量(下標(biāo)(2) - 50, 下標(biāo)(3) - 50, 下標(biāo)(2) + 50, 下標(biāo)(3) + 50)

????????//????????顏色數(shù)量 = GetColorNum(下標(biāo)(2)-50,下標(biāo)(3)-50,下標(biāo)(2)+50,下標(biāo)(3)+50,"", 1.0)

????????If 顏色數(shù)量 > 10 Then //二次篩選,向外拓展20,數(shù)量必定要大于之前

??????????坐標(biāo)(j) = Array(下標(biāo)(0), 下標(biāo)(1))

??????????j = j + 1

????????End If???????

??????End If

????Next

????n = n + 1

????m = 0

??Next

??If UBOUND(坐標(biāo)) <= 0 Then //UBound 為0時(shí),判斷人物卡在了一個(gè)比較奇怪的地方,所以需要小幅度移動(dòng)一下,這樣可以提高穩(wěn)定性

????//當(dāng)然,如果會(huì)數(shù)組排序的話,這一串基本是用不到的,我是實(shí)在搞不明白排序的取值,不得以才用這種蠢B方式

????//最下面會(huì)說(shuō)一下我對(duì)這個(gè)最大值最小值的應(yīng)用理解,理論上是OK的

????TracePrint "區(qū)域內(nèi)無(wú)符合坐標(biāo)"?//沒(méi)有找到

????If 方向 = "左" Then?

??????Tap X,Y:Delay 800

????ElseIf 方向 = "右" Then

??????Tap X,Y : Delay 800

????ElseIf 方向 = "左上"??Then

??????Tap X,Y:Delay 800

????ElseIf 方向 = "左下" Then//下走

??????Tap X,Y:Delay 800

????ElseIf 方向 = "右上"?Then//向上走

??????Tap X,Y:Delay 800

????ElseIf 方向 = "右下"?Then?

??????Tap X,Y:Delay 800

????End If

??End If???

??Dim 上顏色數(shù)量,下顏色數(shù)量,左顏色數(shù)量,右顏色數(shù)量,可點(diǎn)擊坐標(biāo)= 坐標(biāo)()

??//這里我們?cè)龠M(jìn)行一次切割,這次切割的目的是為了篩選出更加精準(zhǔn)的坐標(biāo)

??//這里定義了四個(gè)方向,我們將上面第一次篩選出來(lái)的坐標(biāo)再運(yùn)算一次,如果這個(gè)坐標(biāo)的上下左右區(qū)域都有足夠多符合條件的顏色數(shù)量

??//那么是不是就可以判斷出,這個(gè)坐標(biāo)是在路的中間的呢????

??For i = 0 To UBOUND(坐標(biāo))???

????上顏色數(shù)量 =獲取區(qū)域顏色數(shù)量(坐標(biāo)(i,0),坐標(biāo)(i,1)-30,坐標(biāo)(i,0)+30,坐標(biāo)(i,1))

????下顏色數(shù)量 =獲取區(qū)域顏色數(shù)量(坐標(biāo)(i,0),坐標(biāo)(i,1)+30,坐標(biāo)(i,0)+30,坐標(biāo)(i,1)+60)

????左顏色數(shù)量 =獲取區(qū)域顏色數(shù)量(坐標(biāo)(i,0)-30,坐標(biāo)(i,1),坐標(biāo)(i,0),坐標(biāo)(i,1)+30)

????右顏色數(shù)量 =獲取區(qū)域顏色數(shù)量(坐標(biāo)(i,0)+30,坐標(biāo)(i,1),坐標(biāo)(i,0)+60,坐標(biāo)(i,1)+30)

????If 上顏色數(shù)量 > 600 and 下顏色數(shù)量 > 600 and 左顏色數(shù)量 > 600 and 右顏色數(shù)量 > 600 Then //四方同時(shí)存在顏色

??????可點(diǎn)擊坐標(biāo)(i) = Array(坐標(biāo)(i, 0), 坐標(biāo)(i, 1))//這樣我們就得到了我們最終可找的所有在路中間的坐標(biāo)

????End If

??Next

??ReleaseCapture?

??//釋放內(nèi)存

??Dim 基準(zhǔn)點(diǎn)()??

??//下面這一段就是我自己的蠢B代碼,因?yàn)閷?shí)在不會(huì)排序,所以只能取巧用第一個(gè),或者最后一個(gè)坐標(biāo)來(lái)進(jìn)行移動(dòng)

??If 方向 = "左" or 方向 = "左上"or 方向 = "左下" Then //取第一個(gè)坐標(biāo)遞增?????

????j = 0

????基準(zhǔn)點(diǎn)(0)= GetPixelColor(533, 185)??

????For i=0 To UBOUND(可點(diǎn)擊坐標(biāo))

??????Tap 可點(diǎn)擊坐標(biāo)(j,0),可點(diǎn)擊坐標(biāo)(j,1)+30

??????TracePrint 可點(diǎn)擊坐標(biāo)(j,0),可點(diǎn)擊坐標(biāo)(j,1)+30:Delay 800

??????基準(zhǔn)點(diǎn)(1) = GetPixelColor(533, 185)

??????If 基準(zhǔn)點(diǎn)(0) = 基準(zhǔn)點(diǎn)(1) Then

????????j=j+1

????????Tap 可點(diǎn)擊坐標(biāo)(j,0),可點(diǎn)擊坐標(biāo)(j,1)+30:Delay 800

??????Else?

????????Exit For

??????End If?

????Next?

??ElseIf 方向 = "右" or 方向 = "右下"or 方向 = "右上"Then //取最后一個(gè)坐標(biāo)遞減

????j = UBOUND(可點(diǎn)擊坐標(biāo))

????基準(zhǔn)點(diǎn)(0)= GetPixelColor(X,Y)??

????For i=0 To UBOUND(可點(diǎn)擊坐標(biāo))

??????Tap 可點(diǎn)擊坐標(biāo)(j,0),可點(diǎn)擊坐標(biāo)(j,1)+30

??????TracePrint 可點(diǎn)擊坐標(biāo)(j,0),可點(diǎn)擊坐標(biāo)(j,1)+30:Delay 800

??????基準(zhǔn)點(diǎn)(1) = GetPixelColor(533, 185)

??????If 基準(zhǔn)點(diǎn)(0) = 基準(zhǔn)點(diǎn)(1) Then

????????j=j-1

????????Tap 可點(diǎn)擊坐標(biāo)(j,0),可點(diǎn)擊坐標(biāo)(j,1)+30:Delay 800

??????Else?

????????Exit For

??????End If?

????Next?

??Else?

??End If

??////下面就是我對(duì)排序的實(shí)際應(yīng)用得出的理論猜想,但我自己沒(méi)有能力實(shí)現(xiàn),想法說(shuō)一下,如果有大佬解出來(lái)的,請(qǐng)讓我抄一下作業(yè)

??max_x = 0

??j = 0//重置變量

??For i=0 To UBOUND (可點(diǎn)擊坐標(biāo))//建立排序數(shù)組

????If 可點(diǎn)擊坐標(biāo)(i, 0) > max_x Then?

??????max_x = 可點(diǎn)擊坐標(biāo)(i, 0)

??????max_y = 可點(diǎn)擊坐標(biāo)(i, 1)

??????//??????排序(j)=Array(坐標(biāo)(i, 0), 坐標(biāo)(i, 1))????

??????排序(j) = Array(max_x, max_y)

??????i = i + 1

??????j = j + 1?

????End If

??Next

??//找出第一個(gè)排序數(shù)組中最大值與最小值

??//??TracePrint?"最大值為X:?"&排序(UBOUND (排序),0),排序(UBOUND (排序),1)

??//??TracePrint?"次大值為X:?"&排序(UBOUND (排序)-1,0),排序(UBOUND (排序)-1,1)?

??//??TracePrint "最小值為 :?"&排序(0,0),排序(0,1)

??//??TracePrint "次小值為 :?"&排序(0+1,0),排序(0+1,1)

??//??max_x = 排序(UBOUND(排序), 0)

??//??max_y = 排序(UBOUND(排序), 1)

??//??min_x = 排序(0, 0)

??//??min_y = 排序(0, 1)?

??//???

??//上面的我會(huì)了一點(diǎn)點(diǎn),但是,怎么再?gòu)倪@些數(shù)組里面找出Y的最大值與最小值呢?

??//嗯,大概意思就是:

??//比如我要走左上位置,那我就需要找到X坐標(biāo)中的最小值,并且這個(gè)X坐標(biāo)對(duì)應(yīng)的Y坐標(biāo)也是這些數(shù)組對(duì)應(yīng)的Y坐標(biāo)中的最小值

??//同樣的,走左下位置,我要找的就是X的最小值,并且這個(gè)X對(duì)應(yīng)的Y坐標(biāo)是這個(gè)數(shù)組中Y坐標(biāo)的最大值

End Function

無(wú)坐標(biāo)反饋:尋路思路的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
昌黎县| 烟台市| 巴里| 凤庆县| 建德市| 神农架林区| 石台县| 乾安县| 长岛县| 杂多县| 高青县| 深圳市| 德钦县| 黑龙江省| 城口县| 清涧县| 上思县| 多伦县| 灵川县| 惠安县| 罗江县| 凤凰县| 洪江市| 开化县| 托克托县| 承德市| 马山县| 乌拉特中旗| 谢通门县| 嘉祥县| 栾城县| 环江| 忻城县| 通海县| 封丘县| 横山县| 吉木萨尔县| 科技| 临清市| 涞源县| 乐清市|