資訊內容
使用python拓展scratch的能力


本文則旨在闡述,如何用最簡單的方式拓展Scratch3.0。無需了解codelab-adapter的插件機制,也無需了解Scratch3.0的插件機制,只需要寫一個Python函數,即可為scratch加入新功能。
考慮到多數Scratcher對Python并不熟悉,讓他們理解插件的模版代碼,從繼承一個類開始,接著理解線程機制,有些不近人情。本文將闡述Scratcher如何使用最少的Python代碼來擴展他們自己的項目。

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

完成之后啟動scratch3-adapter,勾選extension_eim_script插件(在最新的scratch3-adapter版本中,已經內置了這個插件), 即刻生效,可以看到Python對Scratch的擴展已經生效:
每次修改eim_script.py建議重啟scratch3-adapter。
舊版本
extension_eim_script已經內置在0.3.0之后的版本中。如果你使用的scratch3-adapter版本低于0.3.0(通過菜單>關于>version查看版本),你需要先下載extension_eim_script插件。
下載插件在scratch3-adapter中下載插件很簡單,點擊 菜單>插件>下載,彈出輸入框,將插件的url鏈接復制粘貼其中即可。
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
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

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