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

極客小將

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

資訊內容

Scratch全國少兒編程競賽獲獎作品《穿越時空的大戰》解析上篇

極客小將2020-11-19-
Scratch全國少兒編程競賽 獲獎作品解析 《穿越時空的大戰》 本文介紹的作品是全國青少年創意編程與智能設計大賽創意編程比賽一等獎獲得者齊嘉懿同學的參賽作品。 作品說明 游戲主人公在名偵探柯南的幫助下,體驗了最新的科技發明——AI機器人和

Scratch全國少兒編程競賽

獲獎作品解析
《穿越時空的大戰》

本文介紹的作品是全國青少年創意編程與智能設計大賽創意編程比賽一等獎獲得者齊嘉懿同學的參賽作品。

作品說明

游戲主人公在名偵探柯南的幫助下,體驗了最新的科技發明——AI機器人和時光機。乘坐時光機回到過去之后,在AI監測系統的幫助下,還原出了事實的真相,并成功帶領自家花園里的植物利用高科技裝備戰勝僵尸,保衛家園的故事。
游戲中運用到了變量、循環嵌套、克隆體、列表、字符串連接等功能,并用到了多種算法,包括遍歷算法、排序算法、求和、求平均值和最值等算法。
另外,游戲中還有很多原創的角色,如太陽花,AI防御網等。

正文upload/article/images/2020-11-19/504a7dbe69dac0680b06e0932dd4e7eb.jpg

2019年第五屆全國青少年創意編程與智能設計大賽已經落下帷幕,本屆大賽吸引了全國30個省市的青少年參與,一共有9668份Scratch創意編程作品入圍了全國比賽,有886名選手參加了Scratch創意編程比賽的線上終評。今天我們要學習的內容就是從近千名選手近萬份作品中脫穎而出獲得小學1-3年級組一等獎的作品,它就是齊嘉懿同學創作的《穿越時空的大戰》。從上面的作品說明中我們可以了解到這個作品中包含了各種各樣的角色、功能和算法,作為一名三年級以下的小學生,將這么多的知識點搞懂,并且融合在一個作品中著實是不容易,可見要獲得一等獎沒點真功夫是不行的,那到底是騾子是馬,獲獎是否實至名歸,下面果凍老師就和大家趕緊一起將作品拆解開來,詳細的分析一下吧。
好,我們這就開始!

點擊綠旗

點擊Scratch軟件的小綠旗,代碼開始運行。一上來,齊嘉懿同學就向所有人展示了他良好的編碼習慣,為什么這么說呢?我們來看一看:

upload/article/images/2020-11-19/2fac13f23c5bd785f112b56b24e9c1f1.jpg

這是一段初始化變量的語句,寫在背景中,點擊綠旗后,齊嘉懿同學第一步做的就是將游戲中涉及到的幾個重要的變量進行初始化,僵尸數量設置為20,坦克數量設置為30,sun設置為0,并且將暫時不用的變量、列表隱藏掉,這些代碼很普通呀,就是簡單的給變量賦值語句,老師為什么要夸贊呢?
接觸過代碼式編程的同學應該知道,如果要使用一個變量通常分三步,分別是聲明、初始化和調用,聲明變量一般都是寫在程序的開頭,并且所有的公共變量統一寫在一起,這樣的寫法并不是必須的,但它是一種編碼規則,對于成千上萬行代碼的中大型程序來說,這樣的規則非常有利于開發者調試程序和維護代碼,對于不是原開發者的工程師來說,這樣的規則也有利于代碼的閱讀和理解。
齊嘉懿同學在他的作品中就使用到了代碼式編程的規則,將重要變量的初始化(Scratch中變量的聲明就是創建變量的過程)寫在了一開始,雖然我們使用Scratch一般只完成幾十幾百行的小程序,但是能夠培養這樣的編程習慣對于同學們今后學習Python、C++等編程語言是非常有益的,所以果凍老師強烈建議大家現在就按照這種習慣寫Scratch語句哦!
回到游戲中,接收點擊綠旗事件的角色還有一個:

