資訊內容
Scratch全國少兒編程競賽獲獎作品《穿越時空的大戰》解析下篇
Scratch全國少兒編程競賽
獲獎作品解析《穿越時空的大戰》
本文介紹的作品是全國青少年創意編程與智能設計大賽創意編程比賽一等獎獲得者齊嘉懿同學的參賽作品。
作品說明
游戲主人公在名偵探柯南的幫助下,體驗了最新的科技發明——AI機器人和時光機。乘坐時光機回到過去之后,在AI監測系統的幫助下,還原出了事實的真相,并成功帶領自家花園里的植物利用高科技裝備戰勝僵尸,保衛家園的故事。
游戲中運用到了變量、循環嵌套、克隆體、列表、字符串連接等功能,并用到了多種算法,包括遍歷算法、排序算法、求和、求平均值和最值等算法。
另外,游戲中還有很多原創的角色,如太陽花,AI防御網等。

在上一篇文章中,我們完成了名偵探柯南發出的能量收集的任務,開啟了時光機,接下來我們就要穿越時空回到過去,參與一場僵尸反入侵的戰斗,保衛媽媽的臥室。大戰即將開始,你準備好了嗎,快點乘上時光機吧!
點擊“乘坐時光機”按鈕之后,游戲立即切換到時光機的場景,我們的游戲主角乘坐時光機正在穿越時空。咦,這段臺詞怎么這么熟悉?
時光機著陸之后,入侵者立刻來襲。唉?這不就是植物大戰僵尸嗎!哈哈,相信同學們一定都玩過這個游戲,這里原來就是簡化版的植物大戰僵尸呀。大家都會玩這個游戲,但是可不一定知道如何用Scratch來制作出這個游戲。那接下來,果凍老師就和大家一起看看這個游戲是如何實現的吧。
當背景換成草坪植物大戰僵尸的游戲背景是一片草坪,所以僵尸呀、土豆呀、太陽呀都會響應背景換成草坪這個事件。
不用老師介紹,大家肯定知道這些都是植物大戰僵尸游戲中的角色。首先我們來看游戲中最重要的角色:僵尸。它們一個接一個的從屏幕右側出現并向左移動,最終的目的就是進入并搞亂媽媽的房間。
游戲開始后,每隔3秒克隆一個普通僵尸,一共克隆出10個。
僵尸一波一波的很可怕,我們必須抓緊時間消滅它們,在僵尸行走的過程中,我們有兩種方法可以消滅它們,第一種方法就是使用堅果:
代碼中設置了移到x:238,所以僵尸會固定的出現在屏幕的右側,但是y坐標設置為-121和107之間的隨機數,所以僵尸在縱向上是隨機出現的,它會朝屏幕左側一直行走,每一次行走的步數也是在5步到10步之間隨機的,所以僵尸的速度有快有慢,行走的過程中如果被堅果砸到,那么僵尸數量這個變量的值就會減1,代表這個僵尸被消滅掉了。
如果僵尸走到屏幕最左邊了還沒有碰到堅果,那么清除車就會出動推走僵尸,這是消滅僵尸的另一種方法,但是每一行只有一個清除車,出動一次就會少一個。
我們知道了使用堅果可以消滅僵尸,那堅果是如何產生的呢?這就涉及到了其中的這幾個角色:
太陽花每隔一段時間會產生小太陽,收集小太陽到陽光銀行(SunBank)中,通過陽光銀行可以購買堅果卡片,點擊堅果卡片就會變成堅果。這是正常產生堅果的邏輯,但是由于我們參加的并不是游戲制作比賽,所以簡化版的游戲中收集太陽花和購買堅果卡片都是電腦自動運行的。
那需要我們寫代碼實現的就是產生小太陽和卡片變堅果的這兩個過程了。
首先來看產生小太陽的代碼。
游戲開始后,每隔1至2秒就會產生一朵小太陽,并且這朵小太陽從太陽花的位置向上飛到陽光銀行的位置。
小太陽通過滑行語句飛向陽光銀行,然后增加了sun變量的值,最后消失。
卡片變堅果的代碼就稍稍有點復雜了,代碼中需要完成鼠標點擊的判斷以及土豆滾動撞擊消滅僵尸的效果。
游戲開始后,每間隔3秒鐘會自動克隆出一張堅果卡片:
堅果卡片會沿著頂部的卡片框一直向右滑動,直到移動到右邊框或者碰到其它的卡片才停止下來。
在重復執行的語句里面有一條等待的語句,這條等待語句的條件是角色X坐標>60(移動到方框的最右邊)或者碰到灰色(碰到其它卡片)不成立,也就是說如果條件不成立,就會一直運行重復執行語句,卡片會一直向右移動。而當等待語句的條件成立時,代碼就會運行到等待語句這里停止不再執行重復語句,也就是說卡片會停下不再移動了。
如果我們繼續用鼠標點擊堅果卡片的話,就會觸發克隆堅果的命令:
克隆的代碼很簡單,僅僅將堅果顯示出來。
而真正的處理邏輯代碼是寫在wall-nut這個廣播中的。
wall-nut廣播是點擊堅果卡片后發出的,鼠標松開后,首先堅果初始化顯示第一個造型,并且在點擊鼠標前一直跟隨著鼠標的位置移動。在重復執行語句中拖入移到鼠標指針語句就可以實現角色跟隨鼠標的效果。
當我們再次點擊鼠標后,堅果通過移到XY語句在鼠標指針的位置處放下,但是這里沒有完全按照鼠標指針的位置放置,堅果的X坐標通過了一個四舍五入和乘除的運算語句稍稍前移了一下,這樣堅果的初始位置會更加的合理。
接下來,在代碼中嵌套了兩個如果那么語句,第一個如果那么語句判斷堅果的位置不能放在舞臺的邊緣,第二個如果那么語句判斷堅果的位置必須是在紅線的左邊,如果這兩個條件不滿足的話,就不會執行它們里面的語句。
它們里面放置了一個重復執行語句,這個重復執行語句的作用就是讓堅果不停的向右滾動,直到舞臺右側。向右移動通過移動5步語句實現,滾動的效果通過不斷切換下一個造型實現,要注意的是,如果堅果變到了最后一個造型的話,我們需要手動再將它切換到第一個造型,這樣堅果的滾動效果才會是循環不停的。在舞臺的最右側有一個黃色的豎線角色,重復執行語句的條件就是判斷堅果是否碰到了這條黃色豎線,如果碰到了就結束重復執行語句,繼續執行后面的隱藏語句,將堅果隱藏掉。
堅果滾動過程中碰到僵尸的代碼邏輯我們在僵尸角色中已經介紹過了。
好了,以上就是產生太陽、收集堅果卡片、使用堅果消滅僵尸的整個過程,經過老師的介紹,游戲的過程是不是就很清晰了?相信同學們對代碼都已經搞明白了,如果還有不懂的地方可以再返回去多看看幾遍。
游戲中一共會出現20個僵尸,當我們把這些僵尸都消滅完后,游戲的難度會提升,接著出現好多的僵尸坦克,這些坦克的速度可比僵尸快多了,堅果對于坦克來說無疑是雞蛋碰石頭,毫無作用,所以我們推出威力巨大的椰子大炮,發射椰子炮彈來消滅坦克。
坦克來啦
以上就是坦克大戰所涉及到的角色,其中僵尸坦克角色與上面僵尸的代碼非常類似,而椰子炮-炮架子角色的代碼則非常簡單,就不在這講解它們了。而剩下的兩個角色炮筒和炮彈老師則要說一說。
在堅果卡片的代碼中,我們知道要讓一個角色隨著鼠標移動可以在重復執行語句中加入一個移到鼠標指針的語句。如果角色不是隨著鼠標移動而是要它固定在某個位置只是面向鼠標指針的位置轉動該怎么做呢?有同學想到了,就是把移到鼠標指針語句換成面向鼠標指針語句:
這樣,炮筒就會固定在舞臺區的左側,并且隨著鼠標指針的位置轉動,隨時準備著朝向鼠標的位置發射炮彈。
哇,坦克來的好快啊!我們必須趕緊消滅它們!
點擊鼠標之后,代碼會克隆出一顆炮彈,然后這顆炮彈會從炮筒的位置向鼠標指針的位置發射出去,如果炮彈在運行的過程中碰到了坦克就會將坦克消滅掉,最后它觸碰到舞臺的邊緣后被刪除,這顆炮彈的使命就完成了。
二十幾輛僵尸坦克來勢洶洶,看似威猛,但是在我們的一頓操作之下也都被消滅掉了。
巨人僵尸出現可是,游戲并沒有結束,屏幕右側又走出來一個巨人僵尸,什么!居然還有終極Boss,這是要挑戰我們的手速嗎?可是,無論我們點擊鼠標、鍵盤如何操作都沒有反應,只能眼睜睜的看著這個巨人僵尸走過來一顆一顆的吞噬掉我們的堅果。
巨人僵尸一步步的向房間靠近,遇到堅果(每個堅果的右側都有一個藍色的小點)就將它吃掉,我們只能在一旁看著悲劇發生,束手無策,這可怎么辦呀?
突然,游戲主角想到,在他乘坐時光機的時候,名偵探柯南同時為他帶來了一件巨型的防御武器,名字好像叫做AI防御網,面對這個無法控制的巨人僵尸,是時候請出這個終極武器了!
這個防御網呢,實際上是一個五邊形多層網狀結構圖案,是通過Scratch軟件的畫筆擴展模塊繪制出來的,圖案的樣子是這樣:
它由五個五邊形組成了一個花瓣的圖案,然后由內向外一層一層堆疊起來。那如何使用代碼來畫出這樣的圖案呢,下面我們就一步一步來實現它。
第一步,定義好邊數、層數、角度這三個變量的值。
邊數設置我們要畫的圖案是幾邊形,每一層幾個圖案,很明顯我們的圖案是五邊形,每一層都有五個。
層數設置圖案一共重復繪制幾次,這里重復6次,也就是說有6層。
角度設置畫筆在畫第一筆時所面向的方向。
在繪制的過程中還涉及到一個變量,叫做邊長,它設置五邊形每個邊的長度,并且每繪制一層這個邊長的值就會增大,這樣五邊形一層就比一層的大。
第二步,使用畫筆畫出一個五邊形。
代碼中,有一個重復執行語句,它里面的移動邊長步語句可以畫出一條線,畫完后畫筆向左旋轉360÷5=72度,這樣重復執行5次,就完成了一個五邊形的繪制。
第三步,在這個重復執行的外面再套一層重復執行,每畫完一個五邊形畫筆同樣左轉72度。
這樣,五個五邊形就組成了一個類似花瓣的圖案。
第四步,在兩層重復執行的外面再嵌套一層重復執行,這次重復的次數是變量層數的值,也就是說我們要畫出6層的花瓣圖案。
每一層五邊形的顏色與邊長一樣也是變化的,這樣,強大的AI防御網最終就繪制完成了,代碼最后廣播巨人僵尸死去,可怕的終極Boss終于被我們收拾掉了,激烈的反入侵戰斗也停止了,我們完成了名偵探柯南賦予的任務,成功的保衛住了媽媽的房間!
在這篇文章中,我們學習了《穿越時空的大戰》這部作品的后半部分,這部分內容雖然不像上半部分內容那樣有各種各樣讓人驚訝的編程技術和效果,但是它為我們展示了一個完整的植物大戰僵尸游戲的開發過程,這個過程中使用了很多的判斷語句,很多的重復執行語句,還有各種的廣播、變量這些角色連接的方式,通過這個過程充分展現了參賽者的邏輯思維能力。何時僵尸應該上場,何時坦克應該出現,如何使用堅果消滅僵尸,如何繪制防御網的圖案,同學們不要小看這些內容,如果說上篇文章是編程特技的展示,那這篇文章才是編程基本功的體現,這些基本功看似平淡無奇,卻不是一天兩天能練成的,千里之行始于足下,沒有扎實的基本功就無法走的更遠,要想獲得全國比賽的一等獎,努力學好這篇文章的內容才是最應該的,加油吧,同學們!
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

- 上一篇
scratch編程之貪吃蛇
導語:貪吃蛇是經典的游戲之一,從掌上游戲機到前段時間流行的貪吃蛇大戰,這款游戲熱度未減。在制作貪吃蛇游戲中,我們需要理解“克隆體”的特點,學會如何合理有效地使用“克隆體”。 貪吃蛇的游戲除去開始動畫、結束動畫、分數累計等環節,最重要的是利用方向鍵控制蛇的移動以及蛇身的變長的實現。分解一下
- 下一篇
少兒創意編程(特36)scratch繪圖等級考試40關
最近關于編程的各種等級考試層出不窮,有計算機學會的,有電子學會的,有工信部(藍橋杯)的,有青少年宮協會(中少童創)的,有軟件行業協會(編程貓)的……好不熱鬧!在謝聲濤老師的三言學堂微信群里,也搞了個編程繪圖等級考試40關,大家可以來挑戰一下!