国产日韩欧美一区二区三区综合,日本黄色免费在线,国产精品麻豆欧美日韩ww,色综合狠狠操

極客小將

您現在的位置是:首頁 » scratch編程資訊

資訊內容

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

極客小將2020-11-10-
想了解編程技巧,就請點擊上面藍字:跟我學Scratch編程,關注CC哥 之前做的貪吃蛇的游戲一直有兩個問題,一直沒有優化,一個是貪吃蛇碰到自己的情況處理有點復雜不好理解,一個是蟲子出現的位置可能會在蛇身上,有學友也提過這兩個問題,那么今天CC哥就

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



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

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

如何偵測貪吃蛇碰到自己

之前講座的碰撞檢測是:

upload/article/images/2020-11-10/013b749c625ea4fb476cbaf74c77ec10.jpg

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

改進方法

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

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

upload/article/images/2020-11-10/f6902396dfc359b463637d6f07568b81.jpg

upload/article/images/2020-11-10/3e8201eb78f0e02f4b033b9b6f724662.jpg

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

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

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

upload/article/images/2020-11-10/b04ab9a4c243d92de1ebadb66e6e7b23.jpg

這部分代碼的理解:

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

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

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

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

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

upload/article/images/2020-11-10/1a6e0574b44859b5f5a1a55a171996c2.jpg

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

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

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

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

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

upload/article/images/2020-11-10/abae6a5993a482ab7549a90acd1f8c59.jpg

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

蟲子不出現在蛇身上

upload/article/images/2020-11-10/f67143e5d4dbbeb15d9067849748498c.jpg

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

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

upload/article/images/2020-11-10/6512145a8f6e46777ab9a278f3c40bfd.jpg

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


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

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

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

·END·

跟我學Scratch編程

不用花錢成為Scratch高手

聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

預約試聽課

已有385人預約都是免費的,你也試試吧...

主站蜘蛛池模板: 禄劝| 巴彦淖尔市| 任丘市| 桐庐县| 阳泉市| 洪江市| 江华| 天台县| 东平县| 调兵山市| 乐业县| 安徽省| 高清| 南部县| 渑池县| 陈巴尔虎旗| 藁城市| 湖州市| 呼伦贝尔市| 晋宁县| 苗栗县| 彭泽县| 邵阳市| 涪陵区| 嘉峪关市| 南投县| 胶南市| 左云县| 罗定市| 固原市| 香河县| 武鸣县| 哈巴河县| 渝中区| 湖北省| 平远县| 嵩明县| 博客| 红桥区| 华亭县| 伊吾县|