竹内纱里奈和大战黑人_欧美成人黄色小视频_91福利影视_欧美在线观看视频网站_h色网站免费观看_97综合

極客小將

您現(xiàn)在的位置是:首頁 » scratch編程資訊

資訊內(nèi)容

朋友圈的親子編程課——Scratch第一期全集

極客小將2020-12-18-
前言
upload/article/images/2020-12-18/3e25948b1045c9fa4c7f541810297385.jpg前言upload/article/images/2020-12-18/c08791a9a4e616b3e6cc18bcfea37f04.jpg

在夏天開始之前,我設(shè)想用一段較長的時間,做一些跟編程教學(xué)有關(guān)的事情。經(jīng)過一個夏天的斷斷續(xù)續(xù)的思考與準(zhǔn)備,我決定從這個起點(diǎn)開始,這個起點(diǎn),我稱之為——《朋友圈的親子編程課》。

(四年多前注冊這個公眾號的時候,原意只是發(fā)一些跟拍照、跟市場有關(guān)的內(nèi)容。如今,似乎離初衷已經(jīng)有了一段距離,但還是決定不去更名,跟我相關(guān)的東西,屬于我的,看到的,想到的,可以分享的,挺好。就是在這第一篇枯燥的文字里,穿插一些過去歲月中與花花草草相關(guān)的照片有一些扣題,更有一些自己還想留存的風(fēng)格。)

upload/article/images/2020-12-18/fa2f829a540b94846c55884f63b30b4b.jpg

感謝鋪天蓋地的人工智能對未來“恐怖前景”的描述,這兩年來,很多朋友會在不同的場合問到我關(guān)于編程學(xué)習(xí)的事情,我也會主動的跟身邊朋友交流一些程序的問題。當(dāng)然,因?yàn)樯鐣秩竞妥陨砺殬I(yè)的關(guān)系,Python成為毫無疑問的頻度最高的關(guān)鍵詞。
甚至,在我嘗試引導(dǎo)自己九歲女兒編程興趣的開始,我也選擇了Python。當(dāng)然,這是一個挺失敗的選擇,簡單的文字界面與枯燥的概念,自然無法引起一個低年級小學(xué)生足夠的關(guān)注度。有意思的反轉(zhuǎn)是,女兒在學(xué)校接觸到了Scratch,并且主動要求我教她。在自己斷斷續(xù)續(xù)的嘗試及與她的互動后,我開始了認(rèn)真的備課,編排內(nèi)容、設(shè)計例子,并在八月用了近兩周的時間,對女兒進(jìn)行了教學(xué),效果是:我想要灌輸?shù)年P(guān)于程序的基本概念都被毫無抵抗的接受了;即使有一些復(fù)雜的例子也被完全理解并得到擴(kuò)展;她開始希望我教一些更難的例子或者,一門新的語言,例如Python,或者BASICupload/article/images/2020-12-18/7b743ff35ada4f604aebb5e1751bb650.jpg?

三十年前的起步,一臺叫做Laser310的“電腦”,我用的版本只能使用BASIC程序,功能還弱于稍晚幾年風(fēng)靡的“小霸王學(xué)習(xí)機(jī)”。由于程序不能保存,每次開機(jī)都要從自己厚厚的手抄程序本中找出一段代碼,敲進(jìn)去,再運(yùn)行。最大的好處是,從小就建立了良好的盲打基礎(chǔ)。

回顧自己差不多三十年前開始接觸編程至今,唏噓時代變遷:我那時候從認(rèn)識二十六個英文字母開始,而如今簡單的英語對八九歲的孩子來講毫無壓力;我那時候懵懵懂懂的從BASIC開始是毫無疑問的唯一選擇,而如今的選擇多了太多太多。更有許許多多不變的,是那個我們一直稱為程序思維,看得見、摸得著,卻很難簡單定義的存在。也許誕生于互聯(lián)網(wǎng)高速發(fā)展之前的“史前”程序員,如我,都有一種潔癖般的固執(zhí),一種對于數(shù)據(jù)、結(jié)構(gòu)、算法,面向過程、面向?qū)ο筮@些概念朝圣般的偏執(zhí)。一個最大的負(fù)面效果就是,當(dāng)朋友問我,如何從零基礎(chǔ)起步,我總會想很多,然后給不出答案。一如已經(jīng)花去了我超過一個禮拜時間的風(fēng)格迥異的前六個版本前言。upload/article/images/2020-12-18/bde9bfd89e418b40c9d6c8e4a2e78a12.jpg也許,重要的只是開始,而不是如何開始吧。所以,我決定這一定是最后一個版本的前言了。因?yàn)樵缫颜砗玫膬?nèi)容,如同整裝待發(fā)卻始終聽不到出發(fā)汽笛聲的一節(jié)節(jié)車皮一樣,孤獨(dú)的在角落里,落寞了很久。upload/article/images/2020-12-18/c4145b2568dc2aef5c933702cd5e2d1b.jpg呼應(yīng)前段,我把從現(xiàn)在開始,大約持續(xù)兩周時間的課程,叫做《朋友圈的親子編程課》,選用的語言是Scratch。面向三類對象。

第一類對象

朋友圈里的父母

哪怕只有很短的時間,但是通過自己學(xué)習(xí)、整理、陪伴,輸出給孩子,再得到反饋的過程,感覺真的很美妙。


第二類對象

那些“零基礎(chǔ)”朋友

雖然內(nèi)容看起來并不會很復(fù)雜,與傳統(tǒng)理解的寫代碼也有些許差別,但是,我確實(shí)很認(rèn)真的把我對程序入門的理解與更有趣的皮囊放在了一起,半個月的收獲,不會比學(xué)習(xí)任何其他一門語言小。

第三類對象

尋找可能性的朋友

在我使用Scratch過程中,我發(fā)現(xiàn)了很多有意思的可能性,所以,第三類,姑且叫做尋找可能性的朋友。


簡單講幾個問題,然后,鳴汽笛,啟動。

1為什么用Scratch起步

upload/article/images/2020-12-18/3f72b20cd4868da6fd26ef812c2791da.jpg

對孩子來說,我們都知道,興趣是第一重要的,而第二重要的是學(xué)習(xí)階梯。如果倒推十年二十年,正如我的經(jīng)歷一樣,也許我們沒有其他選擇,都需要從BASIC/PASCAL/C語言開始。然而放到如今,我們多了另一類選擇,被稱為積木式編程(Block-Based Coding),相對的,之前說的那些語言,稱為文本式編程(Text-Based Coding)。相對于傳統(tǒng)的文本式編程,積木式編程界面漂亮、娛樂性強(qiáng)的特點(diǎn)非常適合小朋友入門,另外,在Python、JavaScript等語言大行其道的當(dāng)下,積木式編程反而擁有了更清晰的程序結(jié)構(gòu)、邏輯關(guān)系,這些,對于建立初步的程序思維,都大有益處。

即使是“零基礎(chǔ)”的成人,花一點(diǎn)點(diǎn)時間來熟悉和學(xué)習(xí)一下Scratch,也是有益無害。更擴(kuò)展一下,Scratch本身非常適合做動畫、交互等,那么做個有意思的PPT、動畫,甚至一些簡單的演示或者教學(xué),也是非常合適的。

2
教什么?

upload/article/images/2020-12-18/3b09b24e3cb7343fac1717baac468b19.jpg

第一期的《朋友圈的親子編程課》分為十節(jié),大概兩周推送完畢。在后面的實(shí)際內(nèi)容中,我按照Scratch的功能設(shè)置與特點(diǎn),結(jié)合自己在這個年齡起步時的經(jīng)驗(yàn),進(jìn)行組織。編排上,概念、簡單原理、例子、動手實(shí)踐,這些環(huán)節(jié)都會涉及。我的目標(biāo)也很明確:第一期課完成后,第一個層次,掌握了一些程序的基本概念、Scratch的基本功能、簡單組合,能夠編寫一些中等復(fù)雜的例子;第二個層次,這時候可以有個選擇,Scratch進(jìn)階,或者學(xué)習(xí)一門文本式編程語言,因?yàn)殛P(guān)于程序的基本概念已經(jīng)有了,所以,學(xué)習(xí)一門文本式編程語言,起步不是太難的事情。

3
怎么學(xué)?

upload/article/images/2020-12-18/d9067cec29f7b09ac2eeb75a0da8d45c.jpg

就親子編程目標(biāo)而言,我建議家長朋友能夠每天花一點(diǎn)時間做三件事情:

upload/article/images/2020-12-18/e7feee0a9240494470d40fa5a001cddf.jpg

1、看完我寫的內(nèi)容

2、自己動手實(shí)踐

3、陪伴并帶著孩子一起實(shí)踐

編程的實(shí)踐性非常強(qiáng),只有不斷的嘗試,才能有提高。

親子共同學(xué)習(xí)、實(shí)踐,意義也不僅僅在于樹立榜樣、培養(yǎng)興趣。小朋友的想象力是驚人的,程序世界是自由的,當(dāng)這兩個世界碰撞之后,我們可以得到很多難以想象的啟發(fā),而這種啟發(fā),沒有陪伴,是很難獲得的。

4
我的角色

upload/article/images/2020-12-18/0c67f06d610ddd2a3ba2254256d39866.jpg

為什么叫《朋友圈的親子編程課》,與我自己的角色定位有關(guān),我的角色就是朋友。與朋友分享、看下一代成長,是兩大趣事,結(jié)合起來,做一個更有意義的趣事。

為什么是朋友,一是有什么問題,可以隨時聯(lián)系到我二是,我有什么新想法也可以隨時被看到,都是簡單直接的方式,省心。

當(dāng)然,借助于強(qiáng)大的線上資源,我也會利用各種工具來提升效果、提高效率,這個可以以后慢慢分享。

5下一步的計劃

upload/article/images/2020-12-18/54f1b4defb98921022155805a546f457.jpg

在之前的每一個被我否定掉的前言的版本里,都會有一大堆關(guān)于規(guī)劃的內(nèi)容。可是正如之前所言,開始才是最重要的,也許以后會有類似于《朋友圈的編程課》、《朋友圈的Python從入門到放棄》、《朋友圈的好玩的BASIC》出現(xiàn),但是,沒有現(xiàn)在開始的一步一步,又何談未來,一切,慢慢來。

終于確定,這是一個最終面世版的前言了,在比原計劃整整晚了一個禮拜的時候。

恍惚間,又一個夏日終了,魔都也難得在連綿不斷的大中小雨后,展現(xiàn)出藍(lán)天白云下獨(dú)特的魅力。紛擾的世界、煩亂的內(nèi)心,都因開學(xué)季的到來,都因生命中數(shù)十個夏日、秋天的情緒切換,慢慢悸于平靜。

upload/article/images/2020-12-18/1192aefa87b20b964289e49e0076b770.jpg?upload/article/images/2020-12-18/f01afc59ffc38c60f79425540640ec0e.jpg?

From the ground up,我們開始吧。

upload/article/images/2020-12-18/4d1ad9a793b7aac360c61d49165e6721.jpg?二、Scratch

? ?Hello,World!

從這一節(jié)開始,正式進(jìn)入內(nèi)容,這一節(jié)會先有一個Scratch的基本介紹,然后是,對于多數(shù)純Scratch課程而言很奇怪,但是對于程序世界很有儀式感的歡迎詞:Hello,World!

