我的“Python海龟”诞生了一枚金蛋,孵出的却是“精灵”
时光要追溯到2010年。在那之前,我一直用Visual Basic语言编写3D小游戏,乐在其中。那时我觉得Basic已经是非常简单的计算机语言了,但心中始终有一个疑问:有没有比Basic更友好、更适合少儿的编程语言呢? 于是我开始在网络上持续寻找。果然,不久后我遇到了Scratch 1.4版——那只来自美国麻省理工学院的小猫,一下子抓住了我的心。从此,我踏上了少儿编程教育的道路:2013年开办了编程培训班,2015年将Python正式纳入教学体系,到2018年时,我已积撰写了相当丰富的Python教学材料。 在教学过程中,我逐渐感到Python内置的turtle(海龟作图)模块功能有些局限。于是,我打开它的源代码文件turtle.py,仔细研究其结构,并从2019年开始,基于Python turtle模块持续开发一个更强大的扩展——Python精灵模块(sprites)。这个模块的核心是一个叫做Sprite的类,它大幅增强了海龟的功能,例如实现了像素级的碰撞检测等。如今,任何人都可以通过pip install sprites来安装并使用它。 最近几年,我将更多精力投入信息学奥赛的教学中,整日“苦思冥想”各种算法难题。2025年8月,暑假班结束后,我又开始思考另一个问题:如果C++的入门教学能像Python turtle一样直观、有趣,那不就能为中国更多青少年打开编程的大门吗? 为此,我在GitHub上搜索已有的类似成果,也尝试了一些用C或C++编写的“类turtle”库,例如小熊猫C++内置的C语言海龟作图、GoC等,甚至购买了相关教材准备投入教学。但最终,我并没有采用它们。原因何在? 小熊猫C++中的海龟作图功能,作者显然缺乏Python少儿编程的教学背景。我曾联系他,希望将命令设计得接近Python turtle的风格,但毕竟不能一直麻烦别人,后来也就作罢。GoC则为了降低输入难度,将命令简化为单个或两个字符(如pen.o),其命令集较小,功能也相对有限。它主要依赖在线环境,作者并未提供独立的编辑器(早期离线版需搭配Notepad++使用)。GoC更像为信息学奥赛选拔苗子而设计的前置课程——网上甚至有人建议一、二年级就开始学习。如果你确定要走信奥路线,这或许可行;否则,并不适合普通学生。 这里涉及一个关键的教育认知问题:并非所有孩子都适合在低龄阶段接触C++。神经科学研究表明,大脑前额叶皮层(负责逻辑、规划与抽象思维)发育较晚,通常到青春期才趋于成熟。 有些孩子认知发展稍晚,若过早强制学习C++这类抽象程度高的语言,容易导致挫败感,甚至产生“习得性无助”。相反,在中低年级通过图形化编程(如Scratch)进行多感官、具象化的学习,能更好地刺激大脑不同区域,促进思维灵活性和创造力的发展。等到年龄增长、认知准备更充分时,再接触C++,往往事半功倍。 现实中,不少学生直到高中阶段才在逻辑思维上“开窍”,这恰恰说明大脑发育有其自然节奏,教育应当顺应而非违背它。 那么问题来了:对于大多数普通学生而言,如果一二年级接触图形化编程,三四年级学习Python,那么到了合适年龄,该如何顺畅地过渡到C++?市面上是否存在一套针对普通学生、能完美衔接既有体系的C++课程?或许有,但可能不公开或需付费。无论如何,我决定亲手打造一个——“金窝银窝,不如自己的草窝”。 首先面临的是技术选型。如果基于OpenGL,虽然强大,但学习成本较高;我也尝试过EasyX,并做出了原型,但因其底层控制不足而放弃;之后考虑过raylib(基于SDL2封装)和SFML,它们功能丰富,但封装程度较高,不利于我深入底层实现教育定制化的需求。最终,我选择了SDL2——这是一个工业级的跨平台库,接口相对底层,自由度大,掌控力强,正好符合我的开发理念。 于是,我以SDL2为基础,开始了漫长的开发与调试。最初叫它“C++ Sprites库”,后来正式定名为“C++精灵库”。为降低使用门槛,我还专门开发了配套的pxC++编辑器,并制作了Dev-C++ 5.11的升级包,使其能更好地融入中小学现有的C++教学环境。 如今,C++精灵库不仅完整继承了Python turtle的简洁API与教育基因,更在其基础上进行了优化与扩展,比如: · 新增fill命令,支持区域填充; · 通过函数重载,使pencolor等命令既支持字符串参数,也支持RGB/整数参数,更加灵活; · 设计penshade(阴影度)、pensat(饱和度)、penvalue(明度)、penhsv(HSV色彩模型)、penalpha(透明度)等色彩控制方法; · 加入贝塞尔曲线与样条曲线绘制功能,让有美术天赋的学生也能轻松创作复杂图形。 本质上,C++精灵库是Logo语言教育理念在C++领域的延续与升级。它借鉴Python turtle的友好界面,并依托SDL2的工业级能力,为学生搭建了一座从趣味编程通向真实开发的桥梁。你可以把Python turtle和C++精灵库看作一对“亲兄弟”——无论先学哪一个,再学另一个时都会产生“似曾相识燕归来”的亲切感。这种一脉相承的设计,实质是一种“双倍赋能”:既降低了学习新语言的心理门槛,又让学生在潜移默化中理解编程底层的共通逻辑。 正因为如此,当我让它们在外观和命令上如此相似时,请不要惊讶。更有价值的是,由于C++精灵库直接基于SDL2开发,学生可以在掌握基础作图后,无缝接入SDL2的更高级功能,进而探索游戏开发、交互媒体等更广阔的应用场景。这种从教育到实战的平滑过渡,是其他同类C++图形库难以比拟的。 这条路,我还会继续走下去。只愿这只从“海龟”蛋里孵出的“精灵”,能飞入更多中国少年的编程梦中,陪伴他们从好奇走向热爱,从图形走向算法,从今天走向未来。
