資訊內(nèi)容
使用python拓展scratch的能力


本文則旨在闡述,如何用最簡(jiǎn)單的方式拓展Scratch3.0。無(wú)需了解codelab-adapter的插件機(jī)制,也無(wú)需了解Scratch3.0的插件機(jī)制,只需要寫(xiě)一個(gè)Python函數(shù),即可為scratch加入新功能。
考慮到多數(shù)Scratcher對(duì)Python并不熟悉,讓他們理解插件的模版代碼,從繼承一個(gè)類開(kāi)始,接著理解線程機(jī)制,有些不近人情。本文將闡述Scratcher如何使用最少的Python代碼來(lái)擴(kuò)展他們自己的項(xiàng)目。

設(shè)計(jì)上的思考
編程風(fēng)格層面
Everything is message
盡可能保持Scratch風(fēng)格,盡量不改變大家的編程習(xí)慣/范式。
基于消息的事件驅(qū)動(dòng)風(fēng)格是scratch編程的典型風(fēng)格,繼承自smalltalk。
什么是Smalltalk?
Smalltalk是一種面向?qū)ο蟮摹?dòng)態(tài)類型的編程語(yǔ)言。Smalltalk由艾倫·凱,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC開(kāi)發(fā)。
Smalltalk對(duì)其它眾多的程序設(shè)計(jì)語(yǔ)言的產(chǎn)生起到了極大的推動(dòng)作用,主要有:C++,C#,Objective-C,Actor,Java和Ruby等。90年代的許多軟件開(kāi)發(fā)思想得利于Smalltalk,例如設(shè)計(jì)模式、敏捷編程和代碼重構(gòu)等。
第一代的scratch采用smalltalk的方言squeak構(gòu)建,所以scratch從smalltalk中繼承了很多設(shè)計(jì)原則。
scratch設(shè)計(jì)原則
1.如果一個(gè)系統(tǒng)要服務(wù)于創(chuàng)造精神,那么對(duì)于一個(gè)人來(lái)說(shuō),它必須是完全可以理解的。
2.系統(tǒng)應(yīng)該用最少的且不可更改的部件構(gòu)建; 這些部分應(yīng)盡可能一般化; 系統(tǒng)的所有部分都應(yīng)保持在統(tǒng)一的框架內(nèi)。
3.計(jì)算應(yīng)該被視為可通過(guò)發(fā)送消息來(lái)統(tǒng)一調(diào)用的對(duì)象的內(nèi)在功能。
4.語(yǔ)言應(yīng)圍繞一個(gè)強(qiáng)大的隱喻設(shè)計(jì),這樣就可以統(tǒng)一應(yīng)用于所有領(lǐng)域。
5.用戶可以訪問(wèn)的每個(gè)組件都應(yīng)該能夠以有意義的方式呈現(xiàn)自己,以便于用戶進(jìn)行觀察和操作。
在scratch官方社區(qū)中,我們可以看到稍有規(guī)模的程序都會(huì)用到消息積木。
上圖顯示的是scratch社區(qū)用戶創(chuàng)作的最受歡迎的游戲之一:
Bouncy Ninja 2(地址復(fù)制黏貼:
https://scratch.mit.edu/projects/227802255/editor)?程序之間的協(xié)同通過(guò)廣播消息來(lái)完成。 利用消息實(shí)現(xiàn)了程序的解耦。
我們進(jìn)一步觀察,可以發(fā)現(xiàn)這個(gè)游戲使用了大量的消息:
Scratcher之所以依賴消息機(jī)制,其中的原因:
消息機(jī)制是Scratch的核心機(jī)制。
消息是絕佳的解耦工具,如果你逛一逛Scratch社區(qū),就可以看到人們構(gòu)建了許多令人驚嘆的項(xiàng)目。它們中的許多并不簡(jiǎn)單,消息是幫助他們克服復(fù)雜度的核心工具之一。這個(gè)特性繼承自smalltalk的設(shè)計(jì)原則:?計(jì)算應(yīng)該被視為可通過(guò)發(fā)送消息來(lái)統(tǒng)一調(diào)用的對(duì)象的內(nèi)在功能。
所以在編程風(fēng)格層面,希望scratcher在使用Python拓展程序功能時(shí),覺(jué)得是順滑的,不強(qiáng)行要求他們轉(zhuǎn)化范式。
教育層面下邊說(shuō)說(shuō)教育層面的思考。
我們來(lái)討論下目前這個(gè)領(lǐng)域,大家所關(guān)心的:如何從圖形界面過(guò)渡/進(jìn)階到代碼。
事實(shí)上,我不認(rèn)為這種過(guò)渡是必須的。當(dāng)然我也并不反對(duì)從圖形界面過(guò)渡到代碼。如果這種過(guò)渡是必要的,我希望它們是漸進(jìn)的,而不是割裂的,否則就不叫過(guò)渡了。初學(xué)者熟悉scratch,也喜歡它,我知道大多數(shù)使用scratch的孩子,對(duì)它的好感大都勝過(guò)文本語(yǔ)言。你不必拋棄scratch,如果你需要一些更強(qiáng)大的功能,使用Python去擴(kuò)展它,這個(gè)過(guò)程應(yīng)該很愉快,你寫(xiě)了很少的Python代碼,立馬就能應(yīng)用到你喜歡的Scratch項(xiàng)目上,你看到你逐漸能做更多有趣的事,你感到充滿樂(lè)趣,所學(xué)的新知識(shí),立馬應(yīng)用在你感興趣的項(xiàng)目里。
我們反對(duì)割裂式的教學(xué),學(xué)習(xí)者從scratch切換到Python,很長(zhǎng)時(shí)間內(nèi)只能通過(guò)print看到輸出,沒(méi)有生動(dòng)的反饋,于是許多人便對(duì)階段感到沮喪,踏上一條從入門(mén)到放棄的路。
學(xué)習(xí)的過(guò)程,有時(shí)的確會(huì)遇到一些困難,有些困難是固有的,或者如康德所說(shuō)的它是先天的。另一些則是人為的,教育者或者基礎(chǔ)設(shè)施建設(shè)者應(yīng)該努力去清理那些人為的困難。
我不喜歡教育者們有時(shí)候提到的學(xué)習(xí)的過(guò)程,痛苦必不可少,所以你應(yīng)當(dāng)忍受這種宿命論的觀點(diǎn),有時(shí)候它只是我們懶惰和無(wú)能的借口。
使用
下邊我們來(lái)演示如何使用它。
在插件目錄創(chuàng)建eim_script.py。
ps: 插件目錄可以通過(guò) 菜單>插件>查看目錄 查看:
Mac/Linux用戶在:
~/scratch3_adapter/extensions,?
windows用戶在:C:Users[你的用戶名]scratch3_adapterextensions
從一個(gè)最簡(jiǎn)單的例子開(kāi)始:
def handle(message,logger):return message + ' from script'我們寫(xiě)了一個(gè)名叫handle的函數(shù)來(lái)處理從Scratch EIM插件廣播過(guò)來(lái)的消息。
消息內(nèi)容在message參數(shù)中,logger參數(shù)你暫時(shí)可以忽略。

完成之后啟動(dòng)scratch3-adapter,勾選extension_eim_script插件(在最新的scratch3-adapter版本中,已經(jīng)內(nèi)置了這個(gè)插件), 即刻生效,可以看到Python對(duì)Scratch的擴(kuò)展已經(jīng)生效:
每次修改eim_script.py建議重啟scratch3-adapter。
舊版本
extension_eim_script已經(jīng)內(nèi)置在0.3.0之后的版本中。如果你使用的scratch3-adapter版本低于0.3.0(通過(guò)菜單>關(guān)于>version查看版本),你需要先下載extension_eim_script插件。
下載插件在scratch3-adapter中下載插件很簡(jiǎn)單,點(diǎn)擊 菜單>插件>下載,彈出輸入框,將插件的url鏈接復(fù)制粘貼其中即可。
extension_eim_script插件的鏈接是:?https://github.com/Scratch3Lab/scratch3_adapter_extensions/blob/master/extension_eim_script.py
下載完成之后重啟軟件,即可看到插件。
所有插件列表在scratch3_adapter_extensions 地址:
https://github.com/Scratch3Lab/codelab_adapter_extensions
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過(guò)郵件及時(shí)和我們聯(lián)系刪除

- 上一篇
被北大盯上的小學(xué)生Scratch作品
這是一位小學(xué)生的游戲編程作品,記得當(dāng)時(shí)好像大概更新了有二十多個(gè)版本,作品中所有的角色都是他自己在PPT中繪制的。小學(xué)時(shí)因癡迷于編程經(jīng)常溜到電腦室編寫(xiě)自己的游戲或者是錄制視頻開(kāi)講Scratch編程課,后來(lái)還主動(dòng)自學(xué)了C語(yǔ)言,曾對(duì)我說(shuō)要出一本C語(yǔ)言的書(shū),因?yàn)樗f(shuō)自己看到的C語(yǔ)言書(shū)都不適合孩子
- 下一篇
告別橙色變量----如何在scratch中設(shè)置彩色變量
今天轉(zhuǎn)載一篇來(lái)自Scratch愛(ài)好者的投稿文章! 這篇文章中作者來(lái)介紹如何在scratch中設(shè)置彩色變量。 ? ? ? 在scratch2中,你也許已經(jīng)看厭了橙色變量,那么怎么將變量設(shè)置為別的顏色呢?