我說過,我是個很固執(zhí)的“史前”生物。

1upload/article/images/2020-12-18/925db6027c30486159358cd41fc67a34.jpg背景介紹

Scratch最早是2006年,由The MIT Media Lab's Lifelong Kindergarten Group?推出。如今已經(jīng)發(fā)展到3.0版本,基于HTML5,不需要本地安裝。

訪問https://scratch.mit.edu,就是Scratch的官方網(wǎng)站。

我并沒有接觸過Scratch的前兩個大版本,所以也不清楚以前是什么樣子的,但如今,就是一個標(biāo)準(zhǔn)的社區(qū)模樣。開源、在線文檔、社區(qū),程序員三大寶,一個不缺。對了,Scratch是開源的,雖然對絕大多數(shù)使用者來說,這個根本不重要,但是它確實(shí)給了市面上不少“改裝版”存活基礎(chǔ)和空間,考慮到我是一個徹頭徹尾的“原創(chuàng)主義者”,所以,在學(xué)習(xí)過程中,我只推薦原版。另一個只推薦原版的理由是:Scratch的作用是啟蒙加基礎(chǔ)入門,這個階段,編程最重要的是基本思想的建立,每一種語言都有其適用范圍和局限性,Scratch當(dāng)然不例外。

upload/article/images/2020-12-18/097ef996d062befdd981b85733f622f4.jpg?

“改裝版”或許在某些方面改進(jìn)了一些不足,甚至提供了更多更靈活的功能,但是否會破壞原有的體系和編程語言背后基礎(chǔ)而貫穿的邏輯,就不得而知了。

2upload/article/images/2020-12-18/925db6027c30486159358cd41fc67a34.jpg各種資源

目前,線上已經(jīng)有大量的Scratch資源存在。

01?

官方網(wǎng)站

02?

Scratch Wiki

03?

第三方

首先,最大的資料來源就是官方網(wǎng)站,除了提供編程實(shí)踐的平臺之外,還可以通過訪問社區(qū)、支持板塊獲取足夠的相關(guān)信息。其中,最大的特色是網(wǎng)站上有來自全球用戶分享的Scratch項(xiàng)目,既可以直接看到結(jié)果(游戲、故事、動畫,等等),也可以查看源代碼,吸取別人的智慧。

其次,推薦Scratch?Wiki?(https://en.scratch-wiki.info/wiki/Scratch_Wiki_Home),這個百科網(wǎng)站最早與Scratch開發(fā)團(tuán)隊并沒有關(guān)聯(lián),后幾經(jīng)易手,曾經(jīng)由Scratch開發(fā)團(tuán)隊維護(hù)。如今,為了更好的服務(wù)于Scratch用戶,該網(wǎng)站已經(jīng)轉(zhuǎn)由第三方組織維護(hù),但是Scratch開發(fā)團(tuán)隊依然提供大量的支持。

upload/article/images/2020-12-18/32d971c4a5f5215b05844391c6eabd10.jpg?

一點(diǎn)一滴,交待的清清楚楚。當(dāng)我決定啟動編程課程的時候,最大的挑戰(zhàn)來自于內(nèi)心:我如何能夠長期的做下去?在這個目標(biāo)下,會有許許多多不同的選擇,有那么一點(diǎn)點(diǎn)是已經(jīng)做了的,還有許多是尚未面對的。一點(diǎn)一滴,慢慢來吧。

第三,通過搜索引擎能夠搜索到許多自媒體的資源,包括公眾號,博客等,也有不少的用戶會把自己的項(xiàng)目匯集起來,做成課程。對一些感興趣的目標(biāo),搜索相關(guān)資源,查看別人的代碼,是重要的學(xué)習(xí)。

upload/article/images/2020-12-18/bdc26b178946f78f05446b7152c2a351.jpg

寫代碼,大概永遠(yuǎn)是這么一個過程:學(xué)概念、學(xué)例子、模仿、改進(jìn),到自創(chuàng)。學(xué)習(xí)別人的經(jīng)驗(yàn),分享自己的收獲,這是開源最樸素的想法,也是程序員自由世界的基礎(chǔ)。

3upload/article/images/2020-12-18/925db6027c30486159358cd41fc67a34.jpg界面

?https://scratch.mit.edu/

https://cdn.china-scratch.com/timg/190923/112G260R-21.jpg?

Scratch界面可以是中文的,甚至于程序模塊都可以中文顯示,但是,幾乎所有主流程序語言都是英文的,學(xué)習(xí)資料許多也是英文的,為了更好的與未來銜接,還是強(qiáng)烈建議從現(xiàn)在開始全程使用英文。

Scratch首頁的界面主要有以下幾部分內(nèi)容:

藍(lán)色菜單條部分:

左上角分別是Scratch圖標(biāo),點(diǎn)擊進(jìn)入首頁;

Create,無論有沒有注冊賬號并登陸,點(diǎn)擊就可以進(jìn)入一個新的項(xiàng)目界面;Explore,看看其他用戶都分享了哪些有趣的程序;

Ideas,有一些入門教程和主題導(dǎo)引;

右邊,就是跟賬號有關(guān)了,建議開始的時候就注冊一個賬號,最大的好處是所有編輯的項(xiàng)目和代碼都會保存下來,還可以修改,分享。

頁面主體就是一些用戶分享的項(xiàng)目,出于興趣,可以自由瀏覽、參考。

直接點(diǎn)擊Create,進(jìn)入一個新建項(xiàng)目,經(jīng)過一段時間的加載等待(取決于網(wǎng)速),就進(jìn)入了程序設(shè)計界面。?

https://cdn.china-scratch.com/timg/190923/112G2H23-22.jpg

可以看到,整個工作區(qū)被劃分為四大區(qū)域。

12是代碼模塊區(qū),其中1是代碼類別選區(qū),2是代碼塊選區(qū)。Scratch編程是不需要手寫代碼的,所有的代碼都靠積木塊組合實(shí)現(xiàn)。

3是編碼區(qū),把2中的代碼塊拖拽入3區(qū)域,并加以組合,就是Scratch的編碼過程。

4為預(yù)覽區(qū),可以隨時看到代碼運(yùn)行的結(jié)果。默認(rèn)模式下,預(yù)覽區(qū)顯示了一只貓。

5是Sprite編輯區(qū),可以對Sprite的屬性進(jìn)行編輯,例如位置,大小,方向,等等。

upload/article/images/2020-12-18/bdc26b178946f78f05446b7152c2a351.jpg

對于Sprite的準(zhǔn)確意思。在我的理解過程中也廢了些周折,開始時候,我本能的將之與對象聯(lián)系起來。甚至在這一節(jié)的初稿里我還專門寫了一段對于對象的簡單解釋。但是,實(shí)際上,Sprite是一個不同于對象的專有名詞,是動畫、游戲編程中最基本的存在。再一次為自己的淺薄暗自檢討的同時,尊重開發(fā)者的本來意愿,懷著敬畏的心態(tài)繼續(xù)使用Sprite的稱呼,并簡單翻譯成中文意思:精靈。

在后面章節(jié)的初稿里,仍有大段的關(guān)于Sprite的個人理解,我會保留自己原本的寫法,并加入業(yè)內(nèi)通用的理解。

6是Stage,場景編輯區(qū)。可以加入不同的背景,場景也可以單獨(dú)編碼,獲得不少炫酷有趣的效果。

4upload/article/images/2020-12-18/925db6027c30486159358cd41fc67a34.jpgHello,World!

按照我們從小學(xué)到大的習(xí)慣,這里應(yīng)該有一個小節(jié),叫做“Hello,World!”。作為一個pc單機(jī)時代走過來的程序員,開始講編程,必須對傳統(tǒng)足夠的尊重,所以,讓預(yù)覽區(qū)默認(rèn)出現(xiàn)的貓說一句“Hello,World!”,作為本章的結(jié)束,所有關(guān)于代碼、原理的解釋,則留待以后。

https://cdn.china-scratch.com/timg/190923/112G34027-25.jpg

PS:關(guān)于“Hello,World!”在程序世界的魔力,是個很有意思的話題,關(guān)于它的起源,有不少說法,感興趣的可以搜一下。

三、Sprite 相關(guān)

Looks?&?Motion

在情懷式的“Hello,World!”之后,開始Scratch編碼課程的第一部分內(nèi)容,按照自己這些年來對編程語言的理解,Scratch的功能和語言邏輯,以及教自己女兒過程中的反饋,我把課程分為八節(jié)。

理論上,是可以做到一天一課的,但是,要知道,孩子的專注力是有限的,時間也是有限的,編程本身就是一個長期的學(xué)習(xí)與實(shí)踐過程,不在一朝一夕的填鴨,所以,我認(rèn)為把計劃中的課程內(nèi)容按照兩周的時間編排,即使目標(biāo)只是初步入門,強(qiáng)度也是不小的。
同時,我不會像Scratch官網(wǎng)建議的那樣,從好玩的動畫和游戲出發(fā),因?yàn)槿绻@樣,很大可能興趣就止步于動畫和游戲了。任何興趣愛好,即使是游戲,都是值得我們花費(fèi)大量的時間去深入學(xué)習(xí)的,而基礎(chǔ),則是一切的開始,更何況Scratch本身已經(jīng)夠“好玩”了。所以,我會根據(jù)Scratch本身的功能,參照其他高級語言入門時的編排方式,進(jìn)行切割,形成五個講解內(nèi)容,三個綜合性的例子,其中一個是動畫、一個是游戲(呵呵),一個是數(shù)學(xué)(編程與數(shù)學(xué)分不開)小游戲(呵呵+1)。這樣的編排,基本涵蓋了Scratch提供的基本代碼模塊功能。至于擴(kuò)展的部分,特別是樂高之類的,對我來說都高級了,目前不在我計劃中。

講解內(nèi)容一:Sprite相關(guān)(Looks & Motion)

講解內(nèi)容二:變量與表達(dá)式(Variable,Operator)

講解內(nèi)容三:條件分支與事件(Conditional Branches,Events)

講解內(nèi)容四:循環(huán)(Loop)

綜合示例一:動畫

講解內(nèi)容五:傳感器及其他(Sensing)

綜合示例二:小游戲

綜合示例三:數(shù)學(xué)小競賽


另外,在計劃中,我會開第二個兩周課程,顯著的提升代碼復(fù)雜度,去實(shí)現(xiàn)一個又一個的小目標(biāo)。同時,計劃中應(yīng)該會有一個和階段二平行的基于文本編碼的入門課程,為什么這么做的目的現(xiàn)在不想過多解釋,只是真的會很有必要,至于選擇什么語言,以前我很確定,不會選擇Python,然而現(xiàn)在,我想說有不小的可能性會是Python。

對于這一系列安排與選擇,想說,我的固執(zhí)再一次起了巨大的作用,在邏輯與結(jié)構(gòu)先行的根深蒂固的概念影響下,我強(qiáng)行把Scratch積木菜單進(jìn)行了拆分。在Python很好用但是“功法有點(diǎn)邪惡”的長期印象下,我又本能的排斥將Python教給小朋友。好吧,如果我能順利的從Python中提取出自己所謂的“武林正宗”的精髓要義,我就不跟自己較勁了,選擇Python作為文本編碼的入門(腳本)語言。為了不辜負(fù)大家對Python的熱望,我會努力的。