upload/article/images/2020-11-19/6ff079644f3040e024c7ba7132bf1506.jpg

這個角色的造型借用了植物大戰僵尸的圖片。

upload/article/images/2020-11-19/052a3cdb19a4b5b02ffaaf9b018b9d5c.jpg

點擊綠旗后舞臺區會立即顯示這張圖片,并作為游戲的開始界面。

upload/article/images/2020-11-19/4ee7c541f06b177b8bdd3fafbdea1501.jpg

圖片中有一行“點擊空格鍵開始游戲”的提示文字,所以在代碼中拖入等待按下空格鍵?的語句。當游戲者按下鍵盤上的空格鍵后,繼續執行下面的代碼,游戲會切換成游戲說明的背景。
在之前的作品中,一個角色響應另一個角色,基本上都是通過廣播,一個角色發送廣播,另一個角色接收廣播,這樣這兩個角色就通過廣播聯系起來了。在這里,齊嘉懿同學又教我們了一招,在事件模塊中有一個當背景換成XX的語句,我們使用它可以響應開始角色切換背景的動作,而接收響應的角色就是開始游戲按鈕(角色2):

upload/article/images/2020-11-19/94bae42af43b3fbda5272db5e816e667.jpg

當游戲顯示說明的界面后,這個按鈕就會顯示在舞臺區的右下角:

upload/article/images/2020-11-19/dbacac6351562612f767098f808ae6c2.jpg

點擊開始游戲按鈕,游戲會切換到主角媽媽的房間中,不知道是誰把媽媽的房間搞得亂七八糟的,游戲主角被媽媽誤解臭罵了一頓,于是他要去找少年偵探團幫忙,所以接下來,名偵探柯南就正式登場了。

https://cdn.china-scratch.com/timg/191125/135S120X-7.gif

熟悉的背景音樂出現!同學們有沒有發現,名偵探柯南的角色實際上只是一張背景圖片,而真正說話的角色是它:

upload/article/images/2020-11-19/06fde6b2987159b8cd76dab3360120ce.jpg

可是柯南在說話的時候,我們卻看不到這個紫色的方框,這是怎么回事?原來在代碼中這個紫方框通過虛像效果被隱藏掉了,齊嘉懿同學厲害的地方在于他知道虛像效果可以使角色透明不可見,但是卻不能讓“說的話”隱藏,正是由于Scratch軟件的這個特性,才能實現圖片柯南在說話的效果。

upload/article/images/2020-11-19/31545f6bfa0d8a4d282fe7637a7a7c29.jpg

柯南說話是一個字一個字出現的,類似于打字的效果,同學們還記得不記得,在《記憶碎片》這篇文章中,游戲的一開始也播放了一段打字的動畫,那個動畫的原理是每多一個字就創建一個造型,然后不斷的切換造型實現的。這里呢,齊嘉懿同學又教給大家另一個方法,完全用代碼實現,幾行代碼就能搞定,這可比創建一大堆造型要方便多了。上面的截圖中已經貼出了打字動畫的代碼。
首先,我們需要定義三個變量,分別是:漢字、進行中的漢字和查找字符。
變量漢字用于存儲柯南要說的話,它的內容并不會顯示在屏幕上,這個變量的意義就是將它的文字一個一個取出來,然后再賦值給進行中的漢字這個變量。
進行中的漢字這個變量呢,是柯南真正要說的內容,代碼中每循環重復一次,這個變量就會多存儲一個文字,直到它的文字和變量漢字的內容一樣為止。
那怎樣把變量漢字中的文字一個一個取出來放到進行中的漢字中呢?這就要用到第三個變量:查找字符,它是一個數字型變量,用于記錄當前取到了第幾個文字,它從1開始,每循環重復一次,查找字符變量的值都增加1。
在Scratch的運算模塊中,有三個處理字符串的語句:

upload/article/images/2020-11-19/5ba59043f5ca62457e2e419487eb4368.jpg

