綠色是起點,藍色是終點
電腦自己閃避前方障礙物
這個要怎麼做到呢?
首先,一個很簡單的概念
遇到障礙物怎麼辦?
俗話說,山不轉路轉,路不轉人轉...
所以,轉彎!
這個概念不難吧!
只不過要達到這個效果
必須要
1. 取得目前座標
2. 標記目前朝向方向 (面向上?下?左?右?)
之所以要取得朝向方向,是因為要取得「前方是否有障礙」的資訊
但是要轉彎請固定轉一個方向,順時鐘或逆時鐘選一個!
不要一會逆時鐘,一會順時鐘,可能會讓你的物件永遠到不了目的地!
原則上來說,上面那樣已經解決了大部分的問題
但是如果碰到「凹地」呢?
看到這張圖這樣就是凹地
和目的地朝反方向
「目的地」會把你的物件吸過去
但是閃避機制又會把你的物件彈回來
這樣彈來彈去 永遠到不了目的地
所以我們要寫一段程式修正
也就是,如果你的物件,前方有三個座標,圍成一個凹字
你就要讓物件直接繞道了,不要進去陷阱!
這樣就解決問題了
但是還有更刁難的凹字!
這個時候,我們就不侷限在一個「完美的凹地」才要轉
只要碰上「半邊凹地」就要轉彎了!
這樣做就會變成半邊凹地
可是兩個半邊凹地之間,可能有一塊座標不是凹地...
我們的物件就又被騙進去了...
於是,我們讓程式「凡走過必作下記錄」
如果那一格曾經是半凹地,就把他列入黑名單...
變成不能行走的格子,這樣又形成一個半凹地
你的物件就會不斷閃躲了!
如此一來應該所向無敵...
[ 範例程式在此 (含原始碼函式 ) ]
但是在此還是要強調
這樣走出來的路線,絕對不是最佳路徑
如果你想要走最佳路徑,這樣是行不通的...
因此,像目前市面上「衛星導航」「尋找最佳路徑」不是這樣弄的
是用遞迴程式,一個一個路去走,算出每一個長度
然後再挑他所找到的最短路徑.....
但是這只是個遊戲,或許不用那麼認真.....
(更何況限定移動半徑只有三格的情況下..)
DESIGN IDEA BY FINALFRANK, ALL RIGHTS RESERVED.
留言列表