https://cdn.china-scratch.com/timg/190923/112G3E31-26.jpg

后事交待完了,?我們終于可以開始了

https://cdn.china-scratch.com/timg/190923/112G3M40-27.jpg? 1

Sprite基礎(chǔ)???

https://cdn.china-scratch.com/timg/190923/112G453J-28.jpg

繼續(xù)拿出上一節(jié)中工作區(qū)區(qū)域圖,區(qū)別是,還留著“Hello,World!”,標(biāo)示出了區(qū)域1中的兩個類別MotionLooks,和右上角Tab頁中的“Costumes”選項(xiàng)。區(qū)域145,加上標(biāo)記的兩個部分,就是這一節(jié)的主要內(nèi)容,當(dāng)然,編碼區(qū),每一次都跑不掉,所以,不特別說了。

Sprite

Sprite,精靈,這個名詞最早來源于游戲中,首先,它是一張圖,比如默認(rèn)的那只貓,但是在背景刷新的時候,這張圖并不刷新,它也是獨(dú)立變化的,如同一個精靈一樣懸浮在背景之上,這是精靈這個名詞的由來。但是,我認(rèn)為,用Sprite這個概念,雖然在Scratch中是毫無問題的,但在后續(xù)編程的進(jìn)階中,會造成很多概念上的困擾。所以,我更愿意將它稱為“對象”,借用一定的面向?qū)ο缶幊讨械母拍睿驗(yàn)樗_實(shí)有許多類似的地方,雖然更多的不同,但是這個不同主要來自于功能的缺失,而非區(qū)別。https://cdn.china-scratch.com/timg/190923/112G43245-29.jpg

上面的正文是如第二節(jié)課中所言,沒有修改過的。Sprite是動畫、游戲中經(jīng)常使用到的概念,從理解上來講更具象化,可能是一只貓、一只老鼠,或者一輛車、一棟房子,等等。Scratch編碼也主要圍繞Sprite這個核心展開。

https://cdn.china-scratch.com/timg/190923/112G45492-30.jpg? 通過區(qū)域5的顯示,我們可以看到灰色背景區(qū)域存在一個名為Sprite1的貓,就是我們默認(rèn)看見的那只,當(dāng)然還可以存在Sprite2,……,SpriteN。上面白色區(qū)域,標(biāo)示著Sprite1的一些屬性(你看,叫對象就沒什么問題了,對象也有屬性Attributes),這些屬性包括,名字(Sprite1),位置(X,Y,目前都是0,即正中心,這個設(shè)定很贊),顯示(Show)或者隱藏(Hide),大小(Size)100,方向(Direction)90度。
https://cdn.china-scratch.com/timg/190923/112G44194-31.jpg動手小嘗試
添加一個Sprite!?https://cdn.china-scratch.com/timg/190923/112G52c2-32.jpg?

點(diǎn)擊區(qū)域5中右下角如圖標(biāo)示的按鈕,進(jìn)入Sprite選擇界面。

https://cdn.china-scratch.com/timg/190923/112G91T6-33.jpg?

Scratch提供了各種形態(tài)的Sprite選項(xiàng),好玩的東西就該如此,我們從Animals標(biāo)簽下,選擇跟默認(rèn)中一樣的Cat。

https://cdn.china-scratch.com/timg/190923/112G910Y-34.jpg?

這樣,我們有了兩只貓,給它們改名,分別命名為Cat1和Cat2,同時,對位置和角度做一些調(diào)整。

?
一個有意思的事情發(fā)生了,之前的那只貓Cat1依然在說“Hello,World!”,而Cat2則毫無表示。分別點(diǎn)擊Sprite選取里兩只貓的圖標(biāo),可以看到,Cat1在代碼區(qū)域是有代碼的,而新加的Cat2則空空如也。兩點(diǎn):一、要讓某個Sprite或者對象有動作,是需要編碼的;二、每個Sprite是需要(也可以說成可以,呵呵)獨(dú)立編碼的。所以,我們完全可以做成一個這樣的場景,Cat1說“Hello,Cat2!”,Cat2說“Hello,Cat1!”。https://cdn.china-scratch.com/timg/190923/112H044T-35.jpghttps://cdn.china-scratch.com/timg/190923/112H041H-36.jpg有人說,我改了,為什么看不到效果呢?注意區(qū)域4左上角的那面綠色小旗和代碼區(qū)域里黃色背景的When?green flag?clicked代碼塊了嗎?前者可以理解為一個“開始”鍵,按下后,在代碼里的相應(yīng)塊被觸發(fā),后面的代碼則順序執(zhí)行。這就是Scratch的一個通用的程序入口。理解起來簡單,描述起來費(fèi)勁,所以,記住,大多數(shù)情況下,每個Sprite都需要這樣一個When?green flag?clicked塊來標(biāo)示出程序的開始,而且,一個Sprite是可以有多個程序入口的,這個以后講到,自然明白了。https://cdn.china-scratch.com/timg/190923/112H13423-37.jpg

程序入口,就是程序開始執(zhí)行的地方。不管什么編程語言,程序入口都是最重要的第一步,不同的語言對于程序入口會有不同的約定或者說規(guī)則。

對于Scratch而言,程序入口可以有多種方式設(shè)定,正文中所述的When?green flag?clicked代碼塊是最常用的一種,還有一些其他的方式。同時,每個Sprite都可以有一個或者多個程序入口,不僅不同Sprite的代碼相互獨(dú)立,同一Sprite下多個入口區(qū)分的代碼段也是相互獨(dú)立的。

可以想象一下,如果我們加入的貓不是兩只,而是許多只,同時這些貓都在屏幕上漫無目的亂跑,彼此之間獨(dú)立,沒有相互影響,是一種怎樣的景象?這種在其他語言實(shí)現(xiàn)起來很復(fù)雜的效果,恰恰是Scratch的優(yōu)勢所在。


相應(yīng)的,點(diǎn)擊綠色旗幟旁邊的紅色八邊形按鈕,程序結(jié)束,顯示為兩只貓都是毫無表示。2

MotionLooks??

Motion和Looks,顧名思義,動作和外觀。這兩個類別分別承擔(dān)了Sprite的動作和外觀,當(dāng)然,其他類別,例如Sound,Sensing等等,每一個都能說與Sprite息息相關(guān),畢竟,Scratch的核心就是Sprite。這一節(jié)只介紹Motion和Looks,是因?yàn)樗鼈兏兇猓哺庇^。點(diǎn)開每個類別里,都有一系列的代碼塊,代表不同的動作,或者外觀。這里,我就不一一列舉說明了,畢竟,寫一個《Language Reference》并不是我現(xiàn)在的目標(biāo)。但是,我還是建議大家每一個都試試,編程是一項(xiàng)實(shí)踐性很強(qiáng)的活動(我想說工作,呵呵+N),而在編程世界里真正的自由不是我們漫無目的的想干嘛就干嘛,而是我們了解并實(shí)踐了許多種基本的功能后,自由的組合,變成無限的可能。我也會在本節(jié)最后的小例子里面加入幾個功能塊作為展示和引玉。
3

Costume???

點(diǎn)擊代碼區(qū)上方Tab頁中的Costumes,可以看到一個完全不同的界面。就按照Costume本意,我們就叫它皮膚吧(免費(fèi)的,不需要點(diǎn)券或者鉆石購買)。對于這只貓來說,系統(tǒng)默認(rèn)提供了兩種皮膚,一個是之前一直出現(xiàn)的cat-a,另一個就是cat-b,我們可以像畫圖一樣改變皮膚,也可以新建皮膚。當(dāng)然,Costume的功能可不僅僅是改個樣子,很多復(fù)雜一點(diǎn)的應(yīng)用中,都需要用到Costume這一設(shè)定。這里,就不過多解釋了。https://cdn.china-scratch.com/timg/190923/112H11T5-38.jpg?

簡單的畫圖功能,可以充分發(fā)揮小朋友的想象力和繪畫能力。

4

一個簡單的例子??

用一個例子把這一節(jié)的內(nèi)容串起來,目標(biāo)很簡單:兩只貓互相打招呼,并且不斷靠近。?https://cdn.china-scratch.com/timg/190923/112H13c9-39.jpghttps://cdn.china-scratch.com/timg/190923/112H234J-40.jpg

注意不同Sprite的代碼的微小差別。

https://cdn.china-scratch.com/Public/Home/images/grey.gif

給家長的話

如前言所述,這個課程我第一類面向的對象就是家長朋友。為什么叫親子編程課,我的想法是親子共同來“玩”Scratch,既增強(qiáng)親子關(guān)系,又能更好的幫助孩子啟蒙到入門。我本著這樣一個目的,將內(nèi)容寫到這里,如果站在一個零基礎(chǔ)開始的家長的角度來說,我認(rèn)為這樣一種介紹方式,應(yīng)該是可以了。但是,對于我們的真正目標(biāo)而言,需要再往前走一步,直接面對每一個孩子的是家長自己,所以,我們需要加一部分內(nèi)容,作為家長如何啟發(fā)自己子女動腦動手的建議,暫且稱之為“親子實(shí)踐建議”。

親子實(shí)踐建議

最開始的時候,可以讓孩子自己選擇一個喜歡的Sprite,可以是貓、狗,甚至任何動物也好,其他物件也好。

通過調(diào)整Sprite區(qū)域的屬性,例如size,x、y,direction等等,看看不同數(shù)值引起的變化,從而了解屬性的概念。

熟悉代碼區(qū)的操作,包括程序塊選擇,拖拉,修改白色圓角矩形中的參數(shù)。熟悉When?green flag?clicked代碼塊及程序啟動、停止(綠旗按鈕開始,紅色八邊形按鈕結(jié)束)。將Motion及Looks中代碼塊拖拽入代碼區(qū)中,看不同的代碼塊的效果。

切換至Costume頁,看看不同外觀對Sprite影響,有興趣的可以修改并保存自己的Costume。

按照示例代碼,開始我們第一個完整的例子。


PS:在這個例子中,我只使用了Motion和Looks。這樣做的原因是希望循序接近,孩子的理解力和專注力是有限的,重點(diǎn)應(yīng)該是如何在有限的專注時間段里盡可能培養(yǎng)孩子的興趣,潛移默化的灌輸基本的程序思維和邏輯思維,而不是選擇如何在短時間里灌輸多的知識。https://cdn.china-scratch.com/timg/190923/112G43245-29.jpg

這一節(jié)中,大家一定會注意到大量的名詞被我用花花綠綠的色塊標(biāo)示出來。其實(shí),從第一節(jié)開始,我就有意識的這么去做了。其中的原因來自于程序中一個很重要的概念:保留字。保留字,顧名思義,就是保留下來,在程序語言中承擔(dān)特定功能的名詞或者字符。如今,在代碼編寫里面,保留字還有一個很有意義的作用就是:通過不同顏色對保留字及其他功能的字符、數(shù)字、符號等加以區(qū)分,可以極大提升編碼效率。Scratch借鑒了這個概念,對于不同類別功能的代碼積木用不同顏色標(biāo)示,而不僅僅是為了五顏六色吸引孩子的注意力。我基本繼承Scratch的做法,盡可能的在提到這些保留字時,用相同或者相近的顏色標(biāo)示,希望能夠提升閱讀的效率。

