国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

極客小將

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

資訊內容

Scratch第五十二講:開心消消樂(CC哥版)

極客小將2021-01-24-
想免費學編程,就請點擊上面的藍字:跟我學Scratch編程,關注CC哥。 最近實在太忙,所以空了一周,關鍵也是一直在做這個小程序。這個消消樂真的是CC哥自己琢磨著編寫的,沒有參考任何其他人的材料,完全屬于獨創。做完之后還是小得意了一下。雖然還有很多地方沒有去一一細化,好在為

想免費學編程,就請點擊上面的藍字:跟我學Scratch編程,關注CC哥。

最近實在太忙,所以空了一周,關鍵也是一直在做這個小程序。這個消消樂真的是CC哥自己琢磨著編寫的,沒有參考任何其他人的材料,完全屬于獨創。做完之后還是小得意了一下。雖然還有很多地方沒有去一一細化,好在為了教學,能講明白就行。

先看看CC哥版的消消樂https://cdn.china-scratch.com/Public/Home/images/grey.gif

雖然跟手游上的比還是差很多,不過作為教學已經很夠用了。做這個游戲還是很費了一些腦子。平常我們去看別人的程序代碼,就會覺得不復雜,或者是感覺就應該這樣設計的。其實任何一個程序都有無數種方法去實現,哪種好,哪種不好,還真是很難說清楚。甚至做完了你都不知道你選的方法是不是最好的方法。在這個程序里,CC哥就反復了很多次,嘗試了各種方法,下面就一一給你道來。

設計框架

第一步是要選擇用什么方法來實現這一堆彩球。消消樂的思路就是通過相鄰的彩球的交換,形成三個連起來的彩球,然后消除掉。那么用什么來做這一堆彩球呢?思路上有兩個大的思路:

1:克隆

????克隆就是這些彩球全部通過克隆來做。

2:圖章

????圖章就是用圖章的命令在桌面上畫出應該的彩球。(CC哥前面有個俄羅斯方塊的講座就是全部用圖章來做的。)

用圖章做這個程序的工作量將主要放在畫圖上,和顏色的檢測上。用克隆做程序的主要工作量就放在了克隆體的操作上。每個人習慣不同,我就更喜歡用克隆來做,這個強調的主要是邏輯和算法。用圖章做是個細致活,實在不是CC哥的風格。大家沒事可以自己試試。https://cdn.china-scratch.com/Public/Home/images/grey.gif

upload/article/images/2021-01-24/85d64ce26519b0377ea974c144e853b9.jpg

我在scratch里選了小球的角色,9個一排,克隆了126個。總共5個造型,隨機分布,看著還不錯吧。https://cdn.china-scratch.com/Public/Home/images/grey.gif

第二步:實現相鄰之間的小球交換

小球交換就有幾種情況:

1:選的球不是相鄰的,那么就不能交換。

2:選的球是同色的,那么也不能交換。

3:選的球交換后,不能形成三個同色球在一起,那么還要換回原地。

https://cdn.china-scratch.com/timg/190623/1124325954-4.gif

第三步:消除同色的小球,上面的小球降落下來。

這里面難點包括:

1:如何檢測上下左右有幾個球是同色的。

2:這些小球是克隆體,如何消除這些特定的克隆體。

3:上面的小球如何降落下來,以及如何在空白位置補充新的小球。

https://cdn.china-scratch.com/timg/190623/112432J08-5.gif

有沒有覺得不好做了?https://cdn.china-scratch.com/Public/Home/images/grey.gif一開始CC哥覺得挺容易的,誰知道做起來還是挺繞的。這一講CC哥不像以前那樣一步一步給大家過代碼,主要講一下CC哥在編程過程中繞的圈子和最終的解決方式吧。如果大家對代碼感興趣,還是老規矩,幫CC哥分享,免費獲取源代碼。https://cdn.china-scratch.com/Public/Home/images/grey.gif

126個球的標簽

做這么多克隆體的管理,就必須要給克隆體打標簽,這個技能CC哥很多講座里都講過了,通過克隆體的私有變量來做。但是這126個球的私有特征都有什么呢?

1:位置,我們要管理球動來動去,自然要標記位置。

