資訊內容
Scratch少兒編程|5分鐘系列-自動走迷宮|智能AI
?前面我們給大家介紹過一個走迷宮的小游戲,今天我們就來小試身手,讓scratch實現自動走迷宮的功能。
?自動走迷宮,我們肯定要有一個智能的套路,比如智能尋徑,人工智能 等等,不過今天介紹的這個功能似乎也算是帶點智能,畢竟是讓程序自己走嘛。
?好了,在開始之前我們先介紹一種摸墻走迷宮的算法(一提算法,不禁覺得好高大上。其實就是一種分析問題的套路而已)。
?經典的摸墻算法可以簡單總結為:在一個連通的迷宮圖中我們用左右其中的任意一只手摸著墻就一定可以走出這個迷宮。也稱為繞墻走算法,是一種迷宮搜索的初級算法。
?下面我們就使用左手摸墻的走法實現這個算法。算法實現可以用下面的流程圖來表示:
?我們來分析一下流程中有哪些關鍵點
?1.走到墻邊
?2.檢測左邊是否存在墻壁
?3.檢測前面是否存在墻壁
?4.左右轉向
?通過上面分析,好像也沒什么難點。那么就讓我們動手試一下吧
?1.導入迷宮圖,創建角色
?程序開始時,我們可以使用前期的迷宮游戲中使用的迷宮地圖作為游戲背景,再選擇一個小球作為走迷宮的主角角色。
?如果還沒有迷宮地圖,可在公眾號中回復“迷宮圖”
?在這個迷宮圖中,我們為了防止小球走到迷宮外面,我們要提前把入口封起來,讓迷宮只有一個出口可以走出去。
?2.走到墻邊
?這個功能沒有什么復雜的,就是讓角色一直沿著既定的方向前進,直到碰到墻壁即可。這里可以使用偵測中的“碰到顏色”積木來實現
?3.檢測左邊是否存在墻壁
?我們通過流程圖可以發現在角色行走過程中要不停的判斷左邊是否存在墻壁,所以我們就可以定義一個自定義積木。讓這個積木專門做檢測事件。
?同時我們為了得到檢測結果,我們還需要一個左側是否存在墻壁的變量,我們定義為“左邊是否有墻”,如果左邊存在墻壁,就將這個變量設為1 否則這個變量值就是0
?判斷左邊是否存在墻壁,我們可以讓角色往左邊移動一步,然后再偵測一下是否碰到了墻壁(在這個程序里,因為墻壁的顏色是黑色的,我還依然使用“碰到顏色”作為檢測條件)就可以了。
?當左移一步碰到墻壁,則說明左側存在墻壁,如果沒有碰到墻壁,則說明左邊沒有墻壁。
?因為我們只是做偵測,并不是真的移動,所以我們在檢測完畢后還要將角色進行復位。所謂復位就是把我們前進的步數退回來,轉的角度也回轉回來。
?4.檢測前方是否存在墻壁
?這個功能和前一步中“檢測左邊是否存在墻壁”功能一致,所以我們就不再進行贅述。
?5.左右轉向
?左右轉向在整個程序里起到了關鍵的作用,我們在分清在什么時候向左,什么時候向右。
?當左邊沒墻時,我們要向左轉。同時左轉后,要讓角色移動一步。這個移動非常重要,如果一旦不移動的話,有可能會造成角色在原地打轉的情況
?當左邊有墻時,這時候我們才可以進行前方是否有墻壁。
? ?如果此時前方存在墻壁,我們只能右轉,因為這時我們左邊前面都有墻壁,我們只能右轉;
? ?如果前方沒有墻壁,那么此時就可以放心大膽的前進一步。
?6.到達目的地
?在整個過程中,我們都沒涉及到是否到達終點的判斷,那么我們要在什么時候進行目的地的判斷呢?
?我們在觀察流程圖時,可以發現:其實我們每走一步都要看一下是否已經到達目的地。所以我們在進行循環積木的選擇時,就要選擇“帶條件的重復執行”積木。積木的條件就是角色是否到達的目的地。
?通過以上代碼的整合,我們就可以得到整個程序的完整代碼。
?本例代碼中我們用的是左手模墻法,您可以試著用右手摸墻法實現這個算法么?