https://cdn.china-scratch.com/timg/190923/112G45492-30.jpg?
https://cdn.china-scratch.com/timg/190923/112H42130-44.jpg

四、Variables,Operators

這一節(jié),講Variables(變量),Operators(表達(dá)式)。這是一般程序語言參考中緊接著“Hello,World!”的內(nèi)容,我把它挪到了關(guān)于Sprite的基本概念之后。可是,我依然會困擾于如何向一個大概率不超過十歲的小朋友介紹變量的概念。如果說,Sprite,Motion,Looks在Scratch漂亮的界面下,是直觀的話,那么,Variables則是很不直觀的。而,Operators更是一個看起來很簡單,其實(shí)有很多內(nèi)涵的概念。

對于這一節(jié),當(dāng)初我想了很久,應(yīng)該怎么去講。坦白說,按照一般的Scratch教法,基本可以一筆帶過,因?yàn)樵趺从茫词剐∨笥岩惨豢淳兔靼住5恰肮虉?zhí)”告訴我,無論是變量還是表達(dá)式,對于一門程序語言來講都是很重要的基礎(chǔ),基本的概念點(diǎn)時時刻刻會用到,即使后面用Scratch做一些復(fù)雜的程序時,我堅持自己想做的是一個在Scratch載體上的程序思維的入門,所以,內(nèi)容會是以下呈現(xiàn)的樣子。

這一節(jié)內(nèi)容非常多,我覺得兩天的時間來學(xué)習(xí)是合適的。

https://cdn.china-scratch.com/timg/190923/112H44919-45.jpg?

1

變量?

對于看我寫了這么多廢話還在堅持捧場的朋友們,我想這樣去解釋Variable變量:與我們數(shù)學(xué)里面學(xué)到的變量的概念并無任何區(qū)別,程序里的變量用來存儲會變化的值(可能是數(shù)字,字符,甚至其他形式)。好了,這就是解釋。對于小孩子,我還是建議用一個例子去取代解釋。這個例子是對上一節(jié)的例子做一些小小的修改:我們加入一個變量,叫steps。https://cdn.china-scratch.com/timg/190923/112H44255-46.jpg?

點(diǎn)擊Make a variable即可創(chuàng)建變量

然后會要求輸入變量名,以及一個對所有精靈(對象)有效,還是僅針對當(dāng)前精靈(對象)有效的選項(xiàng)。稍微懂一點(diǎn)程序的人,自然知道這是全局變量還是局部變量的意思,但是在這里,賣個關(guān)子,選擇默認(rèn)的,選項(xiàng)的區(qū)別,稍后直接看結(jié)果就可以了。?

https://cdn.china-scratch.com/timg/190923/112H410R-47.jpg


這時候,我們能夠看到在結(jié)果展示區(qū)域,多了一個steps的顯示,并且數(shù)字為0。?

https://cdn.china-scratch.com/timg/190923/112H53501-48.jpg

設(shè)置完變量之后,我們對上一節(jié)的代碼做修改:首先,在程序最開始就把steps初始化為0,同時,在Cat1和Cat2每說一句話后,讓steps變量加1。代碼如下:?

https://cdn.china-scratch.com/timg/190923/112H62640-49.jpg


對Cat2代碼也做類似的修改,但是要注意兩者在說的話和移動位置上的微小區(qū)別,當(dāng)然,這些區(qū)別都跟上一節(jié)一樣,這里就不再贅述了。代碼修改好后,我們可以直接點(diǎn)擊綠旗看結(jié)果:隨著兩只小貓邁開腳步,steps的值變化了,但是問題也來了,1、steps每次增加都是2,可是我們明明設(shè)置的是每次變化1啊;2、steps最后的值為10,可是貓只走了五步啊!https://cdn.china-scratch.com/timg/190923/112G43245-29.jpg

還記得我們在添加變量steps時賣的關(guān)子嗎?那個關(guān)于“For all sprites”還是“For this sprite only”的選項(xiàng),就是這個選項(xiàng)在搗鬼。

https://cdn.china-scratch.com/timg/190923/112G45492-30.jpg? 幸運(yùn)的是,我們第一次觸碰到了編程中一個重要的核心概念——全局變量與局部變量,不幸的是,類似這樣的核心概念,后面還有很多很多,慢慢來。

什么樣的概念可以稱為編程的核心概念?我的理解是要超越具體語言本身的,更多體現(xiàn)編程思想的東西,對一個才開始接觸Scratch的孩子來說,我知道這樣的說法很晦澀,所以,只是提一句,不展開。


關(guān)于“全局變量與局部變量”的概念(變量作用域)。任何編程語言都有變量,也都有全局變量和局部變量的概念,Scratch當(dāng)然不例外。只不過,感謝Scratch有趣的皮囊,讓我們可以很直觀的感受到變量作用域的區(qū)別。言歸正傳,在我們這個例子里,“For all sprites”意思就是這個變量對所有的Sprite都可見,而且不僅僅是可以“看見”,還是可以“修改”。這樣,就很好解釋例子中的現(xiàn)象了,Cat1每走一步都對steps+1,Cat2同樣,那不就是它們合起來走了十步嗎?它們走的又是那么的同步,看起來不就是steps每次都+2嗎?

計算機(jī)小知識

正文為什么叫“看起來”,稍稍擴(kuò)展一下,無論現(xiàn)代科技如何進(jìn)步,計算機(jī)的基本設(shè)計原理并沒有太多改變,程序的執(zhí)行從嚴(yán)格意義上來講,都是按照一定的順序執(zhí)行的,所以,如果我們把時間觀察粒度切的足夠小,一定是能夠看到先是執(zhí)行了Cat1中的代碼,或者先是執(zhí)行了Cat2中的代碼的,在這樣的粒度下,我們也應(yīng)該可以看到steps每一次都是在偶數(shù)停留1秒后,增加了1變?yōu)槠鏀?shù),又瞬間增加1變?yōu)榕紨?shù)。這種極其細(xì)微的變化,對多數(shù)程序來講,都是沒有影響的,但是對于高頻交易,影響就是巨大的,畢竟無論是證券交易,還是線上秒殺活動,瞬間的區(qū)別都會影響到錢的多少。


好了,概念說完了,那么我們?nèi)绾螌芍回垎为?dú)計步呢?最理想的方法當(dāng)然是給每只貓設(shè)定一個“For this sprite only”的steps變量,分別統(tǒng)計。這里,我們用一個取巧的辦法,為Cat2新增一個“For this sprite only”的變量steps2,并將Cat2代碼里的steps變量全部替換為steps2。這里,不再貼出截圖,我建議家長能夠跟孩子一起動手,看結(jié)果的不同。?https://cdn.china-scratch.com/timg/190923/112G44194-31.jpg取巧可以嗎當(dāng)然可以,程序是自由的。

https://cdn.china-scratch.com/timg/190923/112HJ612-53.jpg


細(xì)心的朋友一定注意到了一個地方,就是當(dāng)我們添加了steps2后,在代碼結(jié)果區(qū)顯示了一個Cat2:steps,顯而易見,這是一個“For cat2 only”的變量。
啰啰嗦嗦,變量的基本大體介紹完。

2

表達(dá)式

進(jìn)入這一節(jié)的第二部分:Operators,表達(dá)式。

我突然意識到自己在編排上還是犯了一個巨大的錯誤:把變量和表達(dá)式,這兩個如此重要的概念放到了一節(jié)之中。但是沒辦法,我給自己框定的就是十節(jié)內(nèi)容,其中還包括了兩節(jié)廢話。

從內(nèi)容的編排上來講,我之前也提過,是在參照一般編程語言的邏輯基礎(chǔ)上結(jié)合Scratch的特點(diǎn)。如今開始學(xué)習(xí)編程,Scratch自然是個不錯的入門方式,但,Scratch就是Scratch,有有趣的皮囊,可以很方便的做一些動畫,小游戲,可以培養(yǎng)編程的興趣。但如果只是為了興趣,可能最終一無所得,記得動畫、游戲的樣子,卻不記得怎么實(shí)現(xiàn)。

所以,我想盡可能多講基礎(chǔ)知識,這一節(jié)以及接下來的兩節(jié),我會更多的按照自己理解的編程語言的核心概念去編排、講解、舉例。在我學(xué)習(xí)和使用了幾十種形形色色的編程語言的經(jīng)歷中,唯有這三節(jié)里的內(nèi)容,是所有基礎(chǔ)的基礎(chǔ)。正如人類最初用簡單的動詞、副詞、量詞、介詞逐漸構(gòu)建了如今豐富多彩的語言世界一樣,神奇的程序世界也是從這三節(jié)開始的。


我一直覺得“表達(dá)式”這個翻譯甚至比Operators更加貼切,內(nèi)涵更豐富,以至于我很難用一句話去更好的解釋其完整的意思。這里,只在當(dāng)前的應(yīng)用環(huán)境下,做一個解釋:表達(dá)式,就是對變量(或者常量,顧名思義,值不變)進(jìn)行某種或者某幾種組合運(yùn)算。如何理解?就以Scratch為例,目前的版本中,對表達(dá)式用了綠色的框表示,在綠色的框內(nèi),是個式子,有變量有常量,有運(yùn)算,有判斷,但是跳出綠色的框,對一段程序而言,就變成了一個結(jié)果。如果這種理解不直觀的話,那么想象一下Excel表格,可能里面的單元格寫著公式(表達(dá)式),但是就表格看來,公式并不顯示出來,顯示的只是公式的運(yùn)算結(jié)果。換句話說,表達(dá)式也是最小的程序形式,簡單而言,1+1,就是程序,當(dāng)然在有些對格式要求嚴(yán)格的語言里面,會報語法錯誤,但是不少靈活的語言里面,就會直接以“2”作為程序的結(jié)果輸出,比如Python。表達(dá)式有種類之分,從大類來講,是兩類:算術(shù)表達(dá)式和邏輯表達(dá)式。算術(shù)表達(dá)式算術(shù)運(yùn)算,結(jié)果為數(shù)字邏輯表達(dá)式邏輯運(yùn)算,結(jié)果為真假在Scratch中,兩者的區(qū)別一目了然:前者是圓角矩形,后者則是六邊形(可以看到,字符的運(yùn)算也用圓角矩形來表示,本質(zhì)上,字符運(yùn)算也是算術(shù)運(yùn)算,計算機(jī)把字符轉(zhuǎn)換成數(shù)字進(jìn)行運(yùn)算后,再轉(zhuǎn)換回字符而已)。
關(guān)于算術(shù)表達(dá)式,相信不需要如何解釋,需要解釋的是邏輯表達(dá)式。我們知道,整個現(xiàn)代計算機(jī)的基礎(chǔ)是二進(jìn)制,而邏輯運(yùn)算的結(jié)果也只有兩個:真、假。邏輯運(yùn)算則有:與、或、非及其組合。實(shí)際上,任何算術(shù)運(yùn)算都可以轉(zhuǎn)換為邏輯運(yùn)算,當(dāng)然,這個已經(jīng)是大學(xué)二年級課程《數(shù)字電路》中的內(nèi)容了,這里,不展開,只是簡單解釋一下與、或、非運(yùn)算。

