Scratch少兒編程第29講:貪吃蛇(更新版)

2019-12-20 11:09

想了解編程技巧,就請點擊上面藍字:跟我學Scratch編程,關注CC哥



之前做的貪吃蛇的游戲一直有兩個問題,一直沒有優化,一個是貪吃蛇碰到自己的情況處理有點復雜不好理解,一個是蟲子出現的位置可能會在蛇身上,有學友也提過這兩個問題,那么今天CC哥就把這兩個問題優化一下。

游戲的展示視頻沒什么太多區別,CC哥主要講之前的問題的解決方案:

如何偵測貪吃蛇碰到自己

之前講座的碰撞檢測是:

https://cdn.china-scratch.com/timg/191222/1109514432-0.jpg

邏輯就是因為身體是一個一個克隆體組成,所以如果要用克隆體碰到蛇頭來檢測,那么就要避免有幾個克隆體實際上一直都是跟蛇頭連在一起,是處于一直碰撞的狀態。所以為了區別這些克隆體,我們就引入了克隆編號這個私有變量,然后判斷碰到蛇頭的克隆體,是不是連接著蛇頭部分的幾個克隆體。這部分CC哥說起來都比較費勁,所以這部分代碼對初學者來說有點難理解這個邏輯關系。

改進方法

增加一個偵測的角色,進行碰撞檢測。

這個方法是我們最常用的碰撞檢測方法,特別是在碰到形狀不規則的角色的時候。

https://cdn.china-scratch.com/timg/191222/1109524235-1.jpg

https://cdn.china-scratch.com/timg/191222/1109521603-2.jpg

就是這么個探測角色,就一個小點,在程序執行的時候,它是看不到的,但是我們可以始終讓它出現在蛇頭的位置上,這樣一旦出現碰撞,我們就可以直接檢測出來,是不是非常好理解了?而且程序邏輯相對也簡單了。也就不需要考慮克隆編號這類需要進行克隆體區別的內容了。

如果想免費獲得CC哥的講座中的程序代碼以及游戲素材,可以通過掃描二維碼關注《跟我學Scratch編程》,然后點擊獲取代碼即可。

那么探測角色代碼的部分我們看一下:

https://cdn.china-scratch.com/timg/191222/1109533192-3.jpg

這部分代碼的理解:

1:程序一開始就設成透明的,這樣你就看不見它了。(不能用隱藏,因為隱藏的角色是沒有辦法進行碰撞檢測的)

2:重復執行反復讓這個偵測角色移動到蛇頭的部分。

3:方向要跟蛇頭保持一直,這樣偵測角色才會始終出現在蛇頭部分的前端,不論蛇頭朝向哪個方向。

4:讓偵測角色往前移動15步,保證偵測角色出現在蛇頭的位置,而不是被蛇頭覆蓋掉。

5:碰到邊緣的時候要隱藏起來。

https://cdn.china-scratch.com/timg/191222/110953F35-4.jpg

第五步是最容易被忽略的地方,也是最容易形成bug的地方。讓我們看一下如果沒有這一步會出現什么結果。

https://cdn.china-scratch.com/timg/191222/110953O16-5.jpg

看到沒有,如果這個判斷代碼,貪吃蛇在碰到邊緣時,沒有從另一邊出來,而是直接游戲結束了。

為什么會出現這種情況,這個也是Scratch編程里面經常碰到的問題,舞臺邊緣的問題,當一個角色碰到舞臺邊緣時,如果繼續移動,并不會移出舞臺的邊緣,而是會停在舞臺的邊緣,這樣跟著蛇頭的克隆體就會直接碰上這個偵測變量,從而宣布游戲結束。所以我們通過碰到邊緣的時候直接隱藏偵測角色,讓它失去碰撞偵測的功能,然后當它出現另一邊時,再通過顯示功能,來恢復它的偵測能力,這樣程序就沒有bug了。

另外在蛇身這部分的碰撞檢測就簡單了,只需要檢測碰到探測變量就OK了。

https://cdn.china-scratch.com/timg/191222/1109564547-6.jpg

《跟我學Scratch編程》資源獲取方式:(點擊查看)《跟我學Scratch編程》前60講程序匯總
第60講~72講進階課程源代碼獲取方式

蟲子不出現在蛇身上

https://cdn.china-scratch.com/timg/191222/11095J231-7.jpg

這部分我們改成了用自定義積木來做,如果碰到了蛇頭,那么就更換位置。大家注意看自定義積木的內部編程,在這部分內部程序里套用了自己。這個對初學者有點難理解,自己套用自己。為什么這樣用?因為蟲子出現在隨機的位置,我們無法保證下一個隨機位置就正好不在蛇身上,那只能不斷的來嘗試,直到下一個隨機位置不在蛇身上為止。所以這有點遞歸的邏輯。對于不確定反復的次數,只有退出條件的循環,可以用這種方式,編程更簡單一些。大家可以再去學習一下CC哥有關遞歸的課程。

另外CC哥重新做了個play的特效,效果不錯吧,不過這不是CC哥這講的教學內容,大家如果感興趣可以自己做做,或者自己看代碼吧。

https://cdn.china-scratch.com/timg/191222/11095K054-8.jpg

這一講的更新代碼CC哥會打包到前60講里面,作為大家的延展學習。當然原來的29講代碼還會保留。


另外,CC哥發現很多學員不從基礎學起,上來就問問題,問的問題都是之前帖子里講過的基礎問題,所以CC哥再次強調,如果你是個初學者,請從第一講學起,而且每個例子都要自己做一遍,不要當小說看,否則你是學不好編程的。

《跟我學Scratch編程》資源獲取方式:(點擊查看)《跟我學Scratch編程》前60講程序匯總
第60講~72講進階課程源代碼獲取方式

如果覺得CC哥做的不錯,請點擊右下角的"好看",給CC哥一個鼓勵!

·END·

跟我學Scratch編程

不用花錢成為Scratch高手

--end--

后記,小編朋友公司研發了一個游戲化的少兒編程在線課程(5-12歲),游戲化教學結合scratch(一款在線少兒編程工具,類似樂高的積木拼搭),我家娃娃學了幾次課,非常喜歡(超預期),16次課才200多塊錢,對鍛煉孩子的思維能力和動手動力很有幫助。

感興趣的朋友可以掃描二維碼,關注一下,或微信搜索“大耳猴少兒編程”

http://www.oeerar.tw/Uploads/Editor/2018-04-22/5adca08bdc212.jpg

聲明:本文章由爬蟲自動處理和轉載作為教育分享用途,原作者可通過郵件及時和我們聯系處理:freemanzk@qq.com