資訊內(nèi)容
Scratch少兒編程|5分鐘系列-自動(dòng)走迷宮|智能AI
?前面我們給大家介紹過(guò)一個(gè)走迷宮的小游戲,今天我們就來(lái)小試身手,讓scratch實(shí)現(xiàn)自動(dòng)走迷宮的功能。
?自動(dòng)走迷宮,我們肯定要有一個(gè)智能的套路,比如智能尋徑,人工智能 等等,不過(guò)今天介紹的這個(gè)功能似乎也算是帶點(diǎn)智能,畢竟是讓程序自己走嘛。
?好了,在開(kāi)始之前我們先介紹一種摸墻走迷宮的算法(一提算法,不禁覺(jué)得好高大上。其實(shí)就是一種分析問(wèn)題的套路而已)。
?經(jīng)典的摸墻算法可以簡(jiǎn)單總結(jié)為:在一個(gè)連通的迷宮圖中我們用左右其中的任意一只手摸著墻就一定可以走出這個(gè)迷宮。也稱為繞墻走算法,是一種迷宮搜索的初級(jí)算法。
?下面我們就使用左手摸墻的走法實(shí)現(xiàn)這個(gè)算法。算法實(shí)現(xiàn)可以用下面的流程圖來(lái)表示:
?我們來(lái)分析一下流程中有哪些關(guān)鍵點(diǎn)
?1.走到墻邊
?2.檢測(cè)左邊是否存在墻壁
?3.檢測(cè)前面是否存在墻壁
?4.左右轉(zhuǎn)向
?通過(guò)上面分析,好像也沒(méi)什么難點(diǎn)。那么就讓我們動(dòng)手試一下吧
?1.導(dǎo)入迷宮圖,創(chuàng)建角色
?程序開(kāi)始時(shí),我們可以使用前期的迷宮游戲中使用的迷宮地圖作為游戲背景,再選擇一個(gè)小球作為走迷宮的主角角色。
?如果還沒(méi)有迷宮地圖,可在公眾號(hào)中回復(fù)“迷宮圖”
?在這個(gè)迷宮圖中,我們?yōu)榱朔乐剐∏蜃叩矫詫m外面,我們要提前把入口封起來(lái),讓迷宮只有一個(gè)出口可以走出去。
?2.走到墻邊
?這個(gè)功能沒(méi)有什么復(fù)雜的,就是讓角色一直沿著既定的方向前進(jìn),直到碰到墻壁即可。這里可以使用偵測(cè)中的“碰到顏色”積木來(lái)實(shí)現(xiàn)
?3.檢測(cè)左邊是否存在墻壁
?我們通過(guò)流程圖可以發(fā)現(xiàn)在角色行走過(guò)程中要不停的判斷左邊是否存在墻壁,所以我們就可以定義一個(gè)自定義積木。讓這個(gè)積木專門(mén)做檢測(cè)事件。
?同時(shí)我們?yōu)榱说玫綑z測(cè)結(jié)果,我們還需要一個(gè)左側(cè)是否存在墻壁的變量,我們定義為“左邊是否有墻”,如果左邊存在墻壁,就將這個(gè)變量設(shè)為1 否則這個(gè)變量值就是0
?判斷左邊是否存在墻壁,我們可以讓角色往左邊移動(dòng)一步,然后再偵測(cè)一下是否碰到了墻壁(在這個(gè)程序里,因?yàn)閴Ρ诘念伾呛谏模疫€依然使用“碰到顏色”作為檢測(cè)條件)就可以了。
?當(dāng)左移一步碰到墻壁,則說(shuō)明左側(cè)存在墻壁,如果沒(méi)有碰到墻壁,則說(shuō)明左邊沒(méi)有墻壁。
?因?yàn)槲覀冎皇亲鰝蓽y(cè),并不是真的移動(dòng),所以我們?cè)跈z測(cè)完畢后還要將角色進(jìn)行復(fù)位。所謂復(fù)位就是把我們前進(jìn)的步數(shù)退回來(lái),轉(zhuǎn)的角度也回轉(zhuǎn)回來(lái)。
?4.檢測(cè)前方是否存在墻壁
?這個(gè)功能和前一步中“檢測(cè)左邊是否存在墻壁”功能一致,所以我們就不再進(jìn)行贅述。
?5.左右轉(zhuǎn)向
?左右轉(zhuǎn)向在整個(gè)程序里起到了關(guān)鍵的作用,我們?cè)诜智逶谑裁磿r(shí)候向左,什么時(shí)候向右。
?當(dāng)左邊沒(méi)墻時(shí),我們要向左轉(zhuǎn)。同時(shí)左轉(zhuǎn)后,要讓角色移動(dòng)一步。這個(gè)移動(dòng)非常重要,如果一旦不移動(dòng)的話,有可能會(huì)造成角色在原地打轉(zhuǎn)的情況
?當(dāng)左邊有墻時(shí),這時(shí)候我們才可以進(jìn)行前方是否有墻壁。
? ?如果此時(shí)前方存在墻壁,我們只能右轉(zhuǎn),因?yàn)檫@時(shí)我們左邊前面都有墻壁,我們只能右轉(zhuǎn);
? ?如果前方?jīng)]有墻壁,那么此時(shí)就可以放心大膽的前進(jìn)一步。
?6.到達(dá)目的地
?在整個(gè)過(guò)程中,我們都沒(méi)涉及到是否到達(dá)終點(diǎn)的判斷,那么我們要在什么時(shí)候進(jìn)行目的地的判斷呢?
?我們?cè)谟^察流程圖時(shí),可以發(fā)現(xiàn):其實(shí)我們每走一步都要看一下是否已經(jīng)到達(dá)目的地。所以我們?cè)谶M(jìn)行循環(huán)積木的選擇時(shí),就要選擇“帶條件的重復(fù)執(zhí)行”積木。積木的條件就是角色是否到達(dá)的目的地。
?通過(guò)以上代碼的整合,我們就可以得到整個(gè)程序的完整代碼。
?本例代碼中我們用的是左手模墻法,您可以試著用右手摸墻法實(shí)現(xiàn)這個(gè)算法么?

- 上一篇
Scratch少兒編程教程-第4課-會(huì)飛的巫婆
這一節(jié)課要來(lái)講隨機(jī)出現(xiàn),因?yàn)楹竺嬉屝∨笥褜?xiě)一個(gè)打地鼠的小游戲。先點(diǎn)選舞臺(tái)-->背景-->匯入,選取Nature土里的圖,然后空白那張刪除,按圖右邊的(x)把舞臺(tái)的貓給刪除,請(qǐng)使用工具箱的剪刀點(diǎn)一下貓就可刪除
- 下一篇
Scratch3.0少兒編程教程5.擲色子
樣例名稱 本樣例名稱:擲色子。 故事情節(jié) Devin?找到一粒色子,它有?6?個(gè)面,每個(gè)面上有?1?個(gè)不同的點(diǎn)數(shù),從?1?到?6。把它丟在地上,可以得到一個(gè)隨機(jī)的數(shù)字。色子在棋牌游戲中經(jīng)常會(huì)用到,試試用?Scratch?