與(and):輸入是兩個及以上的邏輯判斷,當(dāng)所有邏輯判斷都為“真”時,與運(yùn)算結(jié)果為“真”,只要有一個邏輯判斷為“假”時,與運(yùn)算結(jié)果就為“假”。

或(or):跟與運(yùn)算的區(qū)別在于,只要有一個邏輯判斷為“真”,或運(yùn)算結(jié)果就為“真”,但是請注意,與運(yùn)算和或運(yùn)算并非相互為反運(yùn)算,因?yàn)楫?dāng)所有邏輯判斷都為“真”時,與運(yùn)算和或運(yùn)算的結(jié)果都是“真”。

非(not):把“真”的變成“假”的,“假”的說成“真”的。


關(guān)于Operators(表達(dá)式)的基本概念到此講完。遺憾的是,因?yàn)榧夹g(shù)原因,接下來,我只能用程序給出算術(shù)表達(dá)式的例子,而無法給出邏輯表達(dá)式的例子,當(dāng)然這會在下一節(jié)補(bǔ)上,因?yàn)橄乱还?jié),我們會進(jìn)入一個非常重要的基礎(chǔ)程序結(jié)構(gòu):條件分支。
例子很簡單,這次出場三只貓,Cat1和Cat2隨機(jī)報一個10以內(nèi)的數(shù),Cat3把兩個數(shù)乘起來,并報答案。三只貓對應(yīng)的代碼如圖。

https://cdn.china-scratch.com/timg/190923/112HT5R-54.jpg

https://cdn.china-scratch.com/timg/190923/112HQ4H-55.jpg

https://cdn.china-scratch.com/timg/190923/112HS2V-56.jpg

https://cdn.china-scratch.com/timg/190923/112H955U-57.jpg

簡單解釋一下程序,主要是兩個表達(dá)式:

1、pick random:意思就是產(chǎn)生一個隨機(jī)數(shù),例子中產(chǎn)生的是1到10的隨機(jī)數(shù)。

2、join:字符串拼接,字符串拼接是可以不斷嵌套使用的,這個例子中,假設(shè)x為2,y為5,那么,四個join的結(jié)果就是“2X5=10”。這種字符串拼接術(shù),無論在任何程序語言中,都是最常用的技巧之一。

https://cdn.china-scratch.com/Public/Home/images/grey.gif

給家長的話

這一節(jié)有不少的概念,而且非常重要。變量與常量(不變的值就是常量,Scratch里沒有常量的設(shè)置,那么我們可以認(rèn)為具體的數(shù)字就是一個常量,比如上面的think “” for 2 seconds,這個2就是一個常量)、全局變量與局部變量表達(dá)式、算術(shù)表達(dá)式、邏輯表達(dá)式邏輯“真”與邏輯“假”邏輯運(yùn)算(與、或、非),雖然我把這些內(nèi)容壓縮進(jìn)了一節(jié),但是我希望家長可以花兩天(每天半小時)的時間幫助孩子去理解與消化。


參照我給的例子,我會給出如下實(shí)踐建議

實(shí)踐建議

  • 增加變量,看到程序運(yùn)行中變量的變化;

  • 提出問題,為什么變量的變化跟我們想象的不一樣;

  • 新增加一個“For this sprite only”變量,通過前后區(qū)別,讓孩子初步明白全局變量和局部變量的區(qū)別;

  • 鼓勵孩子自己做簡單的例子,能夠用到全局變量和局部變量;

  • 解釋表達(dá)式的概念,可以按照Scratch編排的方式,簡單的解釋一下綠色圓角矩形程序塊(算術(shù)表達(dá)式)的概念,這里面有兩個比較難解釋的運(yùn)算,一是pick number,二是join。上面的內(nèi)容已經(jīng)做過解釋。

  • 通過邏輯訓(xùn)練來幫助孩子理解基本的邏輯和邏輯預(yù)算,邏輯訓(xùn)練分為兩部分,一部分是邏輯真假判斷,可以提出幾個問題,例如,今天下雨了;現(xiàn)在是早上;30比50小(真),等等這些問題,讓孩子判斷真假。第二部分是邏輯運(yùn)算,首先是非運(yùn)算,非建議直接用數(shù)字比較來,比如,30>=50(假)的非運(yùn)算是30<50(真);其次是與運(yùn)算和或運(yùn)算,比如要表示40是否在一個數(shù)字區(qū)間范圍內(nèi),可以用40>30 and 40<50(真)、30>40 or 30 <20(假)這樣的表達(dá)式,可以直接幫助孩子無縫對接Scratch中的表達(dá)式。

  • 最后,是讓孩子實(shí)現(xiàn)我最后給出的一個三只貓做計算題的例子,強(qiáng)烈建議先給孩子描述任務(wù),讓孩子自己嘗試去實(shí)現(xiàn),遇到問題再找參考,直至完成。編程是一項(xiàng)實(shí)踐性非常強(qiáng)的工作,眼高手低(看程序都明白,寫程序一句不會)是最容易發(fā)生的事情,只有讓孩子多動手,才會打下更好的基礎(chǔ)。?

五、Conditional Branch條件分支

Events事件

按照Scratch對代碼積木的分類,我們這節(jié)涉及到Control和Events,但是如果按照一般程序語言的習(xí)慣,Scratch的Control模塊至少包含了兩塊重要的內(nèi)容。但是從邏輯關(guān)系來講,這一節(jié)要說的兩部分內(nèi)容關(guān)聯(lián)度略高一點(diǎn),所以我把Control模塊一切為二,其中一部分跟Events模塊一起,構(gòu)成這一節(jié)的內(nèi)容,剩余的一塊組成下一節(jié)的內(nèi)容。

Scratch團(tuán)隊?wèi)?yīng)該也是認(rèn)為Control和Events關(guān)聯(lián)度很大,所以積木塊都用了相近的顏色。事實(shí)上也是如此。

如果說前面兩節(jié)的內(nèi)容更多的是在講編程語言的基本元素,及在Scratch中的具體形態(tài),那么這一節(jié)和下一節(jié)其實(shí)是在講編程語言的基本骨架。骨架+元素構(gòu)成基本同時完整的可被執(zhí)行的代碼段。

至于這些代碼段如何組裝,構(gòu)造復(fù)雜的程序,這就是一步步不斷進(jìn)階的過程了。

https://cdn.china-scratch.com/timg/190923/112H44919-45.jpg?

1

?Conditional Branch條件分支

其實(shí),Scratch里,沒有任何一個地方會提到條件分支這樣的概念,只是用了Control,我理解這個本意就是說控制程序結(jié)構(gòu)或者說控制代碼走向的。然而,這樣的劃分雖然簡單,在我看來卻不夠,既然用到了這樣的概念,那何不講的清清楚楚明明白白呢?

upload/article/images/2020-12-18/c4145b2568dc2aef5c933702cd5e2d1b.jpg首先做一些基本的概念解釋,Conditional Branch,這個詞可以拆成Conditional條件和Branch分支兩個意思。Conditional條件,簡而言之,就是承接上一節(jié)的邏輯判斷,判斷一個邏輯表達(dá)式是“真”還是“假”。
Branch分支,是基于條件判斷的后續(xù)分叉,好比一條岔路口,上面的條件給出了我們要選擇哪條路,這里的分叉則指明不同道路的方向。幾乎所有的編程語言,條件分支都會用類似if-else的結(jié)構(gòu),Scratch也不例外。在Control類里,有兩個積木塊,實(shí)現(xiàn)了這樣的功能結(jié)構(gòu)。?

https://cdn.china-scratch.com/timg/190923/112I14640-61.jpg

https://cdn.china-scratch.com/timg/190923/112I11157-62.jpg

https://cdn.china-scratch.com/timg/190923/112I1J22-63.jpg

https://cdn.china-scratch.com/timg/190923/112I15434-64.jpg

這個意思非常的簡潔明確,右邊代表如果條件A成立就怎樣怎樣,而左邊則代表如果條件A成立就這樣,否則就那樣。“

注意到兩個程序塊里面的六邊形了嗎?跟上一節(jié)中邏輯表達(dá)式一模一樣的六邊形,意義也很直觀,我們把一個邏輯表達(dá)式填入if程序塊的六邊形中,程序自己去對邏輯表達(dá)式進(jìn)行計算并判斷“真”與“假”,然后再按照編寫好的分支繼續(xù)下去。

”順便解釋一下為什么上一節(jié)對于邏輯表達(dá)式我沒有舉例子,因?yàn)檫壿嫳磉_(dá)式天然就是要跟條件判斷和分支(這里為什么把條件分支拆開,寫成條件判斷和分支,因?yàn)闂l件分支是個更小的概念,條件判斷和分支的形式有更多種,至少下一節(jié)中也會涉及到不同的形式)結(jié)合使用的,一個例子也必須講了條件分支后,才有更實(shí)際的意義。好,例子開始。上一節(jié),我們的例子是,兩只貓報數(shù),第三只貓做乘法報結(jié)果。這次我們修改一下,還是兩只貓報數(shù),但是第三只貓不再是做乘法,而是作為裁判,比較兩只貓報的數(shù)字的大小,并宣布結(jié)果。在這個例子中,Cat1與Cat2的代碼跟上一節(jié)的例子中一模一樣,這里就不再貼出來了,只給出不一樣的Cat3的代碼的截圖。?https://cdn.china-scratch.com/timg/190923/112I22391-65.jpg?

不知道是不是錯覺,當(dāng)程序已這種形式構(gòu)架后,一下子覺得美感提升不止十倍。這種因?yàn)橛辛顺绦蚪Y(jié)構(gòu)的支撐,血肉都變得生動的感覺,讓我癡迷了幾十年。

https://cdn.china-scratch.com/timg/190923/112I212X-66.jpg

需要對代碼做一些解釋,由于Scratch只給出了兩種條件分支的結(jié)構(gòu),而數(shù)字大小的比較結(jié)果則有三種:1贏、2贏、3打平,用兩種積木去實(shí)現(xiàn)三條岔路,美感多少打了折扣,這也是Scratch的不足之處,對于復(fù)雜的邏輯結(jié)構(gòu)雖然能夠?qū)崿F(xiàn),但是也極其復(fù)雜。

我們來分析這個邏輯結(jié)構(gòu)的實(shí)現(xiàn),首先,三種結(jié)果一定是排他的,一次只會有一種結(jié)果,對于Cat1來講,要么贏,要么輸,要么打平,對Cat2而言也是。理論上弄一個三岔路,問題就輕松解決,但是在沒有的情況下,我們只能分成兩步:第一步,先判斷Cat1有沒有贏,所以會有第一個if-else積木,里面的邏輯表達(dá)式是x>y,如果為“真”,那么很簡單,直接宣布結(jié)果。如果為“假”呢?為“假”的時候可能會有兩種情況,要么xy或者x=y,但是由于x>y在之前已經(jīng)被我們判斷過了,如果x>y為“真”的話,程序是不可能再來判斷x

