資訊內(nèi)容
Scratch少兒編程第77講-自動(dòng)確認(rèn)路徑軌跡
CC哥在用Scratch編程的時(shí)候,也會(huì)經(jīng)常遇到各種問題,有些問題是編程的bug,但是也有很多問題不是編程的問題,是Scratch本身的局限性造成的。不過正是這種局限性才是啟發(fā)思維和創(chuàng)造的動(dòng)力。
CC哥在之前講座的時(shí)候曾經(jīng)想對(duì)不規(guī)則圖形進(jìn)行涂色,這個(gè)過程遇到了很多問題,比如難點(diǎn)之一是如何確認(rèn)不規(guī)則圖形的內(nèi)部點(diǎn),CC哥還沒有解決掉。不過在攻關(guān)過程中,CC哥解決了不規(guī)則圖形的輪廓軌跡確認(rèn)的問題,可以今天跟大家分享一下。
先看看小例子:
大家看到?jīng)],小企鵝是沿著藍(lán)色的路徑軌跡在行走,并且一直走到綠旗的終點(diǎn)。這個(gè)路徑是完全不規(guī)則的,那么怎么實(shí)現(xiàn)呢?
軌跡角色
首先是路徑角色,這個(gè)是CC哥自己畫的。路徑的難點(diǎn)在于程序如何去確認(rèn)起點(diǎn)和終點(diǎn)。有幾種方法:
1:用線掃描的方法,CC哥的起點(diǎn)確認(rèn)就是用了從左到右,從上到下的線掃描的過程。但是用這個(gè)方法就需要,你的起點(diǎn)要是整個(gè)圖形的最左邊。如果不是的話就無法確認(rèn)了,比如下圖:
如果用線掃描,那么得出的起點(diǎn)就是畫圈的部分,因?yàn)檫@個(gè)點(diǎn)才是圖形的最左端。
2:第二種方法就是設(shè)定起點(diǎn)參照物,然后找出離參照物最近的點(diǎn),不過這個(gè)方法CC哥沒有去做,大家如果有興趣的話可以自己試試。(這種方法就是要先找外輪廓的軌跡,然后每一個(gè)點(diǎn)去比較和參照物的距離,然后再確認(rèn)起點(diǎn)和終點(diǎn))
軌跡記錄角色
這個(gè)軌跡記錄的角色,就是一個(gè)小紅點(diǎn),CC哥是用這個(gè)小紅點(diǎn)去找出路徑的軌跡的。這個(gè)小紅點(diǎn)的大小也非常有關(guān)系,不能太小和太大,否則的話很容易陷入死循環(huán),這就是Scratch本身的限制導(dǎo)致的。
其他的企鵝,巖石,旗子都是輔助角色,沒必要特別介紹了。
程序設(shè)計(jì)的邏輯
做這個(gè)程序跟走迷宮的程序有些類似,需要用遞歸的方式處理。
1:先找到路徑的起點(diǎn)。
2:沿著起點(diǎn)進(jìn)行路徑輪廓的掃描。
在軌跡掃描的時(shí)候要知道如何判斷掃描結(jié)束,在這里CC哥用了一個(gè)綠旗子作為掃描的終點(diǎn),這是最簡單的方法。
CC哥用了一些自定義的積木來實(shí)現(xiàn)掃描過程,CC哥用的是走迷宮的邏輯來記錄輪廓軌跡:
1:先判斷左手邊是否為路徑,2:如果左手邊已經(jīng)為路徑了,那么再判斷前方是否為路徑。3:如果前方也是路徑了,那么判斷右方是否為路徑。4:如果右方還是路徑的情況下,繼續(xù)判斷右方。這些判斷一旦為否,那么全部回到第一步,確認(rèn)左邊是否為路徑。
這部分代碼就是這個(gè)邏輯。
在這里,CC哥用了列表記錄軌跡,軌跡坐標(biāo)是X,和Y軸的坐標(biāo)組成,所以要記錄軌跡坐標(biāo),就需要兩個(gè)列表,一個(gè)列表用來存X軸坐標(biāo),一個(gè)列表用來存Y軸的。(程序種軌跡列表,和外部輪廓列表實(shí)際都是一樣的,大家自己做的時(shí)候可以只用一個(gè)就行了。)
確認(rèn)外部輪廓首先要找到一個(gè)起點(diǎn),起點(diǎn)用線掃描的程序來做,這部分CC哥不介紹了,就是讓小紅點(diǎn)角色從上左到右,從上到下一步一步的走,當(dāng)碰到路徑的時(shí)候,就開始調(diào)用調(diào)用上面的代碼進(jìn)行路徑的輪廓軌跡確認(rèn)和記錄。
這段主程序因?yàn)镃C哥開始做的時(shí)候有其他的編程目標(biāo),所以寫的有點(diǎn)復(fù)雜,大家可以照著自己的思路做。
企鵝行走編程
企鵝的程序不復(fù)雜,就是沿著軌跡的坐標(biāo)一步一步走就好了,軌跡就是列表里的坐標(biāo)。
需要注意的是:
1:在路徑軌跡掃描的過程中,不要有角色擋住路徑,否則路徑掃描就會(huì)不完整。無法得到完整的路徑。所以先要把企鵝隱藏掉,等軌跡記錄完之后再顯示出來。
2:企鵝角色有一個(gè)朝向的問題,所以CC哥根據(jù)每一步是往前走還是往后退,來設(shè)定角色的朝向,是朝前還是朝后。大家注意X和X1這兩個(gè)變量就是用來判斷前一步和后一步的關(guān)系。
本講座的目標(biāo)
本篇講座的目標(biāo)就是讓大家學(xué)會(huì)如何根據(jù)顏色進(jìn)行軌跡掃描,可以用在走迷宮,形狀的軌跡確認(rèn),以及角色走不規(guī)則的路徑等。
另外,假設(shè)我把顏色判斷改成了角色碰撞的判斷,同時(shí)把軌跡角色設(shè)置成透明,那么你就會(huì)發(fā)現(xiàn)企鵝會(huì)沿著一條你看不見的路徑在行走,是不是也有意思呢?
·END·
跟我學(xué)Scratch編程不用花錢成為Scratch高手
