資訊內容
Scratch少兒編程第29講:貪吃蛇(更新版)
想了解編程技巧,就請點擊上面藍字:跟我學Scratch編程,關注CC哥
之前做的貪吃蛇的游戲一直有兩個問題,一直沒有優化,一個是貪吃蛇碰到自己的情況處理有點復雜不好理解,一個是蟲子出現的位置可能會在蛇身上,有學友也提過這兩個問題,那么今天CC哥就把這兩個問題優化一下。
游戲的展示視頻沒什么太多區別,CC哥主要講之前的問題的解決方案:
如何偵測貪吃蛇碰到自己
之前講座的碰撞檢測是:
邏輯就是因為身體是一個一個克隆體組成,所以如果要用克隆體碰到蛇頭來檢測,那么就要避免有幾個克隆體實際上一直都是跟蛇頭連在一起,是處于一直碰撞的狀態。所以為了區別這些克隆體,我們就引入了克隆編號這個私有變量,然后判斷碰到蛇頭的克隆體,是不是連接著蛇頭部分的幾個克隆體。這部分CC哥說起來都比較費勁,所以這部分代碼對初學者來說有點難理解這個邏輯關系。
改進方法
增加一個偵測的角色,進行碰撞檢測。
這個方法是我們最常用的碰撞檢測方法,特別是在碰到形狀不規則的角色的時候。
就是這么個探測角色,就一個小點,在程序執行的時候,它是看不到的,但是我們可以始終讓它出現在蛇頭的位置上,這樣一旦出現碰撞,我們就可以直接檢測出來,是不是非常好理解了?而且程序邏輯相對也簡單了。也就不需要考慮克隆編號這類需要進行克隆體區別的內容了。
如果想免費獲得CC哥的講座中的程序代碼以及游戲素材,可以通過掃描二維碼關注《跟我學Scratch編程》,然后點擊獲取代碼即可。
那么探測角色代碼的部分我們看一下:
這部分代碼的理解:
1:程序一開始就設成透明的,這樣你就看不見它了。(不能用隱藏,因為隱藏的角色是沒有辦法進行碰撞檢測的)
2:重復執行反復讓這個偵測角色移動到蛇頭的部分。
3:方向要跟蛇頭保持一直,這樣偵測角色才會始終出現在蛇頭部分的前端,不論蛇頭朝向哪個方向。
4:讓偵測角色往前移動15步,保證偵測角色出現在蛇頭的位置,而不是被蛇頭覆蓋掉。
5:碰到邊緣的時候要隱藏起來。
第五步是最容易被忽略的地方,也是最容易形成bug的地方。讓我們看一下如果沒有這一步會出現什么結果。
看到沒有,如果這個判斷代碼,貪吃蛇在碰到邊緣時,沒有從另一邊出來,而是直接游戲結束了。
為什么會出現這種情況,這個也是Scratch編程里面經常碰到的問題,舞臺邊緣的問題,當一個角色碰到舞臺邊緣時,如果繼續移動,并不會移出舞臺的邊緣,而是會停在舞臺的邊緣,這樣跟著蛇頭的克隆體就會直接碰上這個偵測變量,從而宣布游戲結束。所以我們通過碰到邊緣的時候直接隱藏偵測角色,讓它失去碰撞偵測的功能,然后當它出現另一邊時,再通過顯示功能,來恢復它的偵測能力,這樣程序就沒有bug了。
另外在蛇身這部分的碰撞檢測就簡單了,只需要檢測碰到探測變量就OK了。
第60講~72講進階課程源代碼獲取方式
蟲子不出現在蛇身上
這部分我們改成了用自定義積木來做,如果碰到了蛇頭,那么就更換位置。大家注意看自定義積木的內部編程,在這部分內部程序里套用了自己。這個對初學者有點難理解,自己套用自己。為什么這樣用?因為蟲子出現在隨機的位置,我們無法保證下一個隨機位置就正好不在蛇身上,那只能不斷的來嘗試,直到下一個隨機位置不在蛇身上為止。所以這有點遞歸的邏輯。對于不確定反復的次數,只有退出條件的循環,可以用這種方式,編程更簡單一些。大家可以再去學習一下CC哥有關遞歸的課程。
另外CC哥重新做了個play的特效,效果不錯吧,不過這不是CC哥這講的教學內容,大家如果感興趣可以自己做做,或者自己看代碼吧。
這一講的更新代碼CC哥會打包到前60講里面,作為大家的延展學習。當然原來的29講代碼還會保留。
另外,CC哥發現很多學員不從基礎學起,上來就問問題,問的問題都是之前帖子里講過的基礎問題,所以CC哥再次強調,如果你是個初學者,請從第一講學起,而且每個例子都要自己做一遍,不要當小說看,否則你是學不好編程的。
《跟我學Scratch編程》資源獲取方式:(點擊查看)《跟我學Scratch編程》前60講程序匯總第60講~72講進階課程源代碼獲取方式
如果覺得CC哥做的不錯,請點擊右下角的"好看",給CC哥一個鼓勵!
·END·
跟我學Scratch編程不用花錢成為Scratch高手
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