有點(diǎn)繞,但是邏輯就是如此。任何一段程序都是由各種邏輯構(gòu)架出來的,沒有邏輯的代碼就如同流水賬般記事的電影或小說,不僅沒有吸引力,更沒有意義。各種各樣的邏輯判斷和分支,構(gòu)建了程序的起承轉(zhuǎn)合。也許手誤打錯字是程序漏洞的原因之一,但是絕大多數(shù)的程序錯誤或者漏洞都是來自于對某種環(huán)境下邏輯構(gòu)架的不完整不嚴(yán)密造成的。

https://cdn.china-scratch.com/timg/190923/112H44919-45.jpg?

https://cdn.china-scratch.com/timg/190923/112I2I24-68.gif

2

?Events事件

理解完了條件分支這個重要部分,我們花很短的時間過一下Events。在程序世界里,Events非常重要,而且豐富多彩。什么是Events,簡單說,就是某個事件發(fā)生了,那么什么是事件?事件是一個廣義的邏輯表達(dá)式。例如,“吃飯”事件,我們問Cat1:“你吃過了嗎?”,這是一個事件邏輯表達(dá)式,Cat1回答:“吃過了!”,代表前一個邏輯表達(dá)式運(yùn)算結(jié)果為“真”,“吃飯事件”發(fā)生了。然后呢?然后就進(jìn)入“吃飯事件”發(fā)生后的分支。Scratch中,最簡單最常用的就是When?green flag?clicked事件,也是我們程序一開始就接觸到的一個積木塊。完整的意義這里可以再解釋一下:通常情況下,我們每一個Sprite對象的代碼都寫在When?green flag?clicked之后,可以理解為這些代碼存在于這個事件的分支之內(nèi),當(dāng)我們點(diǎn)擊了程序結(jié)果展示區(qū)域的綠旗后,這些代碼就被執(zhí)行,而如果沒有點(diǎn)擊,這些代碼就不會得到執(zhí)行。這里,一個事件就是一個開關(guān),事件發(fā)生的邏輯判斷為“真”,則開關(guān)打開,分支內(nèi)的程序被執(zhí)行,如果事件沒發(fā)生,那么你可以當(dāng)作這些代碼不存在,如果事件永遠(yuǎn)沒發(fā)生,那么代碼就如同永遠(yuǎn)不存在。不僅僅在Events類別里面存在事件程序塊,其他類別里面也有,我把各個類別里的代碼塊羅列截圖。我們也可以仔細(xì)看他們的相同與區(qū)別。?

https://cdn.china-scratch.com/timg/190923/112I364A-69.jpg

可以很明顯的看到,事件類的程序塊有三種顏色,分別來自Scratch的Events、Motion和Sensing類。他們相同嗎?在我看來,至少類似,因?yàn)樗鼈兌际窃谂袛嗄骋惶囟ㄊ录欠癜l(fā)生?那么它們有區(qū)別嗎?在Scratch看來,它們的意義不同,功能不同,黃色的來自Events類的積木塊,我們看到頂上是個圓弧,代表著它必須是一段代碼的第一個程序塊,是代碼的開始,我們之前也按照程序世界的默認(rèn),叫它程序入口,對應(yīng)的事件發(fā)生,程序塊后的代碼便開始執(zhí)行;藍(lán)色的積木塊,我們看到它不僅有事件判斷“if on edge”,而且直接給出了分支執(zhí)行“bounce”,這其實(shí)就是一個條件分支,意思是如果一個Sprite碰到邊界,就反彈。這個積木塊被放在了Motion類別里,因?yàn)槭鞘录觿幼鞯慕Y(jié)構(gòu);青色的積木塊,我們看到都是六邊形,也就是說是純粹的邏輯表達(dá)式,只是在判斷里面描述的事件是否發(fā)生,它必須使用在條件判斷及分支的程序結(jié)構(gòu)中。在后面,我會專門用半節(jié)來講Sensing的部分。這些積木塊,我們現(xiàn)在不需要記住,因?yàn)樵诤罄m(xù)的例子里,我們會逐漸用到,用的時候,直觀的看結(jié)果,反推功能,這是在我看來更快的學(xué)習(xí)方法。一個非常簡單的例子,作為本節(jié)內(nèi)容的結(jié)束。?還是那三只貓,我們不再用When?green flag?clicked程序塊,而是改用When this sprite clicked程序塊,代碼也只有簡單的一句自我介紹。另外兩只貓的代碼也一樣,只是名字改一改。這次,我們不需要再去點(diǎn)綠旗開始了,點(diǎn)任何一只貓就好了,看看結(jié)果如何,并觀察一下程序運(yùn)行區(qū)上方綠旗和紅色八邊形的變化。

https://cdn.china-scratch.com/timg/190923/112I55623-70.jpg

https://cdn.china-scratch.com/Public/Home/images/grey.gif

給家長的話

實(shí)踐建議

  • 這一節(jié)其實(shí)就是講了條件分支,包括條件判斷、分支,并在此基礎(chǔ)上擴(kuò)展了Events事件的概念。

  • 對于這一節(jié),如何去教小朋友,我建議是因人而異。每一個小朋友的年齡、知識儲備、興趣點(diǎn)都不盡相同,對于重要的邏輯的理解,在短短的半小時內(nèi)能夠給出的反應(yīng)也不會相同。

  • 不必在開始的時候就說概念,就從我給出的數(shù)字比大小的例子開始,讓小朋友自己嘗試去解釋,如果能夠解釋,那說明本身理解了,這時候可以多講一些邏輯的概念;如果短時間內(nèi)解釋起來有困難,那不妨把程序一塊塊拆解來啟發(fā)式的解釋,Srcath對不同功能的程序塊顏色做了區(qū)分,這是個很好的功能,特別是在幫助小朋友理解上。

  • 正如同,學(xué)數(shù)學(xué)要先會數(shù)數(shù),學(xué)英語要先認(rèn)識字母一樣,學(xué)程序,也得先理解一些邏輯、條件分支以及其他一些概念,我相信一個大班或者小學(xué)低年級的孩子理解這些不是難事,需要的只是耐心。程序世界很大,孩子未來也很長,一點(diǎn)點(diǎn)來,不去跟別人比,跟自己比就夠了。

  • 關(guān)于事件,我不建議教孩子太多,就用我的例子讓他們有個直觀感受就好了。我之所以要在這一節(jié)寫事件,一是從完整性來說,要有,二是以后其實(shí)會用到。但是在理解了條件分支后,事件并不難,至少在Scratch中不難,用到了就會了。


?

六、循環(huán)

終于到循環(huán)了。Scratch很有意思,編內(nèi)容,做例子也很好玩。但是碼字太痛苦了,整理格式太費(fèi)神了。好在,能夠自由發(fā)揮的介紹循環(huán),就都不是事情了。循環(huán)當(dāng)然很重要,更重要的是,把循環(huán)講完,程序世界的自由大門也就打開大半了。

人類為什么要發(fā)明計算機(jī)、設(shè)計編程語言,最初的目的是因?yàn)橐M(jìn)行科學(xué)計算,因?yàn)榭茖W(xué)計算需要大量的復(fù)雜的,重復(fù)的運(yùn)算過程靠人做,耗時而且容易出錯。于是靠程序來完成,雖然對于很多計算,程序也要耗費(fèi)大量的時間,但是:一、總比人力計算來的快;二、只要程序沒錯,結(jié)果就基本不錯;三、可以無上限的重復(fù)。這里的重復(fù)有兩重含義,一是程序?qū)懞昧耍赡軛l件變了,環(huán)境變了,需要重新計算,隨時可以;二是,程序內(nèi)部,本身也需要許多重復(fù),這個也能比較容易的實(shí)現(xiàn),而實(shí)現(xiàn)這個,靠的就是這一節(jié)要講的:循環(huán)。上一節(jié)提到過,在程序語言里,循環(huán)與條件分支共同構(gòu)成一個程序的骨架。所以,在Scratch中,設(shè)計者將循環(huán)與條件分支共同放入了Control類別中。那么什么是循環(huán):簡單說,不簡單的重復(fù)叫做循環(huán)。正是這種不簡單的重復(fù),與條件分支一起構(gòu)成了五彩繽紛的程序世界。先看Scratch提供的循環(huán)相關(guān)的程序塊,主要是三個按字面意義,分別是永遠(yuǎn)循環(huán)(forever),循環(huán)N次(repeat),循環(huán)直到某一邏輯表達(dá)式為“真”結(jié)束(repeat until)。需要解釋一下的是,forever雖然叫永遠(yuǎn)循環(huán),但是指的是在程序里,一旦按下紅色八邊形停止按鈕,隨著程序的結(jié)束,循環(huán)自然也就結(jié)束了。簡單的循環(huán),是很容易被理解的,我們通過三個簡單例子分別來看三種不同循環(huán)的效果。第一個例子用forever。一個貓報數(shù)的例子。
很顯然,如果不按下紅色八邊形按鈕讓程序終止,貓會不斷的報數(shù)報下去。第二個例子,還記得我們在前幾節(jié)里面用到兩只貓一邊打招呼一邊互相靠近的例子嗎?我們用repeat修改一下,讓程序在功能相同的前提下,看起來更好看一點(diǎn)。可以回想一下之前例子里面,我們的代碼有多冗長。循環(huán)有效的減少的重復(fù)代碼的數(shù)量,讓程序結(jié)構(gòu)看起來更加美觀易懂。另一個與前面例子不同的修改是,在循環(huán)里,我用next costume程序塊替換了之前的switch costume to,這是一個典型的在循環(huán)結(jié)構(gòu)里會用到的思路:很多時候我們并不知道一些東西的具體數(shù)量,這里是貓的不同外觀,還可以是其他的,但是我們想都用到,而不是去指定用哪一個,那么類似于next的功能就變得有意義。當(dāng)然,Scratch里面只提供了有限的幾種next,更復(fù)雜的編程語言則會有類似的設(shè)計,但是可以提供更多變化可能。
第三個例子,我們想讓貓做一個累加法,比如像當(dāng)初的高斯一樣,去計算1加到10或者1加到100,我們很容易想到可以用repeat 10或者repeat 100這樣的結(jié)構(gòu)。這里,我們嘗試換種思路,用repeat until的結(jié)構(gòu)。幾乎我們點(diǎn)擊綠旗的瞬間,貓就報出了“5050”的答案。答案顯然是正確的(對于幼兒園的小朋友,可以把x>100改成x>10)。
需要解釋一下repeat until循環(huán)。可以看到這個循環(huán)里面有一個綠色六邊形的邏輯表達(dá)式,我們不妨稱之為條件循環(huán),每一次執(zhí)行循環(huán)體(在循環(huán)程序塊里面被包裹的程序我們叫做循環(huán)體)之前,程序都要對綠色六邊形的邏輯表達(dá)式進(jìn)行邏輯判斷,如果為“假”則執(zhí)行,如果為“真”呢?那么循環(huán)直接結(jié)束,循環(huán)體內(nèi)的代碼不被執(zhí)行。在這個例子里面,每一輪循環(huán)的時候,程序都要去比較一下x與100的大小,當(dāng)x<=100時,循環(huán)不斷得到執(zhí)行,我們看到的就是s變量每一次都被加上x,x每一次都被加上1。當(dāng)最后一次x=101時,條件判斷產(chǎn)生了“真”的結(jié)果,循環(huán)結(jié)束,貓直接報出答案(可以看到s最后加的數(shù)字是100,而不是101)。本節(jié)最后一個例子,我們要講循環(huán)的嵌套,什么叫循環(huán)的嵌套?循環(huán)里面加循環(huán),就叫嵌套(其實(shí),我們在上一節(jié)介紹條件分支時,已經(jīng)用到了嵌套,為了表示出“>、=、<”三種條件,我們在一個條件分支內(nèi)又加入了條件分支)。程序里,循環(huán)嵌套是非常常用的。一個簡單又應(yīng)景的例子是,我們讓貓背誦乘法口訣如何?