第一個語句用于連接兩個字符串,我們可以將它們拼接在一起組成一個字符串。
第二個語句可以取出一個字符串中指定的一個字符。
第三個語句返回一個數字,表示字符串的長度。
我們將這三個語句中的字符串用變量替代,再加上重復執行和說語句的配合,就實現了名偵探柯南一字一字說話的動畫效果。理解了三個變量與三個字符串語句的作用后,我們再去看代碼邏輯是不是一下子就非常清楚了呢!
有同學提出,這種代碼實現打字動畫的方法有一個缺點,或者說是限制。對,就是這種方法只適用于說語句,也就是說打字的效果是角色“說”出來的。如果我們要實現《記憶碎片》中的全屏式打字動畫,那還是乖乖的一個一個建造型吧。
游戲中,名偵探柯南告訴我們,如果想知道事情的真相,就必須通過時光機進入時光隧道回到過去,但是需要足夠的能量才能解鎖時光機,于是,我們要與AI機器人進行數學知識互動問答,每參與一個問答增加2點能量,充滿12點能量,時光機就可以啟動了。
代碼中,說話專用角色會廣播交互模式并等待,等待什么呢?就是等待能量值達到12的時候,代碼才會往下繼續。
upload/article/images/2020-11-19/bfb74c6cc05efac5c934b69c64b19bed.jpg

交互模式

接收交互模式廣播的角色有多少個呢?一共有七個,一個機器人與六個按鈕:

upload/article/images/2020-11-19/845340849f2b427f330ae72ea82adf85.jpg

角色可真不少,但是它們的代碼基本是一樣的,很簡單:

upload/article/images/2020-11-19/7839383b2108e12aaaf51c5d80576e09.jpg

機器人與按鈕們在屏幕中顯示在規定好的位置上,就是這樣的:

upload/article/images/2020-11-19/dbe7dcc82b46d0fb576397931c994d9f.jpg

咦?!左邊怎么還有個成績單的列表,它是哪兒來的?仔細看看源碼,原來它是在最后一個按鈕中通過代碼添加進來的。
upload/article/images/2020-11-19/5a4853f4a78e838de32704e28ed2d9d7.jpg

成績單列表中存儲了40個35到100之間的隨機數字。六個黃色的按鈕就會對這40個隨機數進行求和、求平均數、求最高分等數學運算操作。
因為篇幅有限,果凍老師不會把六個按鈕的運算邏輯都貼在這里講解,所以我看了看,挑了一個最復雜的按鈕進行分析,就是求最高分和最低分的差:

upload/article/images/2020-11-19/299c473165cc468d234e08c025915903.jpg

這個按鈕里面包含了求最高分和求最低分兩個按鈕的運算過程,學一個按鈕就相當于學會了三個按鈕,一舉三得呀。

upload/article/images/2020-11-19/811e1c297e932f535cfadbb0f1019853.jpg

點擊這個按鈕后會發送“最高分和最低分的差”的廣播,并且等待接收廣播的角色完成運算后,繼續執行隱藏按鈕并將點擊次數和能量值這兩個變量分別增加1和2的代碼。
那接收廣播的角色是誰呢?就是AI機器人:

upload/article/images/2020-11-19/ea2cb961f8f3fe713416e89086cf838e.jpg

它接收到“最高分和最低分的差”的廣播后,經過一段小小的思考就會說出答案:

upload/article/images/2020-11-19/c49de82f6fcf3da1246306428fba559e.jpg

算的好快呀!到底算的準不準呢?這就得看它背后的計算邏輯了:

upload/article/images/2020-11-19/237c03d7d6dde3cad9842cc67fc1b7a6.jpg