2:顏色,這個也是必須標記的。

3:狀態,球也是有狀態的,變動過位置的球跟沒變動過位置的球是有區別的,變動過位置的球就需要檢測位置變動后有沒有同色相鄰球,而沒有變動過位置的球就不需要檢測。

為此,CC哥想到了列表,但是Scratch的列表是一維的,只能有一列,那怎么標記這么多種特征呢?而且位置本身就是個二維的,行和列。

為此,CC哥想到一個方法,用一個5位數字來表示球的信息,第一位是列,第二三位是行,第四位是顏色,第五位是狀態。比如10120,就表示第一列第一排的藍色小球。是不是很完美,一開始CC哥也滿得意的,做到最后就有點蒙圈了。https://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gif

upload/article/images/2021-01-24/c6e6d00e0446064217e2a62ad5f429c0.jpg

scratch畢竟不是C語言,稍微一些復雜的數據的處理用這種圖形命令就會寫得非常復雜,不但容易錯,而且錯了也很難檢查出來。

upload/article/images/2021-01-24/f52dedb0655ec3b6ac879f87216a10ef.jpg

一個計算式屏幕都放不下,寫得CC哥都快崩潰了。尤其是做到消除這一塊時,我就知道這么做肯定不行了,因為通過列表里的狀態信息來控制克隆體,算法實在是太復雜了,所以這條路走不通。

其實一開始我就覺得這么做有些問題,但是一開始也沒法想那么細,每做一步都是一個小成功,當開始發現問題的時候,因為前面已經花了那么多時間,就不想放棄,推倒重來前面不是白做了。最后做到了第三步才發現實在是做不動了,邏輯過于復雜,bug多到根本找不完,解了一個bug,又增加幾個bug。才不得不放棄。這就是我們經常碰到的沉默成本的問題。最后我還是全部推到重來,用了不到半天就把程序全部做完了。前面因為沉默成本,在錯誤的路上埋頭堅持了兩個晚上,想想多么愚蠢呀。https://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gif

CC哥主要錯在哪里了?就是用列表沒錯,錯在信息標簽做的太復雜。

upload/article/images/2021-01-24/c948abc8be0b867e0076924681f84704.jpg

其實就這么一列數據就夠了,因為方框內就這么126個位置,所以從左到右從上到下個號,只要知道小球的編號,就完全可以算出小球在哪個位置上。所以列表的編號就是位置信息,每個編號就對應了一個克隆體。那么列表的內容只需要放這個克隆體的顏色信息就夠了。而狀態這個完全不需要再加一位進去,只需要把有過位置移動的小球信息單獨再創建個列表就OK了。

對特定小球的控制

這個游戲里面大量的操作都是針對具體的克隆體進行控制,這里面有個特別的技巧,就是消息命令。大家一定要掌握。

針對克隆體的控制一般的做法都是用當作為克隆體啟動時來做,里面套個無限循環,然后通過檢測私有標簽,來針對相應的克隆體做些動作,比如移動呀,碰撞檢測呀等等。

upload/article/images/2021-01-24/6bf066c2c7e7950576ac16525b86fdfd.jpg

但是缺點就是如果克隆體的操作邏輯次序比較復雜時,那么這個方法就不合適了,你會需要用大量的判斷命令(控制命令),很容易出錯。

而消息命令就是個非常不錯的方法。

upload/article/images/2021-01-24/4641ae34b674f3806da2c0aee4fa4114.jpg

CC哥把針對小球的每一種控制都用消息來做,邏輯和編程就簡單多了。邏輯很簡單:

當你發布一條消息的時候,所有的克隆體都會同時收到,那么你只要在當接收到消息的代碼中加上一條對私有變量的判斷命令就ok了,符合這個判斷條件的克隆體就會發生動作,不符合的克隆體就不會有動作。是不是很方便,大家一定要掌握這個技巧。

upload/article/images/2021-01-24/0a8b6566f874d91aef07c5bca79dec15.jpg

如何進行相鄰球的同色檢測

同色檢測,以及檢測完畢后面的一系列動作,都是基于列表來操作的。