https://cdn.china-scratch.com/Public/Home/images/grey.gif

解釋一下代碼,首先,一個乘法包含三個數(shù):乘數(shù)、被乘數(shù)、積。分別用變量x、y、product表示。一個最簡單的想法是,我們用兩個循環(huán)嵌套,分別讓x、y從1變到9,計算積。可是,我們從小背的乘法口訣里面有1*8,但是卻沒有8*1這樣的吧?所以,我們得稍微復(fù)雜一點(diǎn)。在外層的循環(huán)里,讓x從1變到9沒問題,所以,外面的循環(huán)我們設(shè)置的退出條件為x>9,而內(nèi)層循環(huán)里面呢?我們需要讓y從x變到9,退出條件是類似的y>9,但是注意到在內(nèi)層循環(huán)開始之前我們需要set y to x,做一個初始化。
這里,就需要講一個順序概念,我們看到了循環(huán)嵌套,但是哪個循環(huán)先被執(zhí)行呢?從程序來看,不難發(fā)現(xiàn)是內(nèi)層的先被執(zhí)行。每一次內(nèi)層的被執(zhí)行完,退出后,回到外層的循環(huán)體,然后再重新進(jìn)入內(nèi)層,再退出,再重新開始。所以,在這個程序里面,x被加了9次,y呢?被加了9+8+7+6+5+4+3+2+1次。所以最后的結(jié)果呢?如果細(xì)心一點(diǎn),我們會發(fā)現(xiàn)當(dāng)貓把乘法口訣背完以后,x是10,y也是10。因?yàn)檫@是兩個循環(huán)都結(jié)束的條件(>9),但是在程序最后用綠色橢圓圈住來的代碼,我把x、y都設(shè)回了9,為什么?對小孩子來說,看到x是10,y是10,但是積(product)卻是81,大概率會產(chǎn)生誤導(dǎo)。所以我加了兩句對程序沒有任何影響的語句。我想,這也是一種簡單的user friendly吧,而對于程序來講,功能完整準(zhǔn)確,user friendly都應(yīng)該是追求的目標(biāo)。

給家長的話

實(shí)踐建議

  • 這一節(jié),對于家長如何與小朋友共同嘗試,我沒有特別的建議,按照例子走就好了。循環(huán)當(dāng)然是很重要的概念,循環(huán)也非常難,但是基礎(chǔ)的內(nèi)容,在Scratch里,其實(shí)就是這些,更重要的是小朋友在自己動手的嘗試中理解了這些概念,并會應(yīng)用。

  • 這節(jié)結(jié)束,Scratch,或者說一個編程語言的最基礎(chǔ)的概念,就告一段落了。編程是一個實(shí)踐性非常強(qiáng)的學(xué)科。從小到大學(xué)了這么多語言,也參加了大大小小的考試或者比賽,從沒有任何一次會來問循環(huán)的概念是什么,只會有兩種形式,一種是給出一段代碼,讓你寫出運(yùn)行結(jié)果,一種是給出一個問題,讓你寫出代碼。只有不斷積累的實(shí)踐,才能讓我們更加知道計算機(jī)是怎么想的,也才能更容易的讓計算機(jī)實(shí)現(xiàn)我們想要的。

  • 后面四節(jié),按照我的定義,才算是

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

預(yù)約試聽課

已有385人預(yù)約都是免費(fèi)的,你也試試吧...