整個運算的邏輯可以分為三部分:找出最大值、找出最小值、計算它們的差。
找出最大值使用到兩個變量,最大的數字和查找位置。首先將成績列表中的第一個數字賦給最大的數字這個變量,接著從第二個開始(每一輪循環將查找位置的變量值加1)將列表中的數字逐個與最大的數字變量進行比較,如果小于變量不用管,如果大于就將這個值賦給變量,這樣循環執行完后,最大的數字這個變量中存儲的就是最大值了。
找出最小值的過程剛好與最大值相反,是一個不斷記錄更小的值的過程。
最后,將最大值減去最小值就是結果的差值了。
很簡單的是不是?齊嘉懿同學將數學知識與游戲內容完美的結合在一起,真是不服不行呀!
數學問答任務到這里就結束了嗎?還沒有。齊嘉懿同學更厲害的地方在于他還細心的為每一個按鈕增加了防連點的功能,防連點的意思就是當按下一個按鈕,運算結果還沒有出來時不能點擊其它按鈕,點擊其它按鈕是沒有作用的。機器人的大腦和人腦一樣,只有一個,它可不能同時運算多個數學公式哦。
這個防連點的功能是怎么實現的呢?其實很簡單,我們只需要創建一個防連點的角色:

https://cdn.china-scratch.com/timg/191125/135S324Z-21.jpg

然后在角色的造型選項卡中將填充設置為透明,輪廓也設置為透明。同學們應該都知道,Scratch軟件舞臺區的大小是480×360,于是我們就在造型中畫一個480×360大小的透明矩形:

https://cdn.china-scratch.com/timg/191125/135S42496-22.jpg

這樣,我們就創建了一個和舞臺區大小形狀一樣并且透明不可見的矩形角色,那實現防連點就很簡單了,只需要在機器人運算的時候將這個矩形角色蓋住所有的按鈕就可以了,透明效果可以保證我們看到所有的按鈕,但是當我們點擊按鈕時,實際上點擊的是這個透明矩形,按鈕的事件當然就不會被觸發了,這就是防連點的原理。

https://cdn.china-scratch.com/timg/191125/135S42211-23.jpg

同學們有沒有注意到,機器人的代碼最后一行廣播了解鎖,這個解鎖的意思是解開防連點的功能,讓透明的矩形角色隱藏掉,這樣按鈕就又可以點擊了,聰明!。
每點擊一個按鈕,能量值這個變量的值就會增加2,當我們點完六個按鈕后,能量值被填滿,這時名偵探柯南再一次出現,他告訴我們時光機已經開啟,乘坐時光機會回到過去,游戲者會變成指揮官并操作鼠標與入侵者進行戰斗。
同時,屏幕上還會顯示乘坐時光機的按鈕:

https://cdn.china-scratch.com/timg/191125/135S45F1-24.jpg

下一篇文章中,我們就乘坐時光機的按鈕回到過去,并參與激烈的入侵者大戰,是成功是失敗我們拭目以待!

總結

齊嘉懿同學在他的作品中如同開掛般向我們展示了高超的Scratch編程技術,游戲還沒有真正開始,文章僅僅寫了一半,我們已經學會了統一變量初始化規則、背景切換的代碼響應、角色透明說話不透明、編碼實現打字效果、按鈕防連點這些不太常見但是很實用的功能或者編碼技巧,更不用說變量、列表、字符串處理、數學算法這些基礎的Scratch知識點,都一一在作品中進行了展示。作為競賽一等獎的作品真的是讓我們大開眼界,吊足了大家的胃口,迫不及待的想繼續看游戲的后半部分,是不是呀?

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

預約試聽課

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

主站蜘蛛池模板: 油尖旺区| 镇巴县| 三江| 岳普湖县| 上杭县| 怀仁县| 中牟县| 黎城县| 阿拉善盟| 定西市| 衡阳县| 阿瓦提县| 铜鼓县| 屯昌县| 镇康县| 荣成市| 无极县| 吴江市| 桑植县| 望城县| 嘉鱼县| 大理市| 龙门县| 河池市| 莱西市| 彩票| 庄浪县| 松江区| 长宁区| 汶川县| 南郑县| 福清市| 高雄市| 清水河县| 乡宁县| 沛县| 孙吴县| 抚顺县| 三门县| 湟源县| 昌宁县|