資訊內容
Scratch全國少兒編程競賽獲獎作品《垃圾分類》解析下篇
Scratch全國少兒編程競賽
獲獎作品解析《垃圾分類》
本文介紹的作品是全國青少年創意編程與智能設計大賽創意編程比賽一等獎獲得者蘇子麟同學的最新參賽作品。
作品說明
這個作品的目的是普及垃圾分類。使用游戲的方式,讓大家更熟悉垃圾應該如何分類。游戲的目標就是正確識別垃圾類別,用正確的垃圾桶去打擊更多的垃圾。
正文在上篇文章的最后,當垃圾桶和標志完成了各自的動畫之后,就會廣播開始游戲。當然同學們如果覺得看動畫太無聊了,也可以點擊skip按鈕,它的意思是跳過動畫,立即開始游戲。
skip按鈕的代碼:
廣播開始游戲之后,就正式的進入游戲的操作環節了。
果凍老師先來說一說游戲的玩法:屏幕中不停的會有各種的垃圾出現,并且來回的移動,操作者要點擊不同的垃圾桶發射子彈射擊垃圾,每個垃圾都有自己的血量,如果垃圾桶與射擊垃圾相匹配,垃圾就會減血消失;如果垃圾桶與射擊垃圾不匹配,垃圾的血量會上升。
接收開始游戲廣播的角色一共有九個:四個垃圾桶、四個子彈發射器和一個背景。
垃圾桶接收廣播的代碼非常簡單:
當我們用鼠標點擊某個垃圾桶后,會廣播備發綠(藍/灰/紅),意思是準備發射綠色子彈。
然后呢,當然就是接收了,子彈發射器接收了備發的廣播后會將發射武器類型這個變量設置為子彈發射器對應的值。
綠色子彈發射器對應的發射武器類型為1,藍色對應為2,灰色對應為3,紅色對應為4。
為了讓我們射擊時可以瞄準,子彈發射器還帶有一個十字瞄準器:
它也會接收備發廣播,然后改變不同的造型:
這樣,不同顏色的垃圾桶準備發射不同顏色子彈的代碼就寫好了。
接下來,在子彈發射器的接收開始游戲的代碼中,會不停的判斷變量發射武器類型是否被設置了值,比如綠色子彈發射器的代碼:
上面的代碼說明,當我們點擊了綠色的垃圾桶,就會改變發射武器類型這個變量,然后判斷這個變量的值,綠色的子彈發射器就會顯示。
同學們有沒有發現,發射武器類型這個變量其實是一個橋梁的作用,橋的一邊呢是垃圾桶,一邊是子彈發射器,它將這兩個角色的代碼連接了起來,因為在Scratch中沒有是否點擊垃圾桶這個偵測語句,所以通過發射武器類型這個中間變量模擬出是否點擊垃圾桶的判斷語句,這樣才能實現點擊垃圾桶出現對應發射器的效果。
上面的邏輯有點點難,同學們要看著代碼仔細理解,這種變量的使用方式非常有用和常見,大家一定要掌握哦!
這時候的效果:
接下來,我們要在屏幕上產生各種各樣的垃圾,然后再消滅它們。產生垃圾的代碼寫在背景里面,就是它:
那為什么要寫在背景里面呢?同學們想一想,產生垃圾是不是不僅僅產生一種,有餐余垃圾、回收垃圾、有害垃圾等等,無論把代碼寫在哪種垃圾角色里都不太合適。因為果凍老師建議大家,在一個角色里不要寫有關其它角色的代碼,那就只能把生成垃圾的代碼寫在背景里了。這種思路在Python等代碼編程中叫做類的封裝或者面向對象的寫法,同學們現在只需要知道有這個概念就可以了,不需要深入理解。
上面呢就是不斷產生垃圾的代碼,它的作用是在不同的概率下產生不同的垃圾,在重復執行語句中,一種出現的概率嵌套在另一種出現概率的否則語句部分,第一個概率是在數字1到4之間隨機取一個數,如果隨機數是1,則出現廚余垃圾,否則在數字1到3之間隨機取一個數,如果隨機數是1,則出現其他垃圾,否則在1和2之間隨機取一個數,如果隨機數是1,則出現可回收垃圾。如果上面的概率都不滿足,則最終出現有害垃圾。
代碼中還用到了兩個變量:子彈存在和垃圾存在,它們的作用是讓舞臺區中一次只能出現一個子彈和垃圾。
好了,現在實現子彈與垃圾的代碼我們就寫好了,最后,就剩下用子彈擊中并消滅垃圾的功能了,寫完這部分代碼,垃圾分類的這個小游戲就完成了,那就讓我們趕緊繼續吧。
在接下來的內容中,果凍老師又要教同學們一個新的編程概念,叫做函數,也叫做方法。
那什么是函數呢?函數其實就是Scratch中的自制積木,函數中通常都會帶有參數,參數就是Scratch自制積木中的輸入項,函數名稱就是積木名稱:
函數(自制積木)的作用就是將多個具有相同功能邏輯的代碼塊提煉出來寫成一個,通過傳遞不同的參數(輸入項)實現個性化的功能。
比如說,這里四個垃圾桶發射出子彈擊中垃圾時,要么是加血要么是減血,都是操作垃圾血量的過程,只是一個是正數一個是負數,本來我們要在四個判斷子彈是否擊中垃圾的語句中分別寫加血減血代碼,但這樣太麻煩了,于是,我們就可以將這部分的代碼提煉出來,寫成一個,通過傳遞一個參數(輸入項)來區分到底是加血還是減血。
函數(自制積木)代碼寫出來是這樣的:
這里定義了一個名為子彈碰撞的自制積木,它帶有一個名叫結果的參數(輸入項)。這個子彈碰撞的自制積木的作用就是判斷結果這個輸入項是否大于0,如果大于0就減血,如果小于0就加血。
函數(自制積木)定義好了,下面就要使用這個自制積木,調用的代碼是這樣的:
是不是非常簡單,每個判斷語句里面只需要寫一行子彈碰撞的語句就可以了,減血直接就傳遞武器的變量值,加血呢給武器乘以-1變為負數再傳遞到自制積木中就可以了。
使用自制積木的優點有很多,它可以幫助我們簡化代碼量,而且后期的維護會變的非常方便,比如我們想讓所有的垃圾被子彈擊中減血的同時再切換一個造型,那么我們直接在自制的積木中添加一個下一個造型語句就可以了:
如果不使用自制積木的話,我們就需要在每一個垃圾的每一個判斷語句中都寫一次下一個造型語句,那真是太麻煩了!
完成好了,到這里,《垃圾分類》的代碼解析我們就學習完了,由于游戲的源代碼非常多,果凍老師在兩篇文章中不可能全部都涉及到,所以剩下的代碼還要同學們下載后自己閱讀理解,有不懂的地方可以留言給果凍老師哦!
同學們有沒有感受到這篇文章的內容要比上篇文章要難,上篇文章的內容如果算Scratch入門的話,這篇文章一下子就到Scratch進階了,果凍老師又是講類封裝又是講函數的,一個腦袋兩個大,但是同學們千萬不要心急哦,結合源代碼反復閱讀多練習,搞不懂也沒關系,畢竟這是競賽一等獎選手的作品哦,只要跟著果凍老師一個作品一個作品學習,相信慢慢的你會發現那些搞不懂的問題都不是事兒了!加油哦!
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