主站蜘蛛池模板: 国产乱淫av一区二区三区 | 欧美日韩a| 日韩精品一区二区三区 | 国产精品日本一区二区不卡视频 | 久www| 日韩高清成人 | 国产69精品久久久久毛片 | 久久久久久成人 | 亚洲一区二区三区精品动漫 | 日韩欧美精品在线 | 日韩午夜激情 | 91精品国产综合久久久久蜜臀 | 国产精品日韩欧美一区二区 | 成人在线免费播放视频 | 毛片国产 | 精品永久 | 精品成人一区二区 | 日韩午夜精品视频 | 久久人人爽爽人人爽人人片av | 国产精品成人3p一区二区三区 | 中文字幕亚洲电影 | 亚洲国产精品久久久久久 | 日韩欧美视频一区 | 一级在线观看 | 99久久99久久 | 国产精品麻豆入口29 | 亚洲一区二区三区在线视频 | 久久精品视频免费 | 毛片com| 亚洲精品久久久久久久久久久久久 | 精品欧美一区二区精品久久 | 午夜精品国产精品大乳美女 | 久久久精选| 热久久久久久久 | 精品国产一区二区在线 | 成人一区二区三区 | 91色在线视频 | 黄色成人在线视频 | 国产一区二区精品久久 | 希岛あいり中文字幕在线 | 国产一区二区三区久久悠悠色av | 美日韩视频 | 精品成人| 在线看国产 | 日韩欧美在线视频观看 | 日本公妇乱淫免费视频一区三区 | 亚洲日本视频 | 一区二区国产精品 | 中文字幕一区在线观看视频 | 日韩一区二区三免费高清在线观看 | 国产精品第2页 | 成人黄色毛片 | 亚洲人人精品 | 国产1区 | 91精品国产91久久综合桃花 | 97在线精品视频 | 国产精品久久999 | 国产精品三级一区二区 | 伊人伊人网 | yw.139尤物在线精品视频 | 欧美日韩国产在线 | 久久久国产精品x99av | 国产麻豆 | 精品一二三区在线观看 | 成人中文字幕在线观看 | 欧美性xxxxhd| 亚洲一级二级三级 | 精品国产99 | 免费黄色在线观看 | 成年人免费看 | 久久久性| 欧美日韩激情在线 | 激情五月视频 | 日韩精品一区在线 | 亚洲精品aⅴ中文字幕乱码 97视频免费在线 | 日日lu| 少妇精品视频一区二区免费看 | 一本色道精品久久一区二区三区 | 日韩一区欧美一区 | 国产毛片aaa| heyzo久久 | 亚洲一区二区三区四区在线视频 | 国产精品久久九九 | 久国产精品韩国三级视频 | 亚洲成人av在线播放 | 亚洲欧美日韩三级 | 国产激情美女久久久久久吹潮 | 日本免费视频 | 日韩在线黄 | 亚洲成人一区在线观看 | 欧美另类一区 | 成人免费毛片片v | 国产成人精品一区二区三区在线 | 在线观看国产一区 | 欧美一区| 成人免费在线观 | 国产免费视频 | 日韩精品视频中文字幕 | 蜜桃精品久久久久久久免费影院 | 岛国毛片| 欧洲成人午夜免费大片 | 欧美中文字幕一区二区三区 | 国产免费小视频 | 妹子干综合网 | 欧美日韩精品综合 | 亚洲免费三级 | 91久久综合亚洲鲁鲁五月天 | 欧美日韩免费在线视频 | 国产精品精品视频 | 久久五月婷 | 亚洲高清自拍 | 亚洲国产视频一区 | 68精品久久久久久欧美 | 在线免费黄色 | 欧美资源在线 | 嫩草国产 | 尤物精品 | 日韩一区二区视频 | 国产激情视频在线 | 男女黄色网| 91精品国产高清一区二区三蜜臀 | 日韩欧美一区二区在线 | 日韩国产中文字幕 | 国产成人精品久久二区二区91 | 久久国产精| 亚洲精区二区三区四区麻豆 | 国产a自拍 | 国产成人免费在线 | 中文字幕在线一区二区三区 | 亚洲精品美女久久久久99 | 日韩国产a| 美女福利视频网 | 精品综合99久久久久久www | 在线一区二区三区做爰视频网站 | 正在播放91精 | 成人精品国产免费网站 | av免费观看网站 | 亚洲欧美在线一区 | 国产专区在线 | 成人免费大片黄在线播放 | 中文字幕在线观看一区二区三区 | 在线看中文字幕 | 成人久久久 | 欧美性猛交xxxx黑人 | 国产日韩精品在线 | 欧美国产免费 | 国产高清在线精品一区二区三区 | 久久av网 | 91在线免费视频 | 欧美在线二区 | 91精品国产自产91精品 | av资源在线看 | 久久久久久国产精品 | 日本成人黄色片 | 国产精品一区二区在线看 | 久久精品国产精品 | 国产一区免费在线观看 | 韩日精品视频 | 黄色免费在线视频 | 精品在线免费观看 | 国产精品99久久免费观看 | 亚洲精品一区二区三区在线 | 欧美中文字幕在线播放 | 日韩国产一区二区三区 | 99re在线视频 | a毛毛片 | 国产偷窥女厕所高清 | 特黄网站 | 中文字幕av一区二区 | 能在线看的av | 在线观看不卡av | 亚洲午夜精品久久久久久浪潮 | 国产视频一二区 | 男人的天堂avav | 精品久久中文字幕97 | 91精品久久久久久久99软件 | 色婷婷久久 | 久久国产一区二区三区 | 中文字幕亚洲欧美 | 日韩a在线 | 91精品国产综合久久福利 | 亚洲日本视频 | 天堂成人国产精品一区 | 日韩久久久久 | 日韩三级久久 | 中文字幕在线观看第一页 | 粉嫩精品一区二区三区在线观看 | 天堂av一区二区三区在线播放 | 国产一二 | 久久精品网址 | 欧美精品一区二区三区视频 | 欧美视频在线看 | 日本网站免费观看 | 国产成人在线观看免费网站 | 国产精品久久久久久久久久98 | 99精品在线 | 黄视频网站免费 | 精品国产乱码久久久久久闺蜜 | 久久国产精品-国产精品 | 国产免费大片 | 久久免费电影 | 狠狠亚洲| 国产区一区| 成人免费激情视频 | 久国久产久精永久网页 | 天堂中文最新版在线网 | 久久国产精品一区二区三区 | 国产一区二区三区精品在线观看 | 精品久视频 | 久久精选| 日韩中文字幕久久 | 国产资源精品 | 97精品免费视频 | 麻豆视频一区二区 | 正在播放日韩 | 国产小视频在线 | 精品在线播放 | 一区二区三区四区国产 | 亚洲欧美激情精品一区二区 | 日韩免费一区二区三区 | 亚洲一区在线不卡 | 久久综合五月 | 国产成人av一区二区三区 | 日韩视频在线免费观看 | 欧美 日韩 亚洲 国产 | 尤物九九久久国产精品的特点 | 亚洲视频在线观看视频 | 成人免费激情视频 | 成人精品久久久 | 欧美一区二区在线播放 | 亚洲欧美视频在线观看 | 国产一二在线观看 | 欧美日韩在线第一页 | 蜜桃精品久久久久久久免费影院 | 天天操天天拍 | 欧美日韩网站 | 国产扒开脚做爽爽爽天美传媒 | 国产亚洲欧美另类一区二区三区 | 国产精品www | 亚洲一区二区久久 | 黄色永久 | 91婷婷射 | 在线国产一区二区 | 五月天久久久久久九一站片 | 色婷婷5月 | 国产一区二区精品 | 国产精品成人a免费观看 | 久久久久久网站 | 91麻豆精品国产91久久久久久 | 中文字幕亚洲第一 | 国产精品国产精品国产专区不蜜 | 国产视频一区二区在线观看 | 精品国产乱码久久久久久影片 | 中文字幕一区在线 | 日韩中文字幕电影 | 黄色视屏av | 色姑娘色综合 | 91精品国产综合久久精品图片 | 亚洲香蕉av | 日韩影音 | 成人在线一区二区三区 | 天堂成人国产精品一区 | 日日夜夜亚洲 | 欧美日韩国产二区 | 麻豆精品91 | 亚洲天堂偷拍 | 男女深夜网站 | 精品国产黄a∨片高清在线 五月色综合 | 久久人人网 | 成网站人电影亚洲国产 | 日本大胆欧美 | 国产日韩欧美视频 | 激情婷婷丁香 | av午夜| 激情欧美一区二区三区中文字幕 | 色综合久 | 欧美日韩国产二区 | 肉性天堂 | 伊人久久综合 | 亚洲在线播放 | 天堂а在线中文在线无限看推荐 | 不卡网| 国产成人小视频 | 操操碰| 午夜激情久久久 | 国产综合视频在线观看 | 国产精品久久久久久久久久久久久久 | 成人国产精品久久久 | 免费成人黄色网 | 久久久久久久成人 | 日本亚洲精品 | 久久99久久99精品免观看粉嫩 | 日本在线精品 | 黄色av电影在线观看 | 黄色特级一级片 | 在线观看国产 | 欧美日韩在线一区 | 国产伦精品一区二区三区视频金莲 | 欧美a在线 | 日韩精品网站 | 日韩一级免费 | 欧美精品久久久免费观看 | 成人h动漫精品一区二区器材 | 色免费观看 | 青草一区| 精品一区国产 | 精品91久久 | 日韩欧美精品在线观看 | 国产精品美女久久 | 精品国产乱码久久久久久久 | 看免费黄色一级片 | 范冰冰一级做a爰片久久毛片 | 日本不卡中文字幕 | 国产18精品| 国产视频久久 | 久久久久久久久国产 | 欧美一区 | 日韩不卡在线视频 | 亚洲天堂第一页 | 色婷婷综合久久久久中文一区二区 | 久久久久久久一区二区三区 | 97自拍偷拍视频 | 亚洲福利精品 | 日韩欧美精品 | 综合av第一页 | 中国黄色片在线观看 | jiuse九色最新地址 | 欧美黄网站 | 国产精品一区二区三区久久久 | 淫影视 | 国产精品伦一区二区三级视频 | 视频一区二区三区在线观看 | 日韩美女乱淫aaa高清视频 | 一区二区亚洲视频 | 97久久人人超碰caoprom欧美 | 国产精品国产三级国产aⅴ入口 | 99毛片| 欧美日韩高清在线观看 | 视频精品一区二区三区 | 亚洲一区二区三区免费在线观看 | 久久午夜影视 | 国产精品久久久久久久av大片 | 成人精品久久 | av看片| 男女网站在线观看 | 日韩精品一区二区在线观看 | 国产一区二区三区亚洲 | 免费三级黄色 | 亚洲免费在线 | 女国产精品视频一区二区三区 | 国产精品国产三级国产aⅴ原创 | 日韩三级久久 | 久久精品中文 | 九九九九久久久久 | 国产成人精品久久二区二区91 | 久久精品在线观看 | 久久亚洲一区二区三区四区 | 一级片免费视频 | 三级在线观看 | 三级黄色网址 | 九九福利视频 | 言情恋老小说言情网 | 国产精品三级在线 | 天堂在线观看 | 中文一区二区 | www网站在线观看 | 欧美一级精品片在线看 | 国产欧美精品区一区二区三区 | 国产综合精品一区二区三区 | h片观看| 一区二区三区久久 | 嫩草影院免费进入网站 | 性爱视频免费 | www.色com情11 | 欧美爱爱网 | 欧美精品一区二区三区在线播放 | 日韩精品在线一区 | 麻豆视频一区 | a天堂在线观看 | 视频在线日韩 | 99在线视频精品 | 国产一区二区在线播放视频 | 黄色毛片毛茸茸 | 国产精品一区不卡 | 亚洲网站在线看 | 91精品国产91久久久久久 | 在线久热 | 国产精品一区二区免费看 | 国产美女被遭强高潮免费网站 | 国产精品免费在线 | 国产成人在线视频网站 | 国产精品一区二区av日韩在线 | 成人精品视频在线观看 | 91精品久久久久久久久久入口 | 欧美成人一区二区三区 | 亚洲国产区 | 99久久久无码国产精品 | 亚洲影院一区 | 精品精品国产三级a∨在线 在线国产精品视频 | 午夜视频成人 | av中文在线 | 国产精品久久 | 国产中文字幕一区 | 在线免费av网站 | 精品成人免费一区二区在线播放 | 午夜操 | 精品美女久久久 | 亚洲第一天堂 | 天天干天天草 | 日韩极品在线 | 成人午夜小视频 | 久久精品国产99国产 | 国产精品99 | 欧美在线观看一区 | 日韩天堂在线 | 91小视频版在线观看www | 亚洲天堂久久 | 精品一区二区三区久久 | 国产高清一级 | av片在线观看 | 精品一区二区电影 | 99热精品在线观看 | 日韩毛片视频 | 日韩一区av| 欧美一级黄色片子 | 一区二区蜜桃 | 日日噜噜噜夜夜爽爽狠狠视频97 | 自拍偷拍福利视频 | 日韩欧美视频一区 | 91在线免费播放 | 中文字幕亚洲视频 | 成人国产在线 | 在线视频免费一区 | 国产单男 | 97在线观看视频 | 一区在线观看视频 | 久久精品国产一区二区 | 久久久精品久久久久 | 九九综合九九 | 欧美午夜免费 | 成人美女免费网站视频 | 91在线播放国产 | 亚洲 欧美 激情 另类 校园 | 日韩高清在线一区 | 国产综合亚洲精品一区二 | 国产一二区在线 | 欧美精品123区 | 久久亚洲国产精品 | 久久久久毛片 | 日韩一区二区三区精品视频 | 亚洲国产二区 | 成人天堂资源www在线 | 国产精品久久久久久久美男 | 日韩成人小视频 | 夜夜骑夜夜骑 | 久久毛片 | av免费在线网站 | 天堂欧美 | 五月综合激情 | 欧美一区视频 | 国产在线三区 | 99在线免费视频 | 男操女视频在线观看 | 欧美日韩国产三区 | av中文字幕第一页 | 亚洲成人一二三 | 精品国产凹凸成av人导航 | 国产精品区一区二区三区 | 最新日韩在线观看视频 | 免费在线观看污视频 | 91视频国产一区 | 在线1区 | 日本一区二区三区四区视频 | 国产亚洲二区 | 成年人免费看 | 亚洲国产精品久久 | 黄色免费视频 | 一区二区在线 | 亚洲综合久久久久 | 黄色片播放视频 | 精品一区二区三区久久久 | 久久国产精品免费一区二区三区 | 日韩精品视频在线播放 | 99久久精品一区二区成人 | 亚洲欧美一区二区在线观看 | 日韩欧美在线看 | 91久久精品国产 | 天堂电影 | 日韩免费视频观看 | 欧美日产国产成人免费图片 | 国产一区二区三区精品在线观看 | 一区二区国产在线观看 | 免费放黄网站在线播放 | 黄色大片免费看 | 91嫩草影视 | 九九人人| av老鸭窝| 日本中文字幕在线视频 | 久久99精品久久久久久青青日本 | 久久国产精品免费视频 | 九九九亚洲 | 6080av | 变态 另类 欧美 大码 日韩 | 欧美成人精品一区二区三区 | 国产精品大片 | 在线观看日韩精品 | 国产欧美精品一区二区三区四区 | 欧美精品性做久久久久久 | 九九九九精品 | 黄色综合 | 成人在线免费网站 | 日本一区二区三区免费观看 | 成人欧美一区二区三区1314 | 国产伦精品一区二区三区免费 | 日韩免费高清 | 成人欧美一区二区三区黑人动态图 | 欧美在线不卡视频 | 免费看羞羞的视频 | 精品色综合 | 国产精品久久久久久久久久久免费看 | 欧美成人精品网站 | 欧美日韩福利视频 | 欧美一区二区在线观看 | 国产一区二区三区高清 | 偷拍导航 | 国产午夜精品一区二区 | av在线激情 | 日韩久久久久久 | 三级视频在线播放 | av麻豆 | 国产成人精品在线观看 | 免费在线国产视频 | 黄色一节片 | 99亚洲| 久久久久久国产免费视网址 | 国产精品综合一区二区 | 99久久99久久精品免费看蜜桃 | 国产伦精品一区二区三区高清版 | 91免费在线看 | 亚洲精品一区二区三区香蕉 | 久久久蜜桃 | 久久婷婷丁香 | 国产片一区二区三区 | 久久午夜影院 | www一区二区三区 | 久久久国产一区二区三区 | 国产啪 | 国产精品精品视频 | 一级性感毛片 | 久久久久久影院 | 国产一区二区三区视频在线观看 | 欧美成人亚洲 | 成人毛片视频在线观看 | 一区二区欧美日韩 | 97超碰网| 久久久久久久久国产 | 综合久久一区二区 | 99久久综合| 色婷婷综合久久久中文字幕 | 羞羞视频在线观看免费视频 | 国产在线激情 | 欧美久久久久久久久久 | 精品在线一区二区三区 | 四色网址 | 婷久久| 五月婷婷综合在线 | 三级毛片黄色 | 欧美日韩福利视频 | 国产精品69久久久久水密桃 | 久久免费精品 | 国语对白av | 一区二区精品在线 | 一级毛片在线免费看 | 久久伊人国产 | 国产美女精品 | 波多野结衣一区二区三区 | 91视频日本 | 新久草 | www亚洲精品 | 成人一区二区三区 | 国产大尺度视频 | 成人久久网 | 久久伊99综合婷婷久久伊 | 日韩av在线一区二区三区 | 国产成人精品视频 | 成人永久免费视频 | 麻豆视频入口 | 日韩久久久久久久久久久久 | 欧洲久久| 成人夜晚看av | 国产精品一区二区三区久久久 | 夜夜骑狠狠干 | 欧美视频网站 | 精品国产污污免费网站精东 | 亚洲三级在线免费观看 | 91精品国产综合久久精品图片 | 精品国产乱码久久久久久丨区2区 | 一区二区三区日韩欧美 | 99免费视频| 精品久久久久久久久久中出 | 亚洲欧洲精品成人久久奇米网 | 成人污 | 激情毛片| 色永久 | 福利一区二区 | 欧美精品免费在线观看 | 国产精品免费网站 | 狠狠狠干 | heyzo久久| 国产精品无码久久久久 | 91精品国产综合久久香蕉最新版 | 精品在线一区 | 一区二区三区久久久 | 欧美成人综合在线 | 日本99 |