克隆體之間的互動是個難點,你不論是用消息,還是當克隆體啟動時來對克隆體進行控制,都是針對當前的克隆體,所以代碼就只能操縱當前這個克隆體,而不能在一個克隆體的代碼內去操縱其他的克隆體。如果真的需要,就只能在執行代碼里重新發布消息,這樣其他的克隆體才能接收到消息產生動作。編程就會變得復雜的多。

而通過列表就可以完美的解決問題,每一個克隆體對應列表里的一個數據,我們把希望做的邏輯和控制都在列表上做,對數據的操作,就相當于在克隆體之間進行邏輯和控制操作,當結果出來后,再針對結果通過消息來控制具體的克隆體做相應的動作就好了。

而且列表不是私有變量,完全可以在別的角色里面操作,更加靈活方便:

upload/article/images/2021-01-24/9cbac29bffaa50a234832e797e566c4a.jpg

同色檢測的邏輯就是檢測具體的小球上下左右四個方向有沒有同色連排的球,并把結果反饋回來。(因為有了列表,而且列表跟克隆體的私有信息一一對應,所以我們只要檢測列表里面的數據就行了,不需要去檢測克隆體)

upload/article/images/2021-01-24/af09eed56f1057934c10b6eb12dc2968.jpg

因為我們不確定到底有幾個小球相連,為了編程簡單,我們用了遞歸的技巧,遞歸之前有專題講座,如果不是太懂得朋友可以復習一下。

CC哥不像把編程邏輯做的太復雜,所以就用了四個自定義命令來檢測上下左右四個方向。雖然代碼多,但是邏輯簡單哦。

我們編程的時候沒必要為了代碼的簡單去可以去優化邏輯,大家一定記得,邏輯越復雜,bug越多的道理。

https://cdn.china-scratch.com/timg/190623/11243434Y-21.jpg

看只要知道一個小球的編號,減去9就是它上面小球的編號,加上9就是它下面小球的編號,多簡單。https://cdn.china-scratch.com/Public/Home/images/grey.gif

https://cdn.china-scratch.com/timg/190623/1124353351-23.jpg

因為互換操作是兩個球,每個球都可能發生同色球連排,所以兩個球都要做,通過返回的上下左右四個變量來表示同色球的起始位置,只要右減左,上減下,就可以得出同色的球是否有三個以上,來判斷是否要做下一步的消除同色球的操作了。

兩球交換動作注意

為了表現兩個球交換的動態效果,這兩個克隆體的移動是真實發生的。當克隆體真實移動的時候,就必須注意克隆體的私有標識信息要跟列表同步好,如果忘掉這一步,那么列表和克隆體的對應就亂掉了。

https://cdn.china-scratch.com/timg/190623/1124353A6-24.jpg

https://cdn.china-scratch.com/timg/190623/112435D36-25.jpg

清除同色球的操作

要說明一點,這個游戲的關鍵是除了兩個球的交換CC哥用了克隆體的移動,其他的所有操作,都沒有發生克隆體的移動。那么如何做到消除呢?只是簡單的把小球的造型換了個空白的就實現了消除操作。https://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gif

那消除后的空白,如果實現讓上面的球落下來呢?也沒有用克隆體位移,只是讓上面所有的克隆體一起改變顏色就好了。視覺上看著就像是上面的小球都落下來了。https://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gif

https://cdn.china-scratch.com/timg/190623/112435L48-31.jpg

因為這些小球都是克隆體,而不是一個個具體角色,所以當要操作這些需要消除的角色時,還是要通過消息來操作。因為同色球的數量是不固定的,最簡單的操作就是把所有要清除的同色球編號,都單獨放在一個列表里。那么只需要一個簡單的判斷就可以通知對應的球來進行消除動作了。

https://cdn.china-scratch.com/timg/190623/11243CM2-32.jpg

就這么一條語句,每一個克隆體就知道自己是不是清除的對象了。為了有消除的視覺感,我做了幾個對應的破裂的造型,做的有點糙,下次一定好好P一下。https://cdn.china-scratch.com/Public/Home/images/grey.gif

https://cdn.china-scratch.com/timg/190623/11243A2M-34.jpg

