使⽤Python拓展Scratch的能⼒
如果我们有设备和材料的结构,在我们⾯前就开辟了另⼀条路径。我们可以指导⼉童的活动,使它们沿着⼀定⽅向运⾏,把它们渐渐引导到这条道路逻辑上必然要达到的⽬标上。 --约翰·杜威《学校与社会》
希望不只对Pythonista友好,也对Scratcher友好。
我们在上篇⽂章:向开发者介绍了⼀些拓展Scratch的技巧。⽅便Python和Scratch的互操作,开发者们可以利⽤它制作功能强⼤的插件。将AI、物联⽹或者任何你能想到的东西接⼊到Scratch。
本⽂则旨在阐述,如何⽤最简单的⽅式拓展Scratch3.0。⽆需了解的,也⽆需了解Scratch3.0的插件机制,只需要写⼀个Python函数,即可为scratch加⼊新功能。考虑到多数Scratcher对Python并不熟悉,让他们理解插件的模版代码,从继承⼀个类开始,接着理解线程机制,有些不近⼈情。本⽂将阐述Scratcher如何使⽤最少的Python代码来扩展他们⾃⼰的项⽬。
设计上的思考
编程风格层⾯
Everything is message
尽可能保持Scratch风格,尽量不改变⼤家的编程习惯/范式。
基于消息的事件驱动风格是scratch编程的典型风格,继承⾃smalltalk。第⼀代的scratch采⽤smalltalk的⽅⾔squeak构建,所以scratch 从smalltalk中继承了很多设计原则,关于这部分的更多讨论可以参考我之前的⽂章:。
在中,我们可以看到稍有规模的程序都会⽤到消息积⽊
上图显⽰的是scratch社区⽤户创作的最受欢迎的游戏之⼀:, 程序之间的协同通过⼴播消息来完成。 利⽤消息实现了程序的解耦。
我们进⼀步观察,可以发现这个游戏使⽤了⼤量的消息:
能运行python的软件
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_adapter\extensions
从⼀个最简单的例⼦开始:
def handle(message,logger):
return message + ' from script'
我们写了⼀个名叫handle的函数来处理从Scratch EIM插件⼴播过来的消息。
消息内容在message参数中,logger参数你暂时可以忽略。
这个插件的功能是: 将Scratch⼴播过来的消息末尾加上from script,返回给Scratch那边。它不具备实际的⽤途,为了展⽰原理,它尽可能简单。
完成之后启动scratch3-adapter,勾选extension_eim_script插件(在中,已经内置了这个插件), 即刻⽣效,可以看到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链接复制粘贴其中即可。
下载完成之后重启软件,即可看到插件。
所有插件列表在
⽤例
留个课后作业。
利⽤这个插件,配合micro:bit,可以很容易实现: 你正在看《多啦A梦》,突然有⼈闯⼊了你的房间,你的屏幕⾃动切换为正在阅读论⽂。
参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。