消除并不是真的刪除克隆體,而只是換了個空白的造型,屏幕看上去沒有了。

如何讓上面的球落下來

一樣的情況,我們不是真的要讓克隆體移動下來,只是要讓克隆體的顏色變一下,造成下移的效果。(如果你真要做克隆體移動,估計會做崩潰掉的https://cdn.china-scratch.com/Public/Home/images/grey.gif)那么哪些克隆體需要變顏色呢?

同樣,我們不用針對克隆體去做邏輯運算,只要去針對列表就行了。

https://cdn.china-scratch.com/timg/190623/1124362242-36.jpg

每一個被清除的球,我們都要去計算這個球以及其上面每一個球,在下落發生后應該是什么顏色。每計算完一個球,就把它從要清除的列表里刪掉。(這種處理完就刪除的操作的列表操作,為了簡便,大家一定要從列表的尾部取,不要從頭部取)

https://cdn.china-scratch.com/timg/190623/11243CC9-37.jpg

這段程序就是檢測每一個要清除的小球上面一列所有的球,下落后應該對應的顏色。用的仍然是遞歸的算法。每一步只需要確認上方一個球的顏色,然后遞歸操作。

不確定循環次數的循環最好用遞歸

當列表更新完了,就出現了個問題,就是克隆體跟列表不能對應上了,所有改動過的列表項目跟克隆體的造型私有變量對不上了。那就剩下最后一步操作,把這兩項同步就好了。

只要克隆體的顏色與列表不一樣的,都以列表為準,同時切換到對應的造型,下移這么復雜的操作就很簡單的完成了。https://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gif

https://cdn.china-scratch.com/timg/190623/11243Kc4-41.jpg

最后一步,就是把上面空出來的位置補上新球。也就是把空白造型切換成1~5的隨機造型。

https://cdn.china-scratch.com/timg/190623/11243GA1-42.jpg

結束語

大家在學習編程的過程中,一定要實踐,實踐的過程也就是創造的過程,所謂實踐,不是指去復現程序的例子,而是要從頭到尾試著自己去編一些小程序。通過實踐去驗證自己的思路,不僅僅可以鍛煉你的創造性,更可以鍛煉你的邏輯的嚴謹性,還可以讓你活用學過的技巧。

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

預約試聽課

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

国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

        免费看黄色a级片| 国产三区在线视频| a级片一区二区| 亚洲精品少妇一区二区| 国产九色porny| 草草草在线视频| aaa一级黄色片| 91亚洲精品国产| 成人一区二区三| 红桃视频 国产| 欧美午夜小视频| 中文字幕av不卡在线| 91免费版看片| 欧美午夜性生活| 黄色片免费在线观看视频| 无码人妻丰满熟妇区96| 在线不卡一区二区三区| 黄色一级片国产| 成人观看免费完整观看| 深夜做爰性大片蜜桃| 男人用嘴添女人下身免费视频| 亚洲精品自拍网| www.av中文字幕| 一级日本黄色片| 男人操女人免费软件| 色乱码一区二区三区熟女| 国产精品第12页| 国产又粗又猛又爽又黄的网站 | 国产v片免费观看| 在线观看免费不卡av| 国产毛片视频网站| 韩国黄色一级大片| 亚洲成人天堂网| 日韩av一二三四区| 男人添女人下部视频免费| 手机av在线免费| 欧美黑人又粗又大又爽免费| 欧美性潮喷xxxxx免费视频看| 男人添女人下面免费视频| 精品视频免费在线播放| 韩国无码av片在线观看网站| 污污的网站18| 能看的毛片网站| 男人揉女人奶房视频60分| 免费在线看黄色片| 日韩一二区视频| 四虎成人在线播放| 91高清国产视频| 国产无套粉嫩白浆内谢的出处| 国产精品久久中文字幕| 青青草综合视频| 亚洲 欧洲 日韩| 久久久久久综合网| 在线观看av免费观看| 91最新在线观看| 青青青在线视频免费观看| 麻豆av免费在线| 50路60路老熟妇啪啪| 黄色a级片免费| 六月丁香婷婷激情| 日日摸天天爽天天爽视频| 无遮挡又爽又刺激的视频| 国产极品美女高潮无套久久久| 蜜臀av午夜一区二区三区| 成年人小视频网站| 奇米影音第四色| 伊人成人222| 无套内谢丰满少妇中文字幕| 男插女免费视频| 欧美亚洲色图视频| 成年人视频观看| www.涩涩涩| 五月天男人天堂| 日韩欧美猛交xxxxx无码| 人妻夜夜添夜夜无码av| 91免费视频网站在线观看| 熟女人妇 成熟妇女系列视频| 在线观看岛国av| 日本在线视频www色| 亚洲人成无码网站久久99热国产| 欧美色图色综合| www.国产视频.com| 久艹在线免费观看| 丰满少妇在线观看| 国产在线无码精品| 麻豆av免费在线| 日本福利视频导航| 116极品美女午夜一级| 午夜久久福利视频| 日本福利视频一区| 国内外成人免费在线视频| 中文字幕第50页| 每日在线更新av| 久久久九九九热| 成人av一级片| 麻豆md0077饥渴少妇| 凹凸国产熟女精品视频| 黄色一级片网址| www.亚洲天堂网| 成人国产一区二区三区| 天天干在线影院| 色欲色香天天天综合网www| www.激情小说.com| 国产精品网站免费| 黄色a级在线观看| 美女网站免费观看视频| 欧美中日韩在线| 99视频在线观看视频| 日韩亚洲在线视频| 久久久久久人妻一区二区三区| 日韩在线不卡一区| 日本男人操女人| www精品久久| 日本a级片在线观看| 日本高清一区二区视频| 久久精品网站视频| 日本十八禁视频无遮挡| 成年丰满熟妇午夜免费视频 | 亚洲欧美日韩一二三区| 国产精品亚洲二区在线观看| 九九爱精品视频| 成年在线观看视频| 99中文字幕在线观看| 992kp免费看片| 欧美成人手机在线视频| 小泽玛利亚视频在线观看| 一本久道综合色婷婷五月| 国产91在线视频观看| 人妻av中文系列| 黄色免费视频大全| 国产视频九色蝌蚪| 国产午夜福利100集发布| 日韩视频免费播放| 亚洲熟妇无码一区二区三区导航| 香港三级日本三级a视频| 国产欧美123| av动漫在线播放| 日韩精品综合在线| 久久这里只有精品18| 日韩人妻无码精品久久久不卡| 男人天堂新网址| 日本福利视频一区| 男人天堂网视频| 日本人视频jizz页码69| 九九热99视频| 日本一道在线观看| www.国产在线播放| 国产欧美高清在线| 欧美日韩怡红院| 超碰在线资源站| 国产911在线观看| 男的插女的下面视频| 99热成人精品热久久66| 青青草原国产在线视频| 欧美一级免费在线| 亚洲人成无码网站久久99热国产| 亚洲中文字幕无码不卡电影| www欧美激情| 日本精品福利视频| 丁香啪啪综合成人亚洲| 中文 日韩 欧美| 国产a级片网站| 美女网站色免费| 国产精品igao激情视频 | 欧美大片免费播放| 日韩精品视频久久| 久久精品亚洲天堂| 精品久久久久久久久久中文字幕| 免费黄色一级网站| www.激情网| 国产天堂在线播放| 激情视频小说图片| 99视频在线免费| 轻点好疼好大好爽视频| 手机在线成人免费视频| av动漫在线播放| 天天综合网日韩| 日韩欧美一区二| 日韩不卡一二区| 国产九九热视频| 国产69精品久久久久久久| 最新av免费在线观看| 黄色片视频在线免费观看| 五月天在线免费视频| 亚洲免费一级视频| 青青艹视频在线| 99中文字幕在线观看| 黄色小视频免费网站| 人妻内射一区二区在线视频| 欧美另类videosbestsex日本| www.涩涩涩| 亚洲中文字幕久久精品无码喷水| 4444亚洲人成无码网在线观看| 玖玖爱视频在线| 日韩精品一区中文字幕| 91免费黄视频| 18禁裸男晨勃露j毛免费观看| www.污网站| 欧美大片久久久| 中文字幕亚洲